こんにちは 上津原です。
今回から実装編に入っていきます。 基本的に実装編では、各機能がどんなふうにできていったかを紹介していきたいと思います。
今回は「朝~夜の日照のシミュレーション」について話をしていきます。
OculusRiftでSkyboxがぶれて見える件
普通にUnityでやるようにSkyboxを設定すると、Riftを通してみたとき、タブって見えます。 これは、OculusRiftのSDKでは、立体になるように左右の目でちょっとずれた映像を出しているのですが、Skyboxに関しては左右が全く同じ映像が出ているため起きるようです。
↑左右の立方体の市場微妙に違うが、空の表示はだいたい同じになっている。これだと立体視されない。
それの対応のためStereoarts Homepageさんの、「SkyboxMesh.cs」を利用させていただきました。
これを利用することで、Skyboxがブレることなく表示することができました。
↑左右の雲の描画にずれが生まれ、Riftでみてもぶれなくなっている。
使い方も非常に簡単で、カラのGameObjectを作成して、Skyboxmesh.csをそいつにドロップ。そうしたらInspector内にあるSkyboxの部分に表示したいSkyboxを設定すれば表示が可能です。この際、あらかじめ設定していたSkyboxの設定は抜いておきましょう。
ちなみに、ここでSkyboxを指定した時点ではSceneでSkyboxは表示されません。実行時に描画がされるので何も見た目が変わらなくても大丈夫です。
時間帯の変更について
今回のアプリケーションでは、朝、昼、夕方、夜の4つの時間帯の体験が可能です。これらはDirectional Lightの向き、強さ、色変更と、Skyboxの変更を行っています。
つくりは非常に簡単で、Directional Light用のScriptを作り、そこから向き、強さ、色の変更と、上で紹介したSkymapmeshへとアクセスし光の具合を変更しています。
こんな感じであとからでも把握しやすいように各マテリアルはインスペクタに表示されるよう作っています。
ちなみに角度はそれぞれ固定となっています。
最終的には、太陽の動きを日付や時間帯を指定することでリアルな太陽光のシミュレーションができるようにしたいと思っています。
影の描画について
今回は、PCスペックの都合上影の描画はDirectional Lightのみとしており、室内の光に関しては影の生成が行われない作りとなっていました。
その結果、いまいちリアルな描写ができていないという現状があるため、ここもPCスペックの見直しを行い、室内光源からの影の描写なども対応予定です。
最も苦労した点
Skyboxmeshへのアクセスでした。SkyboxmeshはC#で書かれており、こちらのスクリプトはJavaScriptだったため、どのようにアクセスをすればいいか?という点が一番の問題でした。
そこで、Skyboxmeshに以下のコードを追加させていただきました。こうすることで外からSkyboxマテリアルを渡すことでSkyboxを変更できるように対応しました。
気を付けるべき点は、「skymesh」というタグがついたオブジェクトをいったんすべて削除しなくてはならない点です。 削除せずに変更をしようとすると見た目は変わってくれませんので、そこに気をつけなくてはいけないです。
これがでができてしまえばあとは簡単で、Javascriptから、
var skyboxMeshObj : GameObject = GameObject.FindGameObjectWithTag("SkyBox");
var skyBoxMesh : SkyboxMesh;
skyBoxMesh = skyboxMeshObj.GetComponent("SkyboxMesh");
skyBoxMesh.Change(noonSkybox);
などしてやれば変更ができます。(Skyboxmeshの入っているオブジェクトには「Skybox」タグがついています)
日あたりは部屋にとって大事なステータス
みなさんも賃貸などを選ぶときに、日当たりは重視されるかと思います。
ここがよりリアルになれば、VRでの物件選びへの道が大きく前進すると思います。今後日当たりはより現実に近いものにしていきたいですね。