【unity】新しい反射の表現方法
前回の記事に続き、反射について扱います。
おさらい
ゲームでの反射表現は
・環境マップ
・SSR
・カメラ使用
の3種類があると紹介しました。
今回は私が考案した第4勢力
反転オブジェクト法
をご紹介します。
なんですかこのネーミングでバレバレな方法は。
でもでもこれなかなか合理的だと思うんです。仕組みは至ってシンプルです。反転させたオブジェクトを、鏡の位置から線対称になるように配置するだけ。
ちょっと大変なのが鏡越しのキャラクターの設定。動きを反転させつつ、モデル自体も反転させなくてはいけません。
そしてもう一つ忘れてはいけないのが、トリガーを設置して鏡が見える範囲のみミラーオブジェクトをアクティブにすること。これをしないと、鏡の裏側に部屋があったりすると重なってしまいますのでね。
トリガーは箱型にして『トリガー内にいる間ずっとオン』の仕組みで良さそうですが、なんとなく今回はドア型にして『一度通ったらオン』『もう一度通ったらオフ』の仕組みにしました。
注意すべき点は、トリガーは部屋の大きさで取るのではなく、鏡が見えなくなる点で取るということです。
工夫ポイント
鏡部分に板ポリゴンが一枚あり、鏡の汚れを書いて加算しています。汚れ以外の部分も真っ黒ではなく若干グレーにしているので、ちょっと白っぽくなってます。逆に乗算にして暗くするとかでも良さそうです。
また、今回はやっていないですが、ミラー側の部屋のマテリアル自体を変えてしまって、距離に応じて色味を変えたり、近づくと顔が変わるなどのホラー演出も出来そうです。
メリットその1
とにかく軽い。データ量に関しても同じメッシュデータ、同じテクスチャ、工夫しなければ同じマテリアルでいけるので、負荷といえばポリゴン数くらいです。TPSではキャラクターを二体表示する必要がありますが、FPSなら最悪自分は表示しなくてもいいので、工夫すればいかようにもできます。データ容量を多少圧迫しますが、鏡側専用のキャラモデルを若干ローポリで用意するとかでもいいと思います。特に背中は見えないので。
メリットその2
リアル。
に見えますよね?見慣れてしまうと向こう側にオブジェクトがあることを認識してしまうのでだんだん鏡だと認識できなくなってきてしまうのですが、まあリアルでしょう。
メリットその3
レイトレ以上に正確に、カメラ外のオブジェクトが表示できる。
なんならリアルタイムレイトレがまだ普及してない今の時代、これはかなり画期的なのではないだろうか(自画自賛)
一方デメリットももちろんあります。
デメリットその1
屋外ではほぼ使えない。ビルの反射とか考えてもらえるとよくわかるかと。街を反転させてそこに置くなんてことはできませんね。かろうじて水たまりや地面より下に反転させる鏡表現はできそうですが、これは描画負荷が高そう。やるのであれば極限まで映り込むモデルを計算して、いらないものは全て削除するくらいした方が良さそうですね。
デメリットその2
鏡の裏側の空間と鏡が両方見えるような間取りも使えない。
例えば商業施設にあるようなトイレとか。
この場合間取りを変えるか、どうしてもこの間取りにしたい場合は鏡の向きを変えたりついたてを付けたりすれば対処は可能。でもそういうことを考慮して設計しなきゃいけないというのが面倒ですね。
デメリットその3
曲面にも使えない。
これは未検証ですが、曲面鏡専用にちょっと歪んだモデルを別で作れればもしかしたら対処できるかも?
いかがでしょうか。個人的には大発見の気持ちでこれを書いているんですが、もしかして他にもう実用してるゲームとかあるんですかね。ご存知の方いらっしゃいましたら是非コメントいただけますと幸いです。
おまけ
上手く調整できていませんが、多分夜の窓ガラスの表現も出来ちゃう気がします。