CG の映画やアニメーションは、一般的に非常にリアルな反射を特徴としており、これはシーン内のオブジェクト間の “つながり” を感じさせるために重要です。ただし、このような反射の精度を高めるには、プロセッサーの処理時間が長くなります。映画では問題ないのですが、リアルタイムのゲームでは、反射するオブジェクトの使用が厳しく制限されます。
ゲームではオブジェクトからの反射をシミュレーションする リフレクションマッピング という技術が伝統的に使用されてきました。反射演算のオーバーヘッドを許容範囲に収めるためです。このテクニックはシーンにあるすべての反射するオブジェクトが周囲の環境を“知ることができる”(ゆえに反射できる)ものと仮定します。この技術は(例えば光沢のある車など)ゲームのメインキャラクターが広い場所にいる場合は良好な働きを見せますが、異なる環境に移る場合は説得力を失います。車がトンネル内を走っているのにウィンドウに空が映っているのが見えては不自然でしょう。
Unity は Reflection Probes (リフレクションプローブ)を使用することで、基本的なリフレクションマッピングの質を向上します。リフレクションプローブによって、シーン内の視覚的な環境を重量なポイントでサンプリングすることが可能になります。通常、反射するオブジェクトの見た目が顕著に変わる場所(例えば、トンネル、建物付近や、地面の色が変わる場所など)ごとにプローブを設置するといいでしょう。反射するオブジェクトがプローブの近くを通り過ぎるときプローブによってサンプリングされた反射をオブジェクトのリフレクションマップで使用することができます。さらに、いくつかのプローブが近くにある場合、Unity は反射が徐々に変化するように補間できます。このように、リフレクションプローブを使用することで演算のオーバーヘッドを許容範囲に抑えつつ説得力のある反射を演出することができます。
シーン内のとあるポイントの視覚的な環境は キューブマップ によって表現することができます。これは概念的には、六面(上、下、左、右、前そして後ろ)から見た光景を平坦な画像として内面に描いた箱のようなものです。
反射を表示するオブジェクトのために、シェーダーはキューブマップを描写している画像にアクセスしなければなりません。オブジェクト表面それぞれのポイントはキューブマップの各領域の表面が向いている方向(すなわち、表面の法線ベクトルの方向)を “知る” ことができます。シェーダーはそのポイントにおいてオブジェクトの表面がそうあるべき色を計算してキューブマップの色を使用します。鏡のマテリアルは光沢のある車の場合効果が多少薄まったり元の色がついたりする一方で、正確に色を反射します。
上記のように、昔からあるリフレクションマッピングはシーン中の環境を表現するのに単一のキューブマップのみを使用します。キューブマップはアーティスト一人で描くことができ、その他にはシーンの一点から1枚1枚がキューブ表面に対応する6枚の “スナップショット” を撮影することでも作成できます。リフレクションプローブを使用することで、シーンでキューブマップのスナップショットを取ることができ、多くのポイントを事前定義してセットアップできるようになります。したがって、シーンで顕著に反射が異なる周囲の環境をどの地点からでも記録することができます。
ビューポイントに加えて、プローブはシーンに不可視のボックス形状によって定義されたエフェクトのゾーンも展開します。プローブのゾーン内を通り過ぎる反射オブジェクトはプローブによって一時的に提供されるリフレクションキューブマップを保有します。オブジェクトがあるゾーンから他のゾーンへ移動するのに合わせて、キューブマップも変更していきます。