Fragen zu Shadern(OpenGL)
-
Hallo.
Man kann ja in Shadern durch gl_LightSource[0] die 1. Lichtquelle ermitteln und mit ihr entsprechende Berechnungen durchführen. Wenn ich aber mehrere Lichtquellen hab, was dann?
Muss ich dann durch alle Lichtquellen iterieren?
Und wie macht OpenGl das(also alle Lichtquellen berechnen)?
Ich meine, rendert es dann auch mehreremale oder in einem Durchgang alle?Und wie ist das mit ShadowMapping,also reicht es da nur die erste Lichtquelle(Sonne) zu berechnen, oder sollte man wirklich alle berechnen?
Danke
Edit:Okay, anscheinend muss man wirklich durch alle LIchtquellen iterieren.
Aber nun frag ich mich,ob man beim ShadowMapping überhaupt auf Daten des OpenGL-Programms zugreifen muss. Denn in Beispielen wird immer z.B. auf Lichtquellen-Daten aus dem Programm zugegriffen, die man ja ermitteln kann,oder es wird auf leere Texturen zugegriffen.
Ich bin noch ein Anfänger auf dem Gebiet,deshalb berichtigt mich bitte,wenn ich falsch liege.
-
Wenn man das naiv angeht muss man im Shader über jede einzelne Lichtquelle iterieren, ja.
Aber es geht besser!
Ich werf dazu einfach mal als Stichwort "Deferred Rendering" in den Raum.
Hier ist auch ein relativ gutes englischsprachiges Tutorial dazu.
-
Okay.
Hab aber jetzt schon ein Shader für alle Lichtquellen.
Ist Deferred Rendering wirklich nötig?
-
coder++ schrieb:
Okay.
Hab aber jetzt schon ein Shader für alle Lichtquellen.
Ist Deferred Rendering wirklich nötig?Deferred Rendering ist schneller.
-
Nathan schrieb:
Deferred Rendering ist schneller.
So allgemein stimmt das nicht. Das hängt zumindest mal von der Anzahl der Lichtquellen und Szenenkomplexität ab. Außerdem ist Deferred Shading in Hinblick auf Transparenz und Antialiasing nicht ganz unproblematisch...
-
deferred ist eigentlich nicht generell schneller, es ist nur sehr viel simpler und bei alter hardware die dynamic branching nicht mag und ohne antialiasing nicht langsammer.
bei moderner hardware hardware bietet sich light indexed rendering mehr an, siehe z.B. http://www.pjblewis.com/articles/tile-based-forward-rendering/