31
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UnityのMirrorRefrectionによる鏡の表現

Posted at

MirrorRefrection

MirrorRefrectionは平面の鏡を表現するのに最適なアセットです。
以下のような特徴があります。

  • 動的な反射ができる
  • リフレクションプローブよりパフォーマンスコストが低い。
  • 平面の反射しか想定していない(球面とか無理)
  • 鏡にTextureを適用できる

MirrorRefrectionイメージ画像
わかりやすいように鏡(MirrorRefrectionを適用したPlane)に色をつけてます。Cubeが鏡に映っている様子がわかると思います。
anim.gif

余談ですが、ユニティちゃん Candy Rock Starのステージの床の反射にもこのアセットの技術が応用されているらしいです。
https://www.youtube.com/watch?v=M_GUlXJ52YA

MirrorRefrectionの使い方

  1. 上記リンク先からMirror.shaderと、MirrorReflection.csをコピペしてきます。
  2. Materialを作成して1.で作成したshaderを割り振ります。
  3. Scene上にPlane等の平面のオブジェクトを配置します。
  4. PlaneのMaterialを2.で作成したMaterialに差し替えます。
  5. PlaneにMirrorReflection.csをアタッチします。

上記の手順を踏むと鏡ができます。尚、MirrorRefrectionは平面のオブジェクト(Plane,Quad等)を想定して作られているので、平面以外ではうまく動きません。
またマテリアルのMainTextureに任意のテクスチャをセットすると、そのTextureが反映された鏡ができます。

MirrorRefrectionが何をしているか

MirrorRefrectionがやっていることをざっくり言うと、RenderTextureを生成する反射カメラを常にメインカメラから見て反射の位置関係にしておくことで、あたかも鏡を見ているかのようなTextureを見せているという仕組みです。

refrection.002.png

ソースコード解説

全部説明すると長くて面倒なので概要のみにします。

MirrorReflection.cs

上記ソースコードは鏡に映すRenderTextureを生成します。
RenderTextureは、MainCameraと反射面に対して反射の位置関係にあるRefrection Cameraから作られます。

MirrorReflection.shader

上記シェーダーは、鏡に適応したTextureに対して反射の効果(MirrorReflection.csで生成したRenderTexture)を掛け合わせています。

31
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?