Danke für den Test, Performance ist mal wieder sehr gut - schade, dass sich dasselbe nicht über das Spiel sagen lässt.
Ist tatsächlich mein erster Refund auf Steam.
Deferred Rendering ist, wenn man einen Teil der Berechnung hinten anstellt. Das Endprodukt auf dem Bildschirm ist ja die Summe aus mehreren Berechnungen Würfel + Oberfläche + Textur + Normal Map + Light Map. Das könnte man ja parallel Ausrechnen, aber in dem Falle macht man das nicht, man stellt eine Berechnung nach hinten an (to defer), derzeit in der Regel die des Helligkeitswertes. Grund dafür sind Pixelshadereffekte in Zukunft auch RTX Lichtberechnungen. Das entspringt halt der EInsicht, dass man nicht alles parallelisieren kann, oder sogar in der Summer Rechenpower spart, wenn man es nicht macht.
Ne, Parallelisierbarkeit hat damit erstmal nicht viel zu tun, die entsteht ja dadurch, dass jeder Vertex und jedes Pixel seinen eigenen Thread bekommt.
Zu Dx9-Zeiten hat man Deferred Rendering eingeführt, weil es mit Forward-Rendering damals keine sinnvolle Möglichkeit gab, Lichtquellen zu filtern, sodass man für jedes Pixel nur die benutzt, die auch merklich zur Beleuchtung beitragen. Den Render-Pass für Lichtberechnung hat man einfach mit additivem Blending für jede einzelne Lichtquelle realisiert. Das ist zwar besser als Hunderte von Lichtern auf den
gesamten Bildschirminhalt anzuwenden, frisst aber durch das Blending und die vielen Render Targets unglaublich viel Speicherbandbreite, ist nicht besonders effizient.
Die nächste Evolutionsstufe war dann Tiled Deferred, wo man dann anhand des Depth Buffers für jeden Block von bspw. 16x16 Pixeln die Lichtquellen filtert, die überhaupt einen Einfluss auf den Block haben, die Beleuchtung für jeden Block wird dann mit einer einzelnen Compute Shader-Workgroup berechnet. Spart Bandbreite, weil das Blending wegfällt und man die G-Buffer-Inhalte nur noch ein Mal laden und das Endergebnis nur noch ein Mal speichern muss, der G-Buffer-Pass ist aber immer noch recht bandbreitenlastig, weil die Shader oft relativ einfach sind, aber je nach Engine 3-8 Render Targets produziert werden.
Das gleiche kann man aber eben auch für Forward-Renderer machen, womit das ursprüngliche Problem, das man zu Dx9-Zeiten hatte, einfach wegfällt. Id Tech 6 macht normalerweise genau das (allerdings mit einer dreidimensionalen Raumaufteilung statt 16x16-Blöcke) und wendet lediglich Screenspace Reflections später an (klar, geht in dem Fall ja nicht anders). Spart im besten Fall noch mehr Bandbreite und ist v.a. deutlich flexibler, weil man nicht für jede Materialeigenschaft neue G-Buffer-Parameter und Codepfade im Lighting-Shader braucht.
RT-Effekte lassen sich an sich auch problemlos mit Forward-Rendering kombinieren. Die müssen ohnehin separat berechnet werden, im Falle von RT-GI würde man eben den GI-Teil vorberechnen und dann beim Haupt-Renderpass genau so anwenden, wie man es bei einem Deferred Renderer im Lighting-Pass täte.