シャドウマップの粒度


7

すべてのライトに同じシャドウマップを再利用できると思いました。しかし、ライト間のシャドウマップを再利用することはできず、個別のサーフェスを使用する必要があることを示唆する業界の記事を見てきました。

ライトごとに1つのシャドウマップが必要ですか?または、プロセス全体の1つですか?


たぶん。達成したい効果によって異なります。
Gustavo Maciel

回答:


5

「同じシャドウマップを再利用する」とは、メモリ(レンダーターゲット)を再利用することを意味します。ライトごとに世界観が異なるため、データを再利用することはできません。:)

とにかく、必要に応じてレンダーターゲットを再利用できます。注意点がいくつかあります。まず、明らかに、一度に1つのシャドウマップしか必要としないようにレンダラーを設計する必要があります。これは、不便であるか、パイプラインの変更が必要になる可能性があります。たとえば、太陽光にカスケードシャドウマッピングを使用する場合は、影の結果を保持するためのスクリーンスペースバッファーが必要になる場合があります。これにより、スライスごとにシーンを再描画する必要なく、複数のスライスを蓄積できます。

他の注意点は、多くの新しいGPUが複数の描画呼び出しを並行して(異なるレンダーターゲットに対しても)処理できるため、パフォーマンスが低下する可能性があることですが、1つの描画呼び出しが前の描画呼び出しの結果を必要とする場合、これは機能しません。したがって、複数のシャドウマップレンダーターゲットがある場合、GPUは、描画呼び出しを(ある程度)並列化してすべてのシャドウマップを描画し、その後、シャドウマップを読み取り、ライトを描画する描画呼び出しを個別に並列化できる可能性があります。ただし、レンダーターゲットが1つしかない場合は、シャドウマップA、ライトAの描画、シャドウマップBの描画、ライトBの描画などを順番に行う必要があります。ハイエンドGPUでは、これらの操作によってGPUが個別に飽和しない場合があるため、一部のコアはアイドルのままに

このため、最高のパフォーマンスを得るには、少なくとも2つのシャドウマップレンダーターゲットがあり、それらを循環する必要がありますが、個々のライトごとに別々のレンダーターゲットを持つ必要はありません。もう1つの方法は、GPUがギャップを埋めるために使用できる他の作業をGPUに提供しようとすることです-おそらく、粒子を個別のレンダーターゲットに描画します。(そして、すべてのパフォーマンスの懸念と同様に、YMMV、それをプロファイルしてください!)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.