__リフレクションプローブ__とは、その周囲全方向の球面ビューをキャプチャするカメラのようなものです。キャプチャされた画像は、反射マテリアルを持つオブジェクトが使用できるキューブマップとして保存されます。リフレクションプローブの中には、指定したシーンで使用し、オブジェクトは最も近いプローブによって生成されたキューブマップを使用するように設定されているものもあります。その結果、オブジェクトの反射をその環境と調和した、説得力のある形で変化させることができます。
CG 映画やアニメーションは、一般に非常にリアルな反射が特徴です。これは、シーン内のオブジェクト間に “つながり” を感じさせるために重要です。ただし、これらのリフレクションの精度を実現するためにプロセッサーの処理時間が増大する一方で、映画では問題になりませんが、リアルタイムのゲームでは反射オブジェクトの使用が大幅に制限されます。
従来、ゲームでは_リフレクションマッピング_と呼ばれる手法を使用して、処理のオーバーヘッドを許容レベルに抑えながらオブジェクトからのリフレクションのシミュレーションを行ってきました。この手法では、シーン内のすべての反射オブジェクトがまったく同じ環境を “見る” (したがって反射する) ことができると仮定します。これは、ゲームのメインキャラクター (光沢のある車など) がオープンスペースに存在する場合には非常にうまく機能しますが、キャラクターが他の環境を横切る場合には説得力を失います。車がトンネル内を走っているのに、車の窓に空が映っていると奇妙に見えます。
Unity は、__リフレクションプローブ__を使用して基本的なリフレクションマッピングを改善し、シーン内の重要なポイントでビジュアル環境をサンプリングできるようにします。通常は、反射オブジェクトの外観が顕著に変化するすべてのポイント (トンネル、建物に近いエリア、地面の色が変化する場所など) に配置します。反射するオブジェクトがプローブの近くを通過するときにプローブによってサンプリングされたリフレクションをオブジェクトのリフレクションマップに使用できます。さらに、複数のプローブが近くにある場合、Unity はそれらの間を補間して、リフレクションを徐々に変化させることができます。したがって、リフレクションプローブを使用すると、処理オーバーヘッドを許容できる説得力のあるリフレクションを作成できます。
シーン内のポイントの視覚的な環境はキューブマップによって表現することができます。これは概念的には、六面 (上、下、左、右、前そして後ろ) から見た光景を平坦な画像として内面に描いた箱のようなものです。
オブジェクトがリフレクションを表示するには、オブジェクトのシェーダーがキューブマップを表す画像にアクセスできる必要があります。オブジェクトの表面の各点は、表面が向いている向き (すなわち、表面の法線ベクトルの向き) にキューブマップの小さな領域を “見る” ことができます。シェーダーはこのポイントでキューブマップの色を使用して、オブジェクトの表面に設定する必要がある色を計算します。光沢のある車がフェードして色付する間、ミラーマテリアルは正確に色を反射する可能性があります。
上記のように、従来から実施されているリフレクションマッピングはシーン全体の環境を表現するのに単一のキューブマップのみを使用します。キューブマップはアーティスト一人で描くことができ、シーンの 1 つの点から 1 枚 1 枚がキューブ表面に対応する 6 枚の “スナップショット” を撮影することでも作成できます。リフレクションプローブを使用することで、シーンでキューブマップのスナップショットを撮影することができ、多くのポイントを事前定義して設定できるようになります。したがって、シーンで顕著に反射が異なる周囲の環境をどの地点からでも記録することができます。
ビューポイントに加えて、プローブはシーンに不可視のボックス形状によって定義されたエフェクトのゾーンも展開します。プローブのゾーン内を通り過ぎる反射オブジェクトはプローブによって一時的に提供されるリフレクションキューブマップを保有します。オブジェクトがあるゾーンから他のゾーンへ移動するのに合わせて、キューブマップも変更していきます。
新しいシーンを追加すると、Unity のビルトインデフォルトスカイボックスキューブマップを保存する非表示のデフォルトのリフレクションプローブが自動的に作成されます。
非表示のリフレクションプローブのデータは固定されます。例えば、Lighting ウィンドウでスカイボックスマテリアルを変更しても、プローブ内のデータは変更されないため、オブジェクトの環境ライティングは同じままになります。
非表示のリフレクションプローブの使用を停止するには、Lighting ウィンドウで Generate Lighting または Clear Baked Data を選択します。その後、Unity は新しいデフォルトのベイクしたリフレクションプローブ (アンビエントリフレクションプローブ) を作成して使用します。このリフレクションプローブは Project ウィンドウのアセットであり、Generate Lighting を選択すると更新されます。