#MirrorRefrection
MirrorRefrectionは平面の鏡を表現するのに最適なアセットです。
以下のような特徴があります。
- 動的な反射ができる
- リフレクションプローブよりパフォーマンスコストが低い。
- 平面の反射しか想定していない(球面とか無理)
- 鏡にTextureを適用できる
MirrorRefrectionイメージ画像
わかりやすいように鏡(MirrorRefrectionを適用したPlane)に色をつけてます。Cubeが鏡に映っている様子がわかると思います。
余談ですが、ユニティちゃん Candy Rock Starのステージの床の反射にもこのアセットの技術が応用されているらしいです。
https://www.youtube.com/watch?v=M_GUlXJ52YA
#MirrorRefrectionの使い方
- 上記リンク先からMirror.shaderと、MirrorReflection.csをコピペしてきます。
- Materialを作成して1.で作成したshaderを割り振ります。
- Scene上にPlane等の平面のオブジェクトを配置します。
- PlaneのMaterialを2.で作成したMaterialに差し替えます。
- PlaneにMirrorReflection.csをアタッチします。
上記の手順を踏むと鏡ができます。尚、MirrorRefrectionは平面のオブジェクト(Plane,Quad等)を想定して作られているので、平面以外ではうまく動きません。
またマテリアルのMainTextureに任意のテクスチャをセットすると、そのTextureが反映された鏡ができます。
#MirrorRefrectionが何をしているか
MirrorRefrectionがやっていることをざっくり言うと、RenderTextureを生成する反射カメラを常にメインカメラから見て反射の位置関係にしておくことで、あたかも鏡を見ているかのようなTextureを見せているという仕組みです。
#ソースコード解説
全部説明すると長くて面倒なので概要のみにします。
##MirrorReflection.cs
上記ソースコードは鏡に映すRenderTextureを生成します。
RenderTextureは、MainCameraと反射面に対して反射の位置関係にあるRefrection Cameraから作られます。
##MirrorReflection.shader
上記シェーダーは、鏡に適応したTextureに対して反射の効果(MirrorReflection.csで生成したRenderTexture)を掛け合わせています。