ユニバーサルレンダーパイプライン (URP) での影の描画のトラブルシューティングに関する技術。
シャドウバイアス値を調整することで、シャドウアクネ、影の剥離 (ピーターパンニングとも呼ばれます)、ライト漏れ、セルフシャドウイングなどのシャドウアーティファクトを軽減または除去できます。
URP では、URP アセット と個々のライトにシャドウバイアスを設定できます。
URP アセット では、シャドウバイアスの設定は Shadows セクションにあります。ここで設定する値は、シーン内のすべてのライトのデフォルト値になります。
特定のライトのシャドウバイアス値を設定するには、以下の手順に従います。
Light コンポーネントの Shadows セクションで、Shadows Type が Soft Shadows または Hard Shadows に設定されていることを確認します。
Bias プロパティを Custom に設定します。Depth および Normal のプロパティが表示されます。これらのプロパティを使用して、現在のライトのシャドウバイアスの値を設定します。
シャドウバイアスの値を大きくすると、ライトがメッシュを通じて漏れる場合があります。そうなると、シャドウとキャスターの間に視覚的なギャップが生じ、シャドウの形状がキャスターを正確に表さなくなります。
URP には、カメラの錐台内にある可視のライト数に カメラごとの制限 があります。例えば、モバイルプラットフォームでは、メイン ライト 1 個、追加ライト 32 個に制限されています。
フォワードレンダリングパスでは、オブジェクトごとのライト数の制限 もあります。
可視のライト数が制限を超えると、Unity は一部のライトを無効にします。リアルタイムの影を作るライトが無効になり、その結果、影のちらつきが生じることがあります。
この問題を防ぐために、カメラの錐台内にある可視のライト数が制限を超えないようにしてください。可視のライト数は、RenderingData.cullResults API の cullResults.visibleLights 配列を使用して取得できます。
以下の例は cullresults.visibleLights 配列の使用方法を示しています。
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
int visibleLightCount = renderingData.cullResults.visibleLights.Length;
}