Per-Pixel-Lighting
Per-Pixel-Lighting bzw. Pixelbasierte Beleuchtung ist eine Shading-Methode, die dem Vertex Based Lighting ähnelt.
Hintergrund
Im Gegensatz zum Vertex Based Lighting wird beim Per-Pixel-Lighting die Beleuchtung nicht für jeden Vertex berechnet und interpoliert, sondern es wird für jeden einzelnen Pixel 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 zum Beispiel Schweißglanz. Für jeden dieser Pixel wird die Farbe entsprechend einem Beleuchtungsmodell berechnet.
So genannte Bumpmaps und Normalmaps speichern die Oberflächenvektoren in ihren Pixel. Da das Beleuchtungsmodell 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 sie zu sehr einschränkt.
Eine Liste einiger Engines, die Per-Pixel-Lighting unterstützen:
- CryEngine (Far Cry)
- Doom-3-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
Weblinks
- Artikel „Driving DirectX – Per-Pixel Lighting“ im MSDN (engl., Einführung in Per-Pixel Lighting samt Theorie und Programmstrukturen.)
- Beispiel für einen Effekt der mit Per-Pixel-Lighting erstellt werden kann. (Screenshot und Source Code)