light pre-pass renderer
DESCRIPTION
Light pre-pass renderer. Marcin Korniluk. Plan prezentacji. Podejście klasyczne i Z pre-pass Carmacka Deferred shading Light pre-pass renderer Demo Podsumowanie. To każdy zna. Podejście Klasyczne. Podejście klasyczne. Opcja 1: Jeden przebieg Warianty shaderów dla różnych świateł - PowerPoint PPT PresentationTRANSCRIPT
Light pre-pass rendererMarcin Korniluk
Marcin Korniluk - Light Pre-Pass Renderer 2
Plan prezentacjiPodejście klasyczne i Z pre-pass
CarmackaDeferred shadingLight pre-pass rendererDemoPodsumowanie
3
PODEJŚCIE KLASYCZNETo każdy zna
Marcin Korniluk - Light Pre-Pass Renderer
Marcin Korniluk - Light Pre-Pass Renderer 4
Podejście klasyczneOpcja 1: Jeden przebieg
◦ Warianty shaderów dla różnych świateł◦ Słaby batching
Opcja 2: Wiele przebiegów◦ Mało shaderów◦ Dużo niepotrzebnej pracy
Minimalizacja ilości przetwarzanych świateł
Marnotrawstwo cykli
Marcin Korniluk - Light Pre-Pass Renderer 5
Z Pre-Pass CarmackaPierwszy przebieg rysuje tylko głębię
◦ Sortowanie „od najbliższych”◦ Prosty shader
Drugi przebieg rysuje resztę◦ Kompletne shadery◦ Minimalna nadmiarowość rysowania◦ Nadal wiele wad
Wykorzystane przez producentów GPU
6
DEFERRED SHADINGPrzypomnienie
Marcin Korniluk - Light Pre-Pass Renderer
Marcin Korniluk - Light Pre-Pass Renderer 7
Deferred shadingPomysł padł na SIGGRAPH 88Złożoność oświetlenia O(n+m) zamiast
O(nm)Rozbicie renderowania na 2 etapy
◦ Geometrii◦ Oświetlenia
Marcin Korniluk - Light Pre-Pass Renderer 8
Deferred shading – cd.Obiekty lite
Obiekty przezroczyste
Normalne Głębokość
Oświetlenie i rysowanie
Rysowanie 2
IntensywnośćKolor
Marcin Korniluk - Light Pre-Pass Renderer 9
Deferred shading – etap geometriiDane sceny zapisywane do kilku
buforówR8 G8 B8 A8
Depth Stencil
Lighting Accumulation RGB Intensity
Normal.x Normal.y
Motion.x Motion.y Spec-power Spec-Intensity
Diffuse Albedo RGB Sun-Occlusion
Marcin Korniluk - Light Pre-Pass Renderer 10
Deferred shading – etap oświetleniaŚwiatła jako bryłyParametry per pixel pobierane z G-
BuforaMożliwa duża ilość świateł
Marcin Korniluk - Light Pre-Pass Renderer 11
Deferred shading – wadyAnti-aliasing
◦ Brak sprzętowego wsparcia MSAAAlpha blending
◦ Nie można zapisywać głębokości obiektów przezroczystych
Fill rate boundOgraniczenia materiałów
◦ Materiały muszą być prawie jednakowe
Marcin Korniluk - Light Pre-Pass Renderer 12
LIGHT PRE-PASS RENDERERNowe podejście
Marcin Korniluk - Light Pre-Pass Renderer 13
Light pre-pass rendererWolfgang Engel – czerwiec 2007Lekkie podejście do deferred shadingu3 etapy renderowania
◦ Przygotowanie◦ Oświetlenie◦ Rysowanie
Marcin Korniluk - Light Pre-Pass Renderer 14
Light pre-pass renderer – cd.Obiekty lite
Obiekty przezroczyste
Normalne Głębokość
Oświetlenie
Rysowanie
Rysowanie 2
Marcin Korniluk - Light Pre-Pass Renderer 15
Light pre-pass – przygotowanieDo bufora zapisujemy normalne i
głębokość◦ Potrzebne do oświetlenia◦ Wystarczy jeden RT RGBA8
Sortowanie „od najbliższego”
R8 G8 B8 A8
Normal.x Normal.y Depth
Marcin Korniluk - Light Pre-Pass Renderer 16
Pakowanie danych – normalnaTrzecią współrzędną normalnej da się
wyznaczyć◦ Twierdzenie Pitagorasa
◦ Znak jest stały (w większości przypadków)Dla RT RGBA16F nie trzeba pakować
221 yxz nnn
Marcin Korniluk - Light Pre-Pass Renderer 17
Pakowanie danych – pozycjaWystarczy zapisać długość wektora
float3 eyeVec = float3(x * aspect, y, 1/tan(fov/2));float4 pixelPosView = float4(normalize(eyeVec) * depth;
Marcin Korniluk - Light Pre-Pass Renderer 18
Light pre-pass – przygotowanie, cd.
19
Light pre-pass – oświetlenieDo bufora zapisywane oświetlenie
◦ Światła renderowane jako bryły◦ Wystarczy jeden RT RGBA8◦ HDR
Techniki optymalizacji jak w deferred shading◦ Takie same zalety◦ I wady
Marcin Korniluk - Light Pre-Pass Renderer
Marcin Korniluk - Light Pre-Pass Renderer 20
Pakowanie danych – kolorRGB źle się pakujeMożna pominąć kolor zwierciadlany
Może YUV?
R8 G8 B8 A8
Diffuse.r Diffuse.g Diffuse.b Specular
Marcin Korniluk - Light Pre-Pass Renderer 21
Light pre-pass – oświetlenie, cd.
Marcin Korniluk - Light Pre-Pass Renderer 22
Light pre-pass – rysowanieRysowanie „od najbliższego”
◦ Minimalna nadmiarowośćDowolność materiałówObiekty przezroczyste rysowane
klasycznie◦ Podobnie jak w deferred shading
Marcin Korniluk - Light Pre-Pass Renderer 23
Light pre-pass – rysowanie, cd.Przykładowy pixel shader
float3 normal = normalize(psIn.normal);float3 light = normalize(psIn.light);float3 view = normalize(psIn.view);
float3 diffuseLight = getDiffuseLight(normal,light);float3 specularLight = getSpecularLight(normal,light,view);
Marcin Korniluk - Light Pre-Pass Renderer 24
Light pre-pass – rysowanie, cd.Przykładowy pixel shader
float3 diffuseLight = LightBuffer.Sample(sampler,psIn.position).xyz;float specularLight = LightBuffer.Sample(sampler,psIn.position).w;
Marcin Korniluk - Light Pre-Pass Renderer 25
Anti-aliasingSprzętowy MSAA
Nie jest tak różowo
Marcin Korniluk - Light Pre-Pass Renderer 26
Rozmiar ramki obrazuDeferred shading
Light pre-pass
408B 785 16447681366 MRTBpp
704B 392 8247681366 MSAABpp
Marcin Korniluk - Light Pre-Pass Renderer 27
Light pre-pass – wadyEfekty z VS
◦ Displacement mappingRedundantna transformacja sceny
◦ Koszt porównywalny z generacją SM◦ Idealna nadmiarowość odrysowywania
Marcin Korniluk - Light Pre-Pass Renderer 28
Light pre-pass – wady, cd.Alpha-blending
◦ Przezroczyste obiekty rysowane klasycznie◦ Depth-peeling, A-Buffer, SRK-Buffer, PP Linked List
…Wysoki fill rate
◦ Niższy niż dla DS.◦ Ulepszenia takie jak dla DS.
Rysowanie brył otaczających Algorytm Lengyela
Marcin Korniluk - Light Pre-Pass Renderer 29
Light pre-pass – wady, cd. 2Rekonstrukcja koloru
Nagięcie reguł daje dobre rezultaty
i
in
s AttVRI
n
ii
i
ni VRVR
Marcin Korniluk - Light Pre-Pass Renderer 30
Demo
Marcin Korniluk - Light Pre-Pass Renderer 31
PODSUMOWANIE2 slajdy do końca
Marcin Korniluk - Light Pre-Pass Renderer 32
PodsumowanieBrak ograniczeń MRTSprzętowy anti-aliasingNiski fill-rateDwukrotne transformacje
◦ Ale bez oświetleniaBardzo dobry batching