Ambient Occlusion
Ambient Occlusion (アンビエントオクルージョン) エフェクトは、相互に近接した溝、穴、交差点、およびサーフェスを暗くします。現実世界では、このような領域はアンビエントライトを遮断または遮蔽する傾向があり、そのために暗く見えます。
URP には、リアルタイムのスクリーンスペースアンビエントオクルージョン (SSAO) エフェクトが Renderer Feature として実装されています。
ノート: SSAO エフェクトは Renderer Feature であり、URP のポストプロセスエフェクトとは独立して機能します。ボリュームに依存したり、ボリュームと相互作用したりすることはありません。
以下の画像は、Ambient Occlusion エフェクトをオフにしたシーン、オンにしたシーン、およびアンビエントオクルージョンテクスチャのみのシーンを示しています。
Ambient Occlusion エフェクトをオフにしたシーン
Ambient Occlusion エフェクトをオンにしたシーン
アンビエントオクルージョンテクスチャのみのシーン
レンダラーへの SSAO Renderer Feature の追加
URP には、Ambient Occlusion エフェクトが Renderer Feature として実装されています。
プロジェクトで Ambient Occlusion エフェクトを使用するには:
Project ウィンドウで URP アセットが使用するレンダラーを選択します。
Inspector ウィンドウにレンダラーのプロパティが表示されます。
Inspector ウィンドウで、Add Renderer Feature を選択します。リストで、Screen Space Ambient Occlusion を選択します。
レンダラーに SSAO Renderer Feature が追加されます。
これにより、SSAO Renderer Feature を備えたレンダラーを使用するカメラに Ambient Occlusion エフェクトが適用されます。
プロパティ
このセクションでは、SSAO Renderer Feature のプロパティについて説明します。
SSAO Renderer Feature のプロパティ
Name
Renderer Feature の名前です。
Downsample
このチェックボックスをオンにすると、Ambient Occlusion エフェクトを計算するパスの解像度が 2 分の 1 に減少します。
パフォーマンスへの影響: 非常に高い。
アンビエントオクルージョンパスの解像度を 2 分の 1 に減らすと、処理するピクセルカウントが 4 分の 1 に減少します。これにより、GPU の負荷が大幅に軽減されますが、エフェクトの詳細度は低くなります。
Source
法線ベクトル値のソースを選択します。SSAO Renderer Feature は、サーフェス上の各点がアンビエントライトにどの程度露出しているかを計算するために法線ベクトルを使用します。
利用可能なオプション:
- Depth Normals: SSAO は
DepthNormals
パスで生成された法線テクスチャを使用します。このオプションにより、Unity はより正確な法線テクスチャを使用できます。 - Depth: SSAO は 法線テクスチャの生成に
DepthNormals
パスを使用しません。代わりに SSAO は、深度テクスチャを使用して法線ベクトルを再構築します。このオプションは、カスタムシェーダーでDepthNormals
パスブロックの使用を避けたい場合にのみ使用してください。このオプションを選択すると、Normal Quality プロパティが有効になります。
パフォーマンスへの影響: アプリケーションによる。
Depth Normals オプションと Depth オプションを切り替えると、パフォーマンスが変動する可能性があります。これは、ターゲットプラットフォームおよびアプリケーションによって異なります。多くのアプリケーションでは、パフォーマンスの違いはわずかです。ほとんどの場合、Depth Normals の方が優れた外観を生成します。
Source プロパティの詳細については、実装の詳細 セクションを参照してください。
Normal Quality
このプロパティは、Source プロパティで Depth オプションを選択するとアクティブになります。
法線ベクトルの品質を上げるほど、SSAO エフェクトは滑らかになります。
利用可能なオプション:
- Low
- Medium
- High
パフォーマンスへの影響: 中。
シナリオによっては、Depth オプションでも Depth Normals オプションと同等の結果が生成されることがあります。ただし特定のケースでは、Depth Normals オプションによって品質が大幅に向上します。以下の画像は、そのような場合の例を示しています。
Source: Depth、Normal Quality: Low
Source: Depth、Normal Quality: Medium
Source: Depth、Normal Quality: High
Source: Depth Normals
詳細については、実装の詳細 セクションを参照してください。
Intensity
このプロパティは、暗くする効果の強度を定義します。
パフォーマンスへの影響: わずか。
Direct Lighting Strength
このプロパティは直接光に露出された領域でエフェクトがどの程度見えるかを定義します。
パフォーマンスへの影響: わずか。
以下の画像は、さまざまな領域がシャドウ内にあるかどうかに応じて、Direct Lighting Strength の値が領域にどのように影響するかを示しています。
Direct Lighting Strength: 0.2.
Direct Lighting Strength: 0.9.
Radius
SSAO エフェクトは、アンビエントオクルージョン値を計算する際、現在のピクセルからこの半径内にある法線テクスチャのサンプルを取得します。
パフォーマンスへの影響: 高い。
Radius 設定を下げるとパフォーマンスが向上します。これは、SSAO Renderer Feature がソースピクセルに近いピクセルをサンプリングするようになり、キャッシュの効率が向上するためです。
カメラから遠いオブジェクトより、カメラに近いオブジェクトの方がアンビエントオクルージョンパスの計算に時間がかかります。これは、Radius プロパティがオブジェクトに応じてスケールされるためです。
Sample Count
SSAO Renderer Feature は、ピクセルごとに、指定された半径内でこの数のサンプルを取得し、アンビエントオクルージョン値を計算します。この値を大きくすると効果がより滑らかで詳細になりますが、パフォーマンスが低下します。
パフォーマンスへの影響: 高い。
Sample Count 値を 4 から 8 に増やすと、GPU の計算負荷は 2 倍になります。
実装の詳細
SSAO Renderer Feature は、サーフェス上の各点がアンビエントライトにどの程度露出しているかを計算するために法線ベクトルを使用します。
URP 10.0 には、現在のフレームの法線テクスチャ _CameraNormalsTexture
を生成する DepthNormals
パスブロックが実装されています。デフォルトでは、SSAO Renderer Feature はこのテクスチャを使用して、アンビエントオクルージョン値を計算します。
カスタム SRP を実装し、シェーダーに DepthNormals
パスブロックを実装したくない場合には、SSAO Renderer Feature を使用してその Source プロパティを Depth に設定します。こうすると、Unity は DepthNormals
パスを使用して法線ベクトルを生成するのではなく、代わりに深度テクスチャを使用して法線ベクトルを再構築するようになります。
Source プロパティで Depth オプションを選択すると、Normal Quality プロパティが有効になります。このプロパティのオプション (Low、Medium、High) は、Unity が深度テクスチャから法線ベクトルを再構築するときに取得する深度テクスチャのサンプル数を決定します。各品質レベルのサンプル数は、Low が 1、Medium が 5、High が 9 です。