Granularität der Schattenkarte

7

Ich dachte, wir könnten für jedes Licht dieselbe Schattenkarte wiederverwenden. In einem Branchenartikel wurde jedoch darauf hingewiesen, dass Sie Schattenkarten zwischen Lichtern nicht wiederverwenden können und separate Oberflächen verwenden müssen.

Benötigen wir eine Schattenkarte pro Licht? Oder eine für den gesamten Prozess?

DeadMG
quelle
Vielleicht. Es kommt darauf an, welchen Effekt Sie erzielen möchten.
Gustavo Maciel

Antworten:

5

Mit "dieselbe Schattenkarte wiederverwenden" meine ich vermutlich die Wiederverwendung des Speichers (des Renderziels). Natürlich können Sie die Daten nicht wiederverwenden, da jedes Licht eine andere Sicht auf die Welt hat. :) :)

Auf jeden Fall können Sie das Renderziel wiederverwenden, wenn Sie möchten. Es gibt ein paar Einschränkungen. Zunächst müssen Sie Ihren Renderer natürlich so gestalten, dass jeweils nur eine Schattenkarte benötigt wird. Dies kann unpraktisch sein oder einige Änderungen in Ihrer Pipeline erfordern. Wenn Sie beispielsweise eine kaskadierte Schattenzuordnung für Ihr Sonnenlicht verwenden möchten, benötigen Sie möglicherweise einen Bildschirmpuffer, um die Schattenergebnisse zu speichern, sodass Sie mehrere Slices akkumulieren können, ohne Ihre Szene für jedes Slice neu zeichnen zu müssen.

Die andere Einschränkung besteht darin, dass Sie möglicherweise eine verringerte Leistung feststellen, da viele neuere GPUs mehrere Draw-Aufrufe parallel ausführen können (auch für verschiedene Rendering-Ziele). Dies wird jedoch unterbrochen, wenn ein Draw-Aufruf das Ergebnis eines vorherigen benötigt. Wenn Sie also mehrere Renderziele für Schattenkarten hatten, kann die GPU möglicherweise (bis zu einem gewissen Grad) die Zeichenaufrufe parallelisieren, um alle Schattenkarten zu zeichnen, und dann die Zeichenaufrufe, die die Schattenkarten lesen und die Lichter zeichnen, separat parallelisieren. Wenn Sie jedoch nur ein Renderziel haben, müssen Sie die Schattenkarte A, das Licht A, die Schattenkarte B, das Licht B usw. seriell zeichnen. Bei High-End-GPUs sättigen diese Vorgänge die GPU möglicherweise nicht einzeln, sodass einige Kerne dies tun untätig bleiben.

Vor diesem Hintergrund sollten Sie für eine optimale Leistung wahrscheinlich mindestens zwei Renderziele für Schattenkarten haben und diese durchlaufen, es ist jedoch immer noch nicht obligatorisch, separate Renderziele für jedes einzelne Licht zu haben. Eine andere Möglichkeit besteht darin, der GPU eine andere Arbeit zur Verfügung zu stellen, mit der sie die Lücken füllen kann - möglicherweise werden Partikel in ein separates Renderziel gezogen. (Und wie bei allen Leistungsproblemen, YMMV, profilieren Sie es!)

Nathan Reed
quelle