VRエンジン作成日記

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

実行速度を最適化した3

今日も実行速度を最適化していた。キャッシュは今のところできる限り書いたように思える。あとは、Vector3クラスの初期化時等のタイミングで、x: number = 1 と書いていたところを、x: number = 1.0 というような書き方に変えたりしていた。整数型から浮動小数点型への暗黙の型変換を減らす目的で書き換えたんだけど、もはや効果があるのかどうか分からないオカルトの領域に入っているかもしれない。実測すれば良いんだけどね。

インターネットでJavaScriptの最適化について検索してみると、関数本体の文字数がコメントを含めて600バイトを超えると十分な最適化がかからないというような話を見つけた。GoogleのV8の場合はどうだったかちゃんと読んでいないけど、JavaScriptの実行エンジンによってはそういう作りになっているものもあるようだ。おそらく、関数の呼び出し元のコードへインライン展開する処理に置き換える時の閾値を600バイトにしている実行エンジンがあるということだと推測している。これも自分では実測していないので、実際のところどうなっているのかは分からない。

今日は他に、カプセルオブジェクトの天井のポリゴンが欠けてしまう問題も修正した。天井のポリゴンの法線と掛ける値がちょうど同じ (0.0, 1.0, 0.0) になる時に、法線の値が (0.0, 0.0, 0.0) となってしまうことに問題があった。これは、外積を取る時に2つのベクトルが完全な平行だとゼロベクトルになってしまう問題と同じものだった。なので、掛け算する前にイプシロンみたいな値をほんの少し足して、完全な平行と見なされないようにするとゼロベクトルになってしまう問題は回避された。

あとは、光源をきちんとLightオブジェクトにまとめ始めた。今のところ平行光源しか実装できていないので、点光源とかを追加したいと思っている。

・関連するコミット

optimize speed · hikipuro/tea.js@cf59d5c · GitHub