Lightmaps: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Konzept von Lightmaps)
 
K (Bot: konvertiere/korrigiere <BR>)
 
(6 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
<br>
 
== Konzept ==
 
== Konzept ==
  
Lightmapping ist grundsätzlich nur eine veränderte Form des Multitexturings :
+
Lightmapping ist eine Methode um statische Per-Pixel Beleuchtung (streng gesehen ist es eher eine "Per-Texel Beleuchtungsmethode") zu erreichen. Dazu werden für alle statischen Flächen einer Szene Texturen auf der CPU vorberechnet die pro Texel den gesammelten Lichtwert dieser Texelposition in Weltkoordinaten enthalten.  
Es gibt eine (oder mehrere) Grundtexur(-en) und ein Lightmap.
 
Wenn die Szene gerendert wird, wird einfach das Lightmap über die Grundtextur(-en) gemappt und schon sieht das Face beleuchtet aus.
 
  
Meistens wird das Lightmap vorberechnet und muss somit beim Programmstart nur aus einer Datei geladen werden.  
+
Um die Weltkoordinaten eines Texels zu ermitteln, nutzt man i.d.R. '''planares Mapping''', eine Technik bei der man die zu beleuchtende Fläche auf eine der Hauptachsen "projeziert" und so leicht Texturkoordinaten sowie Texelweltkoordinaten für die Lightmap ermitteln kann.
  
 +
Danach berechnet man auf der CPU den endgültigen Lichtwert dieser (dem Texel zugeordneten) Weltkoordinate. Wie man dies tut ist einem selbst überlassen, i.d.R. nutzt man dazu Radiositäts-Berechnungen, aber oft reicht auch eine einfache Distanzberechnung zur Lichtquelle.
  
== Vor - und Nachteile ==
+
Ist die Lightmap fertig berechnet, speichert man die für die berechnete Flächen zusätzlichen Lightmap-Texturkoordinaten und sendet die Lightmap als Textur an die GL.
''Die Auflistung geht davon aus, dass Vorberechnete Lightmaps verwendet werden''
 
  
'''Pro'''
+
Gerendert wird die Lightmap dann im Normallfall moduliert ('''GL_MODULATE''') auf der zweiten Textureinheiten (siehe [[Multitexturing]]). Auf Karten ohne Multitexturing wird dies per Multipass mit Tiefenmods '''GL_EQUAL''' und subtraktivem [[Blending]] erledigt.
  
- ziemlich schnell, da einfaches Multitexturing verwendet wird
 
  
'''Contra'''
 
  
- Bewegende Objekte (Spieler,Gegner,Türen usw.) werden nicht beachtet und nicht beleuchtet
+
 
- Programm zur erstellung von Lightmaps wird benötigt
+
== Zukunft ==
 +
Lightmapping ist statisch, und besonders mit Einführung Shader-fähigen Karten begann alles in Richtung dynamische Beleuchtung zu gehen. Da dynamische Beleuchtung nicht nur flexibler, sondern auch schöner ist, kann man solche statischen Methoden wie Lightmapping als veraltet betrachten. Eine Kombination von beiden Welten ist möglich, aber im Normalfall merkt der Nutzer dann dass zwei unterschiedliche Techniken genutzt wurden.  
 +
Lightmapping wird also über kurz oder lang komplett von der Bildfläche verschwinden.
 +
 
 +
 
 +
 
 +
== Vorteile ==
 +
 
 +
* Selbst auf Karten ohne Shader können so komplexe Beleuchtungsmodelle implementiert werden.
 +
* Lightmaps können extern berechnet werden und müssen nicht zur Laufzeit generiert werden.
 +
* Da vorberechnet später beim Rendern sehr schnell (besonders wenn Multitexturing verwendet wird).
 +
 
 +
 
 +
 
 +
== Nachteile ==
 +
 
 +
* Vorberechnet bedeutet allerdings auch dass sie statisch sind, also für dynamische Objekte weniger geeignet.
 +
* Benötigen zusätzlichen Platz auf der Grafikkarte.
 +
 
 +
[[Kategorie:Technik_oder_Algorithmus]]

Aktuelle Version vom 22. April 2006, 19:12 Uhr


Konzept

Lightmapping ist eine Methode um statische Per-Pixel Beleuchtung (streng gesehen ist es eher eine "Per-Texel Beleuchtungsmethode") zu erreichen. Dazu werden für alle statischen Flächen einer Szene Texturen auf der CPU vorberechnet die pro Texel den gesammelten Lichtwert dieser Texelposition in Weltkoordinaten enthalten.

Um die Weltkoordinaten eines Texels zu ermitteln, nutzt man i.d.R. planares Mapping, eine Technik bei der man die zu beleuchtende Fläche auf eine der Hauptachsen "projeziert" und so leicht Texturkoordinaten sowie Texelweltkoordinaten für die Lightmap ermitteln kann.

Danach berechnet man auf der CPU den endgültigen Lichtwert dieser (dem Texel zugeordneten) Weltkoordinate. Wie man dies tut ist einem selbst überlassen, i.d.R. nutzt man dazu Radiositäts-Berechnungen, aber oft reicht auch eine einfache Distanzberechnung zur Lichtquelle.

Ist die Lightmap fertig berechnet, speichert man die für die berechnete Flächen zusätzlichen Lightmap-Texturkoordinaten und sendet die Lightmap als Textur an die GL.

Gerendert wird die Lightmap dann im Normallfall moduliert (GL_MODULATE) auf der zweiten Textureinheiten (siehe Multitexturing). Auf Karten ohne Multitexturing wird dies per Multipass mit Tiefenmods GL_EQUAL und subtraktivem Blending erledigt.



Zukunft

Lightmapping ist statisch, und besonders mit Einführung Shader-fähigen Karten begann alles in Richtung dynamische Beleuchtung zu gehen. Da dynamische Beleuchtung nicht nur flexibler, sondern auch schöner ist, kann man solche statischen Methoden wie Lightmapping als veraltet betrachten. Eine Kombination von beiden Welten ist möglich, aber im Normalfall merkt der Nutzer dann dass zwei unterschiedliche Techniken genutzt wurden. Lightmapping wird also über kurz oder lang komplett von der Bildfläche verschwinden.


Vorteile

  • Selbst auf Karten ohne Shader können so komplexe Beleuchtungsmodelle implementiert werden.
  • Lightmaps können extern berechnet werden und müssen nicht zur Laufzeit generiert werden.
  • Da vorberechnet später beim Rendern sehr schnell (besonders wenn Multitexturing verwendet wird).


Nachteile

  • Vorberechnet bedeutet allerdings auch dass sie statisch sind, also für dynamische Objekte weniger geeignet.
  • Benötigen zusätzlichen Platz auf der Grafikkarte.