今回のテーマは、「鏡面反射する床を作成する方法」です。
ゲームでよく出てくる鏡面反射する床ですが、「Reflection Probe」を利用することで簡単に作成することができます。
Refledtion Probeコンポーネントで鏡面反射を表現する

Reflection Probeコンポーネントは、全方向に向かって周囲の球状ビューをキャプチャするカメラのような機能です。この機能を使って、鏡面反射する床を作成していきます。
キャラと床を設置する
キャラと床を配置します。キャラは何でも良いですが、この記事ではStandardAssetsのAnimationControllerを適用した状態で紹介しています。StandardAssetsについて確認したい方は以下の記事の「キャラクターコントローラーを設定してみよう!」を参考して下さい。

床は新規オブジェクトからPlaneを作成して床とします。
鏡面用マテリアルの作成
Projectで右クリックから新規作成でマテリアルを作成します。名前をMirrorとします。
MirrorマテリアルのInspectorを開いて、Main MapsのAlbedoにColorからグレーを指定します。これは後で鏡面反射させる際に、自分好みの色に調整することもできます。

次にMetalicとSmoothnessをそれぞれ1に設定します。
このマテリアルをPlaneにドラッグアンドドロップして適用します。


Reflection Probeの設定
次にReflection Probeを作成します。新規オブジェクトからCreate Emptyを選択して空のオブジェクトを作成し、名前を「ReflectionProb」とします。Inspectorを開き、「Add Component」から「Reflection Prob」を追加します。
追加されたReflection Probの設定を行います。
- Typeを「Real time」に設定し、Refresh Modeを「Every frame」を選択、TimeSlicingを「All faces at once」を選択します。
- Box projedctionにチェックを入れます。※映り込みのUVマッピングでボックスプロジェクションが可能になります。
また、Box Sizeをカメラが収まるような広さに設定します。これが大きすぎると処理が重たくなるので適度な大きさにしましょう。 - Resolutionに「1024」を設定します。これは映り込みの解像度を設定しています。
- ClearFlagsをSalid Colorに設定します。
※キューブマップの背景の白色エリアをどう埋めるかを選択できます。

Reflection Probを移動させるスクリプトの作成
Reflection Probを鏡面として利用するにはカメラと逆位置のY軸に配置する必要があります。

自動で逆位置に移動するスクリプトを作成します。
Projectに右クリックから新規C#スクリプトを作成します。名前を「MirrorCamera.cs」としてスクリプトを開きます。
スクリプトは以下のようになります。
public class MirrorCamera : MonoBehaviour
{
ReflectionProbe probe;
void Start()
{
this.probe = GetComponent<ReflectionProbe>();
}
void Update()
{
//y軸は-1をかけて逆側に配置する
this.probe.transform.position = new Vector3(Camera.main.transform.position.x,
Camera.main.transform.position.y * -1,
Camera.main.transform.position.z);
probe.RenderProbe();
}
}
これを、先程作成した「ReflectionProb」に追加します。
これで完成です。実行して動きを確認してみましょう。

まとめ
今回は、「鏡面反射する床を作成する方法」を紹介しました。
- 鏡面用マテリアルの作成
- Reflection Probeの設定
- Reflection Probを移動させるスクリプトの作成
「Reflection Probe」を利用することで鏡の表現を作成することができます。今回の記事では床を鏡面反射させましたが、鏡やガラスなどで反射させる表現を利用するのも面白いです。
今回の記事が、皆さんの助けになると嬉しいです。
もしこの記事が気に入りましたら、ぜひテクリエイトへのブックマーク登録をして頂けると喜びます。
以上、おつかれさまでした!
モデル:©2016 cover corp. https://3d.nicovideo.jp/works/td74928