VRエンジン作成日記

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

2018-09-01から1ヶ月間の記事一覧

ParticleSystemを修正4

今日はShapeModuleを部分的に実装した。ようやくまともにパーティクルが表示されるようになった。ColorOverLifetimeModuleもうまく動いているようなので、これで満足行く表示ができるケースもあるのではないかと思う。 Unityのパーティクルシステムは機能が…

ParticleSystemを修正3

さらにParticleSystemを修正した。今日はGradientクラス等を実装していた。Gradientクラスは2つ以上の色を補間する時に使用する。RGB値とアルファ値は別々に補間するようになっている。AnimationCurveはベジェ曲線で補間していたけど、Gradientは単純な線形…

ParticleSystemを修正2

ParticleSystemを修正した。可能な限りUnityのShurikenを再現しようと思ったら、AnimationCurveの実装が難しかった。キーフレームを追加してベジェ曲線を描くような構造になってるんだけど、発想を理解するまでに時間がかかってしまった。まだ完全には実装で…

ParticleSystemを修正

ParticleSystemを修正した。今まではdrawArrays()メソッドにgl.POINTを指定して描画していたので、描画内容の変更がほとんどできなかった。柔軟性を持たせるために板ポリゴンをビルボードで表示するようにした。とりあえずこれでテクスチャの変更はできるよ…

Audio関連の機能を追加

Audio関連の機能を追加した。Web Audio APIで実装している。今のところ効果音が鳴らせるくらいの機能しかできていない。ループで曲が鳴らせるようになればBGMとして使えるようになりそう。 ・関連するコミット add audio classes · hikipuro/tea.js@40f81ae ·…

TextMeshの描画品質を改善

TextMeshの描画品質を改善した。2DのCanvasに文字を書いて、テクスチャとして板ポリゴンに張り付ける方法でTextMeshの実装を行っている。今まではCanvasに文字を書く段階で色を設定後、そのままの色でテクスチャを生成し、テクスチャの品質をBilinear補間に…

ローカルサーバでデバッグできる環境を構築

ローカルサーバでデバッグできる環境を構築した。WebサーバはExpressをnpmでインストールした。今までElectronのみで実行確認していたけど、ローカルWebサーバからHTMLを送信する構成にすることで、Firefox等でも実行確認が取れるようになる。なぜ動的なWeb…

destroyメソッドを追加

画面からオブジェクトを破棄するためにdestroyメソッドを追加した。WebGLの仕様が十分に理解できていないため、1カ所問題が解消できていないところがある。MeshRendererでVBOをdeleteBufferで消したのと同じ描画フレームで、他のオブジェクトを描画しようと…

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

画面に登録されているオブジェクトの情報をJSON形式で出力できるようにし始めた。まだ完全にはできていない。これができると、プログラムでオブジェクトの作成工程を全て書くのではなくて、JSON形式であらかじめ用意しておいた情報を使って画面を復元するこ…

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

Skyboxを表示できるようにした。背景のクリア時に使うことができる。 この画像はUnityのアセットストアからお借りした。画像はリポジトリには含めていない。 assetstore.unity.com 背景をSkyboxにするだけできちんと画像を描いている感じが出てくる。今のと…

Rigidbodyを実装し始めた

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

Vector3クラスを修正

Vector3クラスを修正した。未実装のメソッドの実装とテストケースの追加を行った。なぜ実装していないメソッドがあったのかというと、実装内容が想像できなかったから。単純に難しかった。Quaternion等を実装していく中で、Vector3の実装が難しいメソッドの…

マウスホイールに対応

マウスホイールに対応する処理を追加した。 あとは、MonoBehaviourと同じような動きをするクラスにawakeとlateUpdateを追加した。今日はほとんど進まなかった。 ・関連するコミット add mouse wheel support · hikipuro/tea.js@27da47e · GitHub

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

シャドウマップを修正しないまま1週間くらい放置していたので、見栄えがする程度に修正してみた。解像度を上げればそれなりに使いどころはありそう。今のところ、セルフシャドウのかかりかたとエッジが滑らかになっていないところが気になってはいる。あと、…

ライティングの調整

ライティングの処理を調整した。今までは平行光源だけを実装していたけど、点光源とスポットライトを追加した。スポットライトは今のところフラグメントシェーダで処理した方がいいところを頂点シェーダで処理してしまっているので、表示に不自然さが残って…

OBB同士の衝突判定を追加

OBB同士の衝突判定だけど、昨日コミットするところまで行かなかったので修正してコミットしておいた。マルペケさんのサイトを見なかったら、おそらく実装できていなかっただろうと思う。 あと、Color.white とかの固定の値を static readonly にしていた。毎…

OBB同士の衝突判定を追加しようとした

OBB同士の衝突判定を追加しようとしたけど、今日中にはできなかった。マルペケさんのサイトで詳しく解説されてるから、理解してから実装しようと思ったら理解するのが難しかった。 その13 OBBとOBBの衝突 他には、さらに最適化を入れようとしたけど失敗した…

OBJファイルの読み込み処理を修正

OBJファイルの読み込み処理を修正した。わりと複雑なモデルも読み込めるようになった。 画像のドラゴンのモデルは 871,306 ポリゴンもあるようだ。読み込み処理自体は数秒かかるものの、画面に表示する時はタスクマネージャで確認するとCPU負荷は増えていな…

OBBとRayの衝突判定を追加

OBBとRayの衝突判定を追加した。ようやく画面内のオブジェクトをマウスで綺麗にクリック判定できるようになった。OBB同士の衝突判定を追加すれば、簡単なゲームなら作れるようになったのではないかと思う。 あと、今日も実行速度の最適化処理を念入りに追加…

実行速度を最適化した3

今日も実行速度を最適化していた。キャッシュは今のところできる限り書いたように思える。あとは、Vector3クラスの初期化時等のタイミングで、x: number = 1 と書いていたところを、x: number = 1.0 というような書き方に変えたりしていた。整数型から浮動小…

実行速度を最適化した2

今日も実行速度を最適化していた。1回計算すれば使いまわせる行列が1フレームに何度も作られていたりとか、無駄のある箇所を削ったりしていた。簡単な最適化を入れたつもりでも、コードの読みやすさが劇的に下がってしまう。メンテナンス性とバランスを取…

マウスのクリック位置とオブジェクトの衝突判定処理を追加

マウスのクリック位置とオブジェクトの衝突判定処理を追加した。処理内容としては、カメラからマウスのクリック位置方向へ線をまっすぐ作って、その線とオブジェクトを囲む箱とが衝突するか判定する処理を書いた。次のサイトを参考にさせて頂いた。 その18 …

実行速度を最適化した

実行速度を最適化した。JavaScriptでは、C言語だとコンパイラが最適化してくれそうな箇所で最適化が入らなかったりする。最適化の一般的なお話でいうと、次のような項目は効果があると言えそう。 ・関数のインライン展開 ・複数回参照される項目を変数にキャ…

バンプマッピングを実装してみた

バンプマッピングを実装してみた。考え方については分かっていたものの、具体的にコードで考えるのは難しかった。下の画像の地面の部分と、カプセルのオブジェクトから文字が飛び出しているように見えるところがバンプマッピングの処理。 次のサイトを参考に…

視錐台カリングを実装してみた

今日は視錐台カリングを実装した。実装したけど、考え方をきちんと理解しているわけではない。次のサイトに書かれている内容を参考にさせて頂いて、なんとなくで書いた。 edom18.hateblo.jp 描画オブジェクトが多い場合は違いが分かりそうだけど、今のところ…

親子関係にあるオブジェクトの座標2

シャドウマップがうまくいっていないことも気になってるんだけど、そもそもフォンシェーディングも綺麗にできていなかった。さらに考えると、親子関係のオブジェクトの位置関係もUnityと見比べると違う結果になっていた。 親子関係のオブジェクトは、 ・親オ…

シャドウマップを実装しようとした

シャドウマップを使って影を描く処理を実装しようとしたけど、難しくて今日中に終えることができなかった。 毎日1個ペースで機能を増やそうと思ってたけど、何日か考える必要がある箇所がこれからもたびたび出てきそうな予感。以前に考えたことがある内容で…

RenderTextureの追加

今日はRenderTextureを追加した。いつものことながら、今のところ雑に追加したままになっている。 地面に敷いた、四角形の領域でRenderTextureを使用している。この機能があると、他のカメラでレンダリングした映像を再度画面に配置して、2次元のテクスチャ…

パーティクルシステムを作り始めた

パーティクルシステムというのは、小さな点が次々に飛び出してくるような機能。 雪が降っているシーン、星が奥から飛び出してきて光速移動しているように見えるシーン、シューティングゲームの爆発効果とかで使うことができる。この機能があると、様々な用途…