これは、開発者とテクニカルアーティストが Unity で High Definition Render Pipeline (HDRP) を設定して使用し、ハイエンドのグラフィックリアリズムを実現する方法を説明する一連の記事の 4 番目です。HDRP は Unity のリアルタイム レンダリングにおける技術的な飛躍を表しており、現実世界での振る舞いと同じように光を操作できます。
高級照明に関するハウツーシリーズの他の記事もぜひお読みください。
反射は、ゲームオブジェクトを周囲の環境に統合するのに役立ちます。通常、反射は滑らかで光沢のある表面に関連付けられますが、物理ベースレンダリング (PBR) ワークフローでは、粗い素材でも正しい反射が必要です。HDRP は反射を生成するための複数の手法を提供します。
- スクリーンスペースリフレクション
- リフレクションプローブ
- スカイリフレクション
各リフレクション タイプはリソースを大量に消費する可能性があるため、ユース ケースに応じて最適な方法を慎重に選択してください。ピクセルに複数の反射手法が適用される場合、HDRP は各反射タイプの寄与をブレンドします。「Influence Volume」という名前のバウンディングサーフェスを使用して 3D スペースを分割し、リフレクションが適用されるオブジェクトを指定してください。
スクリーンスペースリフレクションでは、深度とカラーバッファを使用してリフレクションを計算します。そのため、現在カメラビューにあるオブジェクトのみを反映でき、画面上の特定の位置では適切にレンダリングされない可能性があります。光沢のある床や濡れた平面は、スクリーン スペース反射を受け取るのに適していますが、SSR はフレームの外側にあるすべてのオブジェクトを無視するため、効果が制限される可能性があることに注意してください。
スクリーン スペース リフレクションを有効にするには、 ライティングの下にある フレーム設定 (HDRP のデフォルト設定 または カメラのカスタム フレーム設定) に移動します。続いて、「Screen Space Reflection」のオーバーライドをボリュームオブジェクトに追加します。
「Screen Space Reflection」を表示するには、マテリアルのサーフェスを「Minimum Smoothness」の値以上にする必要があります。より粗いマテリアルで SSR を表示したい場合はこの値を下げますが、最小滑らかさのしきい値を低くすると計算コストが増加する可能性があることに注意してください。スクリーンスペースリフレクションの効果をピクセルに適用できなかった場合は、HDRP はリフレクションプローブを使用する方法にフォールバックします。
[品質] ドロップダウンを使用して、[最大レイ ステップ]のプリセット数を選択します。Max Ray Steps が高くなると品質は向上しますが、コストもかかります。すべてのエフェクトと同様に、パフォーマンスと視覚的な品質のバランスをとるように努めてください。
HDRP バージョン 12 以降では、Accumulation (新機能) を使用する物理ベースのアルゴリズム、または精度の低い近似アルゴリズムである approximation (デフォルト) を選択できます。
リフレクションプローブを使用すると、画像ベースの手法でリフレクションが生成されます。プローブは、周囲の全方向の球面ビューをキャプチャし、その結果をキューブマップ テクスチャに保存します。シェーダーはこのキューブマップを使用して反射を近似します。
各シーンには複数のプローブがあり、結果をブレンドできます。カメラが環境内を移動すると、局所的な反射が変化することがあります。
各 リフレクションプローブ の タイプ を ベイク または リアルタイムに設定します。
- 「Baked」のプローブは、静的環境でキューブマップのテクスチャを 1 回だけ処理します。
- 「Real-time」プローブは、ランタイム時にエディターではなくプレイヤー内にキューブマップを作成します。つまり、リアルタイム更新はリソースを大量に消費する可能性がありますが、反射は静的オブジェクトに限定されません。
「Influence Volume」によって、ゲームオブジェクトにリフレクションが適用される 3D の境界を指定します。一方「Capture Settings」では、リフレクションプローブによってキューブマップのスナップショットを取得する方法をカスタマイズできます。
リアルタイムのリフレクションプローブを最適化するには、全般またはリフレクションプローブごとのカメラ設定を上書きして、リフレクションのビジュアルの品質に大きく影響しないレンダリング機能を無効にしましょう。更新をタイムスライスするスクリプトを作成しても良いでしょう。
平面反射プローブを 使用すると、表面の滑らかさを考慮して、平らな反射面を再現できます。光沢のある鏡や床に最適です。
平面反射プローブは標準の反射プローブと多くの共通点がありますが、これらのコンポーネントの動作は若干異なります。平面反射プローブは、 環境をキューブマップとしてキャプチャするのではなく、ミラー平面を通して反射された カメラビュー を再作成します。次に、プローブは結果のミラー イメージを 2D RenderTextureに保存します。長方形のプローブの境界に描画され、平面反射が作成されます。
オブジェクトが近くの Reflection Probe の影響を受けない場合は、Sky Reflectionに戻ります。
最高品質の反射を生成するために、HDRP は各ピクセルに最も高い精度を提供する手法を使用し、重み付けされた優先順位を使用して 3 つの反射方法 (SSR、反射プローブ、スカイ) に基づく他の手法と組み合わせます。リフレクションを評価する際のこのシーケンスは、リフレクション階層と呼ばれます。
1 つの手法でピクセルの反射を完全に決定できない場合、HDRP は次の手法にフォールバックします。つまり、スクリーンスペースリフレクションはリフレクションプローブにフォールバックし、その後スカイリフレクションにフォールバックします。
リフレクション プローブの Influence Volumes を適切に設定することが重要です。そうしないと、不要な空の反射から光が漏れる可能性があります。これは、SampleScene の Room 3 で顕著です。いずれかのリフレクションプローブを無効にするか、「Influence Volume」を変更すると、リフレクションが強制的に空にフォールバックされます。これにより、明るい HDRI スカイが強烈な反射でシーンを圧倒することになります。
リフレクション階層の詳細については、HDRP ドキュメントのリフレクション セクションを参照してください。
リフレクション プローブのキャプチャ ポイントは固定されており、近くのカメラの位置と一致することはほとんどないため、結果として得られる反射に顕著な視点の変化が生じる可能性があります。そのため、反射が環境と関連していないように見える場合があります。
リフレクション プロキシ ボリュームは、これを部分的に修正するのに役立ちます。カメラの位置に基づいて、プロキシ ボリューム内で反射をより正確に再投影します。
HDRP には、 ボリューム システムを介して利用できるリアルタイムのライティング効果もいくつか備わっています。ローカルまたはグローバルボリュームを選択してから、「Add Override > Lighting」で適切なエフェクトを追加します。
スクリーンスペースアンビエントオクルージョン(SSAO)
アンビエント オクルージョンは、折り目、穴、および互いに近接した表面で発生する暗さをシミュレートします。周囲の光を遮る領域は、閉塞したように見える傾向があります。
Unity のライトマッパーを使用して静的ジオメトリのアンビエントオクルージョンをベイクできますが、HDRP によって、リアルタイム処理を行う「Screen Space Ambient Occlusion」 を追加で利用できます。これはスクリーン空間効果であり、フレーム内の情報のみが生成される効果に寄与できることを意味します。SSAO はカメラの視野外にあるすべてのオブジェクトを無視します。
「Lighting」の「Frame Settings」で、「Screen Space Ambient Occlusion」を有効にします。続いて、ローカルまたはグローバルボリュームで「Add Override」をクリックし、「Lighting > Ambient Occlusion」を選択します。
スクリーンスペースグローバルイルミネーション(SSGI)では、画面の深度とカラーバッファを使用して、反射するディフューズライトを計算します。ライトマッピングで間接光を静的レベルのジオメトリのサーフェスにベイクする方法と似ていますが、SSGI では光子がサーフェスに衝突して反射する際に色やシェーディングが変化する仕組みのシミュレーションを正確に行うことができます。
カメラの有効視野外のオブジェクトはグローバルイルミネーションには影響しないため、フレームバッファに依存する他のエフェクトと同様、画面端が問題になります。これは、フレーム バッファーの外側でレイが移動するときにフォールバックを提供する反射プローブを使用することで、部分的に改善できます。
フレーム設定 の 照明で SSGI を有効にします。パイプライン アセットの ライティング セクションでも有効にする必要があります。
注:スクリーンスペースグローバルイルミネーションを備えた Unity 2021.2 以降を使用することをお勧めします。HDRP 12 には、SSGI 品質の大幅な改善が含まれています。
スクリーン スペース屈折 オーバーライドは、 空気よりも密度の高い媒体を通過するときに光がどのように動作するかをシミュレートするのに役立ちます。HDRP のスクリーン スペース屈折は、深度バッファーと色バッファーを使用して、ガラスなどの透明なマテリアルを介した屈折を計算します。
HDRP Lit Shaderを通じてこのエフェクトを有効にするには、マテリアルの Surface Type が Transparentであることを確認してください。
続いて、「Transparency Inputs」で「Refraction Model」と「Index of Refraction」を選択します。固体オブジェクトには 球屈折モデル を使用し、中空のオブジェクトには 薄い (泡のような)または ボックス (わずかに厚みがある)を選択します。