texCUBEの前に用いるreflectないしはrefractにはワールド系での視線と法線が必要になるわけだが、これを使うためには頂点シェーダからワールド系に変換済みの頂点座標とカメラ位置と法線を持ってこないと駄目なわけです。(使った雰囲気で多分)
そうすると、頂点ごとにワールド系に変換する負荷を押さえるためにモデルにあわせて回転させておいたパーピクセルランバートとパーピクセルスペキュラのためのライト方向とカメラ位置が無駄になってしまうのだが、どうすればいいんだろうか。ちなみに、回転させたカメラ位置と未回転法線でreflectするとモデルのみの回転ですらキューブマップの参照先がカメラを動かしたようになってしまう。
現実的な順から解決策を書くと
- オーソドックスにワールド系をそのまま使って定数を減らすか
- 環境マッピングの有無でそれらを切り替えるか
- なんとかして回転済みカメラ位置と未回転法線でreflectできる方法を探すか
になるんだろうけど、1は当然一番重いし、2は今時はそこら辺のマテリアルすら環境マッピングを用いることが多いので1とあまり変わらなさそうだし、3は適当に考えた感じだとreflectした後に回転させないと駄目で現実味が無いんだよなあ。
普通の環境マッピングなんて初歩的なので未だにワールド系使うサンプルしか見たこと無いし、どうしたもんかしら。

コメントする