VRエンジン作成日記

ひたすらVRエンジンを作っていきます

destroyメソッドを追加

画面からオブジェクトを破棄するためにdestroyメソッドを追加した。WebGLの仕様が十分に理解できていないため、1カ所問題が解消できていないところがある。MeshRendererでVBOをdeleteBufferで消したのと同じ描画フレームで、他のオブジェクトを描画しようとした時に警告が出てしまう問題が解消できていない。次のフレームになると警告が出なくなる。なぜそうなるのかもいまいち理解できていない。これは後ほど思い出した時にじっくり考えようと思う。

他には、オブジェクトを表示要素としてシーンに登録したり外したり、他のオブジェクトの子オブジェクトにする時の問題を解消した。この処理は、設計方法の都合で場合分けがややこしくなってしまった。シーンに子要素として登録するのと、他のオブジェクトに子要素として登録するのとで考え方を分けてしまったので、都度どの親要素からどの親要素に移動させるかを場合分けする実装になってしまっている。

・関連するコミット

add destroy method · hikipuro/tea.js@6694a23 · GitHub

 

オブジェクトの情報をJSON形式で出力

画面に登録されているオブジェクトの情報をJSON形式で出力できるようにし始めた。まだ完全にはできていない。これができると、プログラムでオブジェクトの作成工程を全て書くのではなくて、JSON形式であらかじめ用意しておいた情報を使って画面を復元することができる。つまり、編集ツールを使ってシーンの編集ができるようになる。また、リリースバージョンの配布も楽にできる。

・関連するコミット

add toJSON method · hikipuro/tea.js@633c1a1 · GitHub

 

Skyboxを表示できるようにした

Skyboxを表示できるようにした。背景のクリア時に使うことができる。

f:id:hikipuro:20180920204401p:plain

この画像はUnityのアセットストアからお借りした。画像はリポジトリには含めていない。

assetstore.unity.com

背景をSkyboxにするだけできちんと画像を描いている感じが出てくる。今のところカメラを動かしても正常に描画できるか等、テストできていないところもある。

Skyboxのメッシュの面の接続部分に隙間ができてしまったので、テクスチャの端の処理をミラーに設定したら隙間がなくなった。

・関連するコミット

add Skybox class · hikipuro/tea.js@c41f76a · GitHub

 

Rigidbodyを実装し始めた

Rigidbodyを実装し始めた。今のところ重力と外力を加えるくらいしかできない。衝突判定は実装していない。2Dの簡単な物理シミュレーションは実装したことがあるけど、3Dは実装したことがないので難しい。

・関連するコミット

add Rigidbody class · hikipuro/tea.js@751877a · GitHub

 

Vector3クラスを修正

Vector3クラスを修正した。未実装のメソッドの実装とテストケースの追加を行った。なぜ実装していないメソッドがあったのかというと、実装内容が想像できなかったから。単純に難しかった。Quaternion等を実装していく中で、Vector3の実装が難しいメソッドの実装方法も見えてきたので、ようやく実装できるようになったというような感じ。まだSmoothDampメソッドが未実装になっているけど、すぐに必要にはならないのでしばらく置いておこう。

 

・関連するコミット

fix Vector3 and test · hikipuro/tea.js@fada4be · GitHub

 

マウスホイールに対応

マウスホイールに対応する処理を追加した。

あとは、MonoBehaviourと同じような動きをするクラスにawakeとlateUpdateを追加した。今日はほとんど進まなかった。

・関連するコミット

add mouse wheel support · hikipuro/tea.js@27da47e · GitHub

 

シャドウマップを修正した

シャドウマップを修正しないまま1週間くらい放置していたので、見栄えがする程度に修正してみた。解像度を上げればそれなりに使いどころはありそう。今のところ、セルフシャドウのかかりかたとエッジが滑らかになっていないところが気になってはいる。あと、局所的にしかシャドウマップを生成できない感じになっているので、シーンのどこにでも影が付けられるように工夫したい。

あと、平行投影カメラの時に視錘台カリングがうまく動作しないようだったのでいったん無効にした。今の実装では透視投影カメラでもうまくいかないケースがありそうだ。AABBの一番近い点だけでカリングの判定をするだけでは十分ではなく、一番近い点は視界に入らない時に、far方向に向こうの点が視界に入るケースがある。そのケースでは視界にあるはずなのに突然画面から消えてしまうということが発生するかもしれない。勘違いかもしれないので、これについてはもう一度考えてみる。

・関連するコミット

fix shadow map · hikipuro/tea.js@3eab611 · GitHub