HD レンダーパイプラインのリフレクション
HD レンダーパイプライン (High Definition Render Pipeline、HDRP) は、以下の技法を使ってリフレクションを計算します。
- Screen Space Reflection (スクリーンスペースリフレクション)
- リアルタイムおよびベイクした Reflection Probe (リフレクションプローブ) サンプリング
- Sky Reflection (スカイリフレクション)
Unity プロジェクトでどの技法を使うかを判断できるよう、以下の表でそれぞれの技法のリソース負荷を説明します。
技法 | 説明 | ランタイムのリソース負荷 |
---|---|---|
Screen Space Reflection | スクリーンスペースソリューションです。リアルタイムですべてのゲームオブジェクトをキャプチャします。 | 高いです。 |
Realtime Reflection Probe | 手動で配置する、ローカル Reflection Probe です。リアルタイムですべてのゲームオブジェクトをキャプチャします。 | 中 - 高です (キャプチャの解像度によって異なります)。 |
Baked Reflection Probe | 手動で配置する、ローカル Reflection Probe です。ベイキングプロセス中に、静的ゲームオブジェクトのみをキャプチャします。 | 低いです。 |
Sky Reflection | Reflective Materials が空の反射を表示します。 | 低いです。 |
リフレクションヒエラルキー
最高品質のリフレクションを制作するために、HDRP は各ピクセルを最も正確に表現するリフレクション技法を使うと同時に、その他すべての技法とブレンドします。これを実現するため、HDRP は全体の Weight (ウェイト) が 1 に到達するまで、すべてのライティング技法を評価します。
- スクリーンスペースリフレクションは、それ自体のウェイトを制御します。
- Reflection Probes には手動で編集できる Weight プロパティーがあり、重なっている Reflection Probes が適切に混ざるように、ウェイトを設定できます。
- スカイリフレクションには、固定ウェイト 1 が割り当てられています。
任意のピクセルに最も適したリフレクション技法を選択するため、HDRP は Reflection Hierarchy (リフレクションヒエラルキー) と呼ばれる特定の順序で利用可能な技法を確認します。
- スクリーンスペースリフレクション
- リアルタイムおよびベイクされた リフレクションプローブ サンプリング
- スカイリフレクション
スクリーンスペースリフレクションのウェイトが 1 の場合、HDRP はその情報を使い、その他の技法は評価しません。スクリーンスペースリフレクションのウェイトが 1 でなければ、HDRP はヒエラルキーの次の技法にフォールバックします。HDRP はウェイトが 1 に到達するか、スカイリフレクションを使うヒエラルキーの最下位に到達するまでこのパターンを繰り返します。つまり、スクリーンスペースリフレクションはもし該当する場合は Reflection Probe にフォールバックするか、そうでなければスカイリフレクションにフォールバックします。Reflection Probe は優先順位の低い他の Reflection Probes にフォールバックできます。現在 HDRP は Influence Volume のサイズに基づいて Reflection Probe の優先順位を計算します。Influence Volume が小さいほど、優先順位は高くなります。
スクリーンスペースリフレクション
リフレクションヒエラルキーの最初のレベルは、シーン内でレンダリングされたすべてをキャプチャする、リソース負荷の高いスクリーンスペースソリューションです。HDRP は Volume フレームワークを使ってスクリーンスペースリフレクションに対処します。スクリーンスペースリフレクション Volume オーバーライド には、スクリーンスペースリフレクションエフェクトを制御するプロパティーが含まれています。スクリーンスペースリフレクションを計算するために、アルゴリズムが深度バッファとの交差点を見つけるまで、スクリーンスペース内の光線をトレースします。その後、以前のフレームからピクセルの色を調べて、反射光の演算に利用します。
このスクリーンスペース技法は、画面で実際に見えるゲームオブジェクトのみを反射するため、反射エフェクトに限度があります。さらにこの技法は深度バッファの単一レイヤーのみを使うため、ゲームオブジェクトの背後にある光線をトレースするのが困難です。この技法が交差点を見つけなければ、HDRP は リフレクションヒエラルキー の次の技法にフォールバックします。
ノート: スクリーンスペースリフレクションは、不透明マテリアルのみに機能します。またスクリーンスペースエフェクトであるため、画面に表示されるゲームオブジェクトのみを反射します。
Unity プロジェクトでのスクリーンスペースリフレクションを使い方については、スクリーンスペースリフレクション ドキュメントを参照してください。
リフレクションプローブ
リフレクションヒエラルキーの第二レベルでは、リフレクションプローブ を使います。例えば反射するエリアがオフスクリーンにあるなど、スクリーンスペースリフレクションがピクセルに対して有益な反射データを生成しないと、HDRP は Reflection Probe を使います。Reflection Probe はそれぞれの視点からシーンをキャプチャして、結果をテクスチャとして保存します。Probe の範囲内にある Reflective Materials はその Probe のテクスチャを問い合わせて、正確なリフレクションの作成に使います。baked Reflection Probes を使うメタリックなマテリアルは、スペキュラーライティングを表示しませんので、注意してください。HDRP は環境色を代わりに使って、スペキュラーカラーを概算します。
スクリーンスペースリフレクションとは異なり、Reflection Probe は手動で設定しなければなりません。
Reflection Probes に関する詳細は、以下を参照してください。
スカイリフレクション
スクリーンスペースリフレクションと Reflection Probes がピクセルに有益な反射情報を提供しない場合、HDRP はリフレクションヒエラルキーの最終レベルとして、スカイリフレクションにフォールバックします。ピクセルがこの技法を使ってリフレクションを計算する場合、空に問い合わせてそのポイントにおける空のリフレクションを作成します。
リフレクションプロキシボリュームと再投影
HDRP のリフレクションマテリアルは リフレクションプロキシボリューム を再投影ボリュームとして使い、リフレクションプローブ からのリフレクションを適用します。HDRP は再投影を使って、キャプチャポイントがキャプチャされた情報を使うサーフェスポイントと同じ位置にないことから生じる、視差の問題を修正します。
反射マテリアルが Reflection Probe がキャプチャした環境情報を使うときに、プロキシボリュームを使わないと、Reflection Probe のキャプチャポイントと同じ位置にあるピクセルに対してのみ、完璧なリフレクションを提供します。つまり、Reflection Probe は画面上の反射マテリアルのほとんどに完璧なリフレクションを提供せずに、代わりに若干異なる位置で反射環境をレンダリングします。Reflection Probe のキャプチャポイントと同じ位置にないピクセルに正確なリフレクションを得るためには、プロキシボリュームを使います。HDRP は再投影を使って、このディスプレイスメント問題を修正します。HDRP はキャプチャ情報を Reflection Probe のプロキシボリュームに投影し、それを反射マテリアルの面に再投影します。完璧な投影は得られませんが、無限投影よりも実際のリフレクションにずっと近い結果が得られます。ただし、プロキシボリュームは、ボリュームの形状によって、アーティファクトを生む場合があります。
- Box ボリュームは、解像度の欠損、およびボックスのエッジで間違った角度を生じる可能性があります。
- Sphere ボリュームは均等な品質を達成しますが、プロキシの形状が模倣しない長さのある面で、間違ったリフレクションを生じる場合があります。例えば、長い平面で、リフレクションが Reflection Probe のキャプチャポイントから遠ざかるにつれて、正確性が薄れていきます。