Tiled Deferred Rendering nicht unbedingt erfordert ein Compute Shader. Was es erfordert, ist, dass Sie für jedes Plättchen eine Reihe von Lichtern haben, die es verarbeiten wird. Ein Compute-Shader ist nur eine Möglichkeit, dies zu erreichen.
Eine Alternative besteht darin, die Lichtlisten für jeden Kegelstumpf auf der CPU zu erstellen und diese Daten dann für die spätere Verwendung auf die GPU hochzuladen. Offensichtlich erfordert es viel mehr Arbeitsspeicher als die CS-Version. Aber es ist wahrscheinlich nicht , dass teuer, und es ermöglicht Ihnen, leicht mit Fliesengrößen zu spielen, um die optimale zu finden. Mehr Kacheln bedeuten mehr CPU-Arbeit und mehr zu ladende Daten, aber weniger Licht pro Kachel (allgemein gesprochen) und effizientere Verarbeitung.
Eine Möglichkeit, dies für GL 3.3-Klasse-Hardware zu tun, besteht darin, jede Kachel zu einem separaten Quad zu machen. Das Quad wird als Teil seiner pro-Vertex-Parameter den Startindex für seinen Teil der gesamten Lichtliste und die Gesamtanzahl der Lichter für diese Kachel zur Verarbeitung erhalten. Die Idee ist, dass es ein global zugreifbares Array gibt und jede Kachel eine zusammenhängende Region dieses Arrays hat, die sie verarbeiten wird.
Diese Anordnung könnte die tatsächlichen Lichter selbst sein, oder es könnte Indizes in eine zweite (viel kleinere) Reihe von Lichtern sein. Sie müssen den Unterschied messen, um festzustellen, ob es sich lohnt, die zusätzliche Indirektion im Zugriff zu haben.
Das primäre Array sollte wahrscheinlich ein buffer texture sein, da es ziemlich groß werden kann, abhängig von der Anzahl der Lichter und Kacheln. Wenn Sie mit der indirekten Route gehen, wird die Anordnung der tatsächlichen Lichtdaten wahrscheinlich in einen einheitlichen Block passen. In beiden Fällen müssen Sie beim Hochladen Puffer-Streaming-Techniken verwenden.
Ich glaube nicht. Das verzögerte Rendering erfordert, dass Sie zwischen Shader-Aufrufen in der gleichen Arbeitsgruppe kommunizieren (z. B. müssen Sie eine gemeinsame Liste sichtbarer Lichtquellen speichern), was ohne Compute-Shader nicht möglich ist. – BDL
Mmmm ... ok. Irgendwelche Vorschläge dann? Eine andere Herangehensweise, an die ich dachte, sind Lichtmengen, aber ich denke nicht, dass sie mit vielen Lichtern gut skaliert. – zeb