Lightmaps

Aus DGL Wiki
Version vom 18. Oktober 2004, 11:25 Uhr von Sascha Willems (Diskussion | Beiträge) (Artikel komplett neugeschrieben)

Wechseln zu: Navigation, Suche


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. Auf Karten ohne Multitexturing wird dies 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.