Version: 2017.3
ポストプロセスエフェクトの作成
リフレクションプローブの種類

リフレクションプローブ

CG 映画やアニメーションは現実の反射にとても似ているものです。その性質はシーン内のオブジェクト同士が “つながっている” 感じを表現するのに重要です。しかし、現実的な反射を正確に表現しようとすると演算機に高い負荷がかかります。こうした負荷は映画の場合は問題にならないのですが、リアルタイムゲームで反射するオブジェクトを使用するのには著しい制限がかかります。

ゲームではオブジェクトからの反射をシミュレーションする リフレクションマッピング という技術が伝統的に使用されてきました。反射演算のオーバーヘッドを許容範囲に収めるためです。このテクニックはシーンにあるすべての反射するオブジェクトが周囲の環境を“知ることができる”(ゆえに反射できる)ものと仮定します。この技術は(例えば光沢のある車など)ゲームのメインキャラクターが広い場所にいる場合は良好な働きを見せますが、異なる環境に移る場合は説得力を失います。車がトンネル内を走っているのにウィンドウに空が映っているのが見えては不自然でしょう。

Unity は Reflection Probes (リフレクションプローブ)を使用することで、基本的なリフレクションマッピングの質を向上します。リフレクションプローブによって、シーン内の視覚的な環境を重量なポイントでサンプリングすることが可能になります。通常、反射するオブジェクトの見た目が顕著に変わる場所(例えば、トンネル、建物付近や、地面の色が変わる場所など)ごとにプローブを設置するといいでしょう。反射するオブジェクトがプローブの近くを通り過ぎるときプローブによってサンプリングされた反射をオブジェクトのリフレクションマップで使用することができます。さらに、いくつかのプローブが近くにある場合、Unity は反射が徐々に変化するように補間できます。このように、リフレクションプローブを使用することで演算のオーバーヘッドを許容範囲に抑えつつ説得力のある反射を演出することができます。

リフレクションプローブがどのように動作するか

シーン内のとあるポイントの視覚的な環境は キューブマップ によって表現することができます。これは概念的には、六面(上、下、左、右、前そして後ろ)から見た光景を平坦な画像として内面に描いた箱のようなものです。

スカイボックスキューブマップの内面(前面は削除されています)
スカイボックスキューブマップの内面(前面は削除されています)

反射を表示するオブジェクトのために、シェーダーはキューブマップを描写している画像にアクセスしなければなりません。オブジェクト表面それぞれのポイントはキューブマップの各領域の表面が向いている方向(すなわち、表面の法線ベクトルの方向)を “知る” ことができます。シェーダーはそのポイントにおいてオブジェクトの表面がそうあるべき色を計算してキューブマップの色を使用します。鏡のマテリアルは光沢のある車の場合効果が多少薄まったり元の色がついたりする一方で、正確に色を反射します。

上記のように、昔からあるリフレクションマッピングはシーン中の環境を表現するのに単一のキューブマップのみを使用します。キューブマップはアーティスト一人で描くことができ、その他にはシーンの一点から1枚1枚がキューブ表面に対応する6枚の “スナップショット” を撮影することでも作成できます。リフレクションプローブを使用することで、シーンでキューブマップのスナップショットを取ることができ、多くのポイントを事前定義してセットアップできるようになります。したがって、シーンで顕著に反射が異なる周囲の環境をどの地点からでも記録することができます。

ビューポイントに加えて、プローブはシーンに不可視のボックス形状によって定義されたエフェクトのゾーンも展開します。プローブのゾーン内を通り過ぎる反射オブジェクトはプローブによって一時的に提供されるリフレクションキューブマップを保有します。オブジェクトがあるゾーンから他のゾーンへ移動するのに合わせて、キューブマップも変更していきます。

ポストプロセスエフェクトの作成
リフレクションプローブの種類