Beim Forward-Rendering wird ein Strahlungswert für ein Oberflächenfragment direkt aus der Eingabegeometrie und den Beleuchtungsinformationen berechnet. Das verzögerte Rendern teilt diesen Prozess in zwei Schritte auf: erstens einen Bildschirmraumpuffer mit Materialeigenschaften (einen Geometriepuffer oder G-Puffer), der durch Rastern der Eingabegeometrie erstellt wurde, und zweitens einen Strahlungswert für jedes Pixel durch Kombinieren des G- Puffer mit Beleuchtungsinformationen.
Das verzögerte Rendern wird häufig als Optimierung des Vorwärtsrenderings dargestellt. Eine Erklärung ist, dass die Beleuchtung ziemlich teuer ist und wenn Sie eine Überzeichnung haben, beleuchten Sie Pixel, die niemals auf dem Bildschirm angezeigt werden. Wenn Sie jedoch Materialeigenschaften in einem G-Puffer speichern und anschließend beleuchten, beleuchten Sie nur ein Pixel, das dies tut erscheinen tatsächlich auf dem Bildschirm. Ist dies tatsächlich ein Vorteil von verzögert, da Sie auch einen Tiefenvorlauf durchführen und dann einen Vorwärtsrendering-Durchlauf mit einem auf D3D11_COMPARISON_EQUAL
oder GL_EQUAL
oder einem gleichwertigen Tiefentest eingestellten Tiefentest durchführen können ?
Das verzögerte Rendern hat auch das Potenzial, auf der GPU einen besseren Zeitplan zu erstellen. Das Aufteilen einer großen Warp / Wellenfront in eine Wellenfront mit kleinerer Geometrie und dann kleinere Lichtwellenfronten verbessert später die Belegung (mehr Wellenfronten gleichzeitig im Flug). Sie haben aber auch viel mehr Bandbreitennutzung (schreiben Sie eine große Anzahl von Kanälen in den G-Puffer und lesen Sie sie dann während der Beleuchtung wieder ein). Natürlich hängen die Einzelheiten hier stark von Ihrer GPU ab, aber was sind die allgemeinen Prinzipien?
Gibt es andere praktische Überlegungen zur Leistung bei der Entscheidung zwischen vorwärtsgerichtetem und verzögertem Rendern? (Nehmen wir an, dass wir bei Bedarf Variationen jeder Technik verwenden können: dh wir können Kacheln vorwärts mit Kacheln auch verzögert vergleichen.)