Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
21
Help us understand the problem. What is going on with this article?

More than 3 years have passed since last update.

@UnagiHuman

UnityのMirrorRefrectionによる鏡の表現

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)を掛け合わせています。

21
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
21
Help us understand the problem. What is going on with this article?