Archiv für Dezember 2009

Beleuchtungsmodell

Freitag, 04. Dezember 2009

So Freunde, heute gibt es mal wieder einen eher technisch-konzeptionellen Beitrag. Ich habe mir in den Träumen einiger Nächte Ansätze zum Beleuchtungsmodell überlegt. Ich könnte natürlich auch auf gängige Standardmodelle zur Beleuchtung der Szene zurückgreifen, jedoch bringen diese neben ihren Vorteilen auch individuelle Nachteile mit sich und wären vor allem viel zu komplex für mein Vorhaben. Nicht, dass ich diese Komplexität nicht zu meistern wüsste, aber es muss ja beispielsweise gar keine komplexe 3D-Szene beleuchtet werden. Die Struktur der Szene bleibt ja größtenteils zweidimensional, auch wenn einige der Objekte auf 3D-Modellen basieren.

Da bietet es sich ja vielleicht an, auf ein laufzeitlastiges Standardverfahren zur “Per-Objekt-Beleuchtung” zu verzichten, bei der jedes Objekt pro beeinflussender Lichtquelle gerendert werden müsste (also mehrmals). Anstelle dessen könnte anhand der Lichtquellen eine “Light-Map” erstellt werden, die dann quasi in einem nachgelagerten Schritt über die ansonsten fertige Szene gelegt wird, um die gesamte Szene auf einen Schlag und nicht Objekt-weise zu beleuchten. Neben der geringeren Laufzeit und Komplexität wäre ein weiterer Vorteil, dass die Anzahl der Lichtquellen theoretisch beliebig groß sein könnte. Dieser Ansatz existiert in ähnlichen Zügen zwar auch bereits und ist unter dem Begriff Deferred Shading bzw. Deffered Lighting bekannt, der in heutigen modernen A-Klasse-Computerspielen häufig Anwendung findet. Jedich ist es erstens eben nicht genau dasselbe und zweitens ist Deferred Shading für 3D-Szenen konzipiert. Es bietet also Möglichkeiten, auf die ich verzichten kann, weil ich sie für meine 2D-Szenen gar nicht benötige. An sich ist das von mir erarbeitete Konzept ein völlig eigenes, wobei ich mir aber ein paar Ideen bei anderen Beleuchtungstechniken und insbesondere Deferred Shading abgekuckt habe.

Allerdings sind meine Überlegungen noch nicht zu 100% abgeschlossen. So schwanke ich noch zwischen zwei Alternativen zur Mischung der unbeleuchteten Szene mit der Beleuchtung der Lichtquellen. Beide Alternativen erwarten als Input (unter anderem) die unbeleuchtete aber ansonsten fertige Szene in einer Textur. Dann könnte ich zum Einen für jede Lichtquelle die Szene-Textur mit den jeweiligen Lichteigenschaften mischen und in den eigentlichen Grafikspeicher schreiben, indem ich die so berechneten Werte sukzessiv (je Lichtquelle) im Grafikspeicher aufsummiere, bis — nach Verarbeitung aller Lichtquellen — die komplette Szene fertig beleuchtet ist. Zum Anderen könnte ich die Lichtquellen und vielmehr deren Lichteinflüsse zunächst — wie bereits weiter oben kurz unter dem Stichwort “Light-Map” angedeutet — in eine weitere, separate Textur zeichnen. Die Textur der unbeleuchteten Szene und die der Light-Map müssten dann nur noch übereinandergelegt und entsprechend gemischt werden. Hat beides seine Vor- und Nachteile, die ich noch nicht komplett gegenüberstellen konnte. Vielleicht probiere ich beides einmal aus oder kombiniere sogar beide Ansätze irgendwie. Schließlich könnte ich ja auch noch zwischen Hintergrund- und Vordergrundbeleuchtung unterscheiden und jeweils andere Beleuchtungstechniken anwenden.