Per-Pixel-Lighting
aus Wikipedia, der freien Enzyklopädie
Per-Pixel-Lighting bzw. Pixelbasierte Beleuchtung ist ein sehr neues Beleuchtungsmodell, das dem Vertex Based Lighting ähnelt.
Im Gegensatz zum Vertex Based Lighting wird beim Per-Pixel-Lighting die Beleuchtung nicht für jeden Vertex berechnet und interpoliert.
Stattdessen wird für jedes einzelne Pixel, das dargestellt werden soll, ein Beleuchtungswert errechnet. Der Vorteil ist, dass auch wenn Flächen beschienen werden, die größer sind als der Beleuchtungsbereich noch ein realistischer Effekt erzielt wird. Dies ermöglicht die realistische Darstellung von extrem feinen Licht- und Reflexionseffekten wie z.B. Schweißglanz.
Hierzu wird zunächst bestimmt, welche Punkte der Oberfläche mit einem Pixel korrespondieren. Für jeden dieser Punkte wird dann ein Normalenvektor bestimmt und dieser mit dem Beleuchtungsvektor multipliziert (Skalarprodukt), und am Ende wird das Ergebnis gemittelt. Die Zahl, die man dann erhält, gibt an, wie stark die Farbe des Pixels aufgehellt werden muss.
Doch die wahre Macht des Per-Pixel-Lightings liegt sprichwörtlich im Detail: so genannte Bumpmaps und Normalmaps speichern die Oberflächenvektoren in ihren Pixel. Da das Beleuchtungsmodell ja die Lichtverhältnisse pro Pixel berechnet (Per-Pixel), können zusätzliche, (in Echtzeit) schattierte Details auf die Oberfläche gezeichnet werden.
Handelt es sich bei Normal- und Beleuchtungsvektor um Einheitsvektoren, dann erhält man ein Ergebnis zwischen 0 und 1, was es leicht macht, eine prozentuale Aufhellung zu ermitteln.
Das Verfahren wird von allen "Hardware-Shader unterstützenden" Grafikkarten und ab DirectX 8 angeboten. Hierzu gehören als Pioniere die ATI Radeon 8500 und die NVIDIA GeForce 3 sowie sämtliche Nachfolgermodelle. Jedoch können diese Per-Pixel-Lighting Effekte in Spielen erst richtig mit DirectX 9-kompatiblen Grafikkarten ausgenutzt werden, da die Geschwindigkeit älterer Grafikkarten zu sehr einschränken.
Eine Liste einiger Engines, die Per-Pixel-Lighting unterstützen:
- CryEngine (Far Cry)
- DOOM³-Engine
- Jupiter EX (F.E.A.R.)
- Nebula2 (Open Source)
- OGRE (Open Source)
- Source Engine (Half-Life 2)
- Tenebrae (weiterentwickelte Quake-Engine)
- Unreal Engine 3
[Bearbeiten] Weblinks
- MSDN: Article "Driving DirectX - Per-Pixel Lighting" (engl., Einführung in Per-Pixel Lighting samt Theorie und Programmstrukturen.)
- http://www.zfx.info/IOTW.php?ID=52 Beispiel für einen Effekt der mit Per-Pixel-Lighting erstellt werden kann. (Screenshot + Source Code)