Rozważ odroczenie oświetlenia. W skrócie, odroczone oświetlenie to technika wykorzystująca zredukowaną wersję odroczonego cieniowania do obliczenia jasnej mapy przestrzeni ekranu. W drugim przejściu geometria jest ponownie renderowana przy użyciu mapy świetlnej obszaru ekranu jako informacji o oświetleniu.
Ta technika służy do zmniejszenia wielkości bufora G, ponieważ potrzeba mniej atrybutów. Ma to również tę zaletę, że bufor G i mapa świetlna obszaru ekranu mogą mieć niższą rozdzielczość niż ekran.
Wdrożyłem ścisły renderer oparty na GLES 2.0 (choć eksperymentalny) i udało mi się sprowadzić bufor G do jednej tekstury RGBA (tak, użyłem texture2D zamiast bufora renderowania). Zawierał normalną mapę przestrzeni ekranu + bufor głębokości w kanale alfa (który, o ile pamiętam, został skompresowany za pomocą logarytmu).
Atrybuty pozycji (zwane tutaj światem ) można obliczyć podczas przejścia światła, wykorzystując fakt, że w rzucie perspektywicznym, .xy jest dzielone przez .z , tak że:
x yfaR u s t u m= x yw o r l d/ zw o r l d
Przybliżyłem xy atrybutu pozycji, wykonując:
x yw o r l d= x yfaR u s t u m∗ zw o r l d
Uwaga: Musiałem dokonać dalszych korekt w zależności od ustawień matrycy projekcyjnej.
Warto również zauważyć, że byłem w stanie pominąć składnik .z wektorów normalnych, ponieważ mogłem zrekonstruować .z z .xy, ponieważ wektor normalny jest znormalizowany, tak że:
x2)+ y2)+ z2)----------√= 1x2)+ y2)+ z2)= 1z2)= 1 - ( x2)+ y2))z= 1 - ( x2)+ y2))-----------√
Korzystając z tej techniki, byłem w stanie zwolnić inny kanał w moim buforze G RGBA i użyłem go do przechowywania mapy zwierciadlanej przestrzeni ekranu (lub połysku, jeśli wolisz).