UnityでReflection Probeを使って反射する床を作る方法を紹介します。水面とか鏡とか色々と応用できそうなので、ぜひ使ってみて下さい!今回の例では次のような見た目の反射する床を作りますー。
今回の内容は次のようになります。
床とモデルを配置する
まずは床とその上にのせる3Dモデルを配置しましょう。今回、床にはPlaneを使っています。ヒエラルキービューから「Create」→「3D Object」→「Plane」を選択します。また、床の上にはユニティちゃんやCube、Sphereを配置しました。
ユニティちゃんを動かす方法はココで紹介しています。
次に、床用のマテリアルを作成します。プロジェクトビューで右クリックから「Create」→「Material」を選択しmirrorという名前で保存します。インスペクタからMain Mapsの設定を行います。「Albedo」の色を「グレー」に、「Metalic」と「Smoothness」を「1」に設定します。
床のオブジェクトにドラッグ&ドロップしてマテリアルをアタッチします。この状態で空は鏡面反射しますが、床の上に乗っているオブジェクトは反射しません。
床の上のオブジェクトも反射させるためにはReflection Probeコンポーネントを使う必要があります。
Reflection Probeとは
Reflection Probeは、プローブを中心として6方向に仮想カメラが配置されているようなものです。この6つのカメラで撮影された映像から反射用のキューブマップを作ります。(6つのカメラと聞いて想像がつくと思いますが、結構重たい処理です)
カメラから見た時に、正しい反射映像を得るためにはReflection Probeをカメラの反対側に配置する必要があります。ここではスクリプトを使ってReflection Probeを自動的にカメラの反対側に配置するようにします。
Reflection Probeを鏡面反射で使う方法
空のオブジェクトを追加して、それにReflection Probeコンポーネントをアタッチします。Reflection Probeをアタッチしたオブジェクトを選択し、インスペクタからTypeを「Realtime」に変更します。これにより、リアルタイムにキューブマップの映像が更新されます。また「Resolution」を変更することで反射する映像の解像度を変更できます。
上で書いたように、Reflectionを鏡面反射で使うためにはカメラと相対する位置にプローブを配置する必要があります。自動的にカメラの反対側に配置するスクリプトを作ります。プロジェクトビューで「ProbeController」を作って次のスクリプトを入力して、Reflection Probeコンポーネントをアタッチしたオブジェクトにアタッチして下さい。
using UnityEngine; using System.Collections; public class ProbeController : MonoBehaviour { ReflectionProbe probe; void Start() { this.probe = GetComponent<ReflectionProbe>(); } void Update () { this.probe.transform.position = new Vector3( Camera.main.transform.position.x, Camera.main.transform.position.y * -1, Camera.main.transform.position.z ); probe.RenderProbe(); } }
実行結果
これで床が鏡面反射して、床上のオブジェクトを反射するようになりました。実行して確かめてみて下さい。実行結果は次のようになります。
ダークミラーの上をユニティちゃんが走る。えっちらおっちら。 pic.twitter.com/bBrVxEQiWb
— 北村愛実 (@tasonco_company) 2016年10月16日
今回は、こちらの記事を参考にさせていただきました!
Unity5の教科書、絶賛発売中です!
よろしくです☆