light pre-pass renderer

32
Light pre-pass renderer Marcin Korniluk

Upload: atara

Post on 23-Feb-2016

79 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Light pre-pass renderer

Light pre-pass rendererMarcin Korniluk

Page 2: Light pre-pass renderer

Marcin Korniluk - Light Pre-Pass Renderer 2

Plan prezentacjiPodejście klasyczne i Z pre-pass

CarmackaDeferred shadingLight pre-pass rendererDemoPodsumowanie

Page 3: Light pre-pass renderer

3

PODEJŚCIE KLASYCZNETo każdy zna

Marcin Korniluk - Light Pre-Pass Renderer

Page 4: 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

Page 5: Light pre-pass renderer

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

Page 6: Light pre-pass renderer

6

DEFERRED SHADINGPrzypomnienie

Marcin Korniluk - Light Pre-Pass Renderer

Page 7: 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

Page 8: Light pre-pass renderer

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

Page 9: Light pre-pass renderer

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

Page 10: Light pre-pass renderer

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ł

Page 11: Light pre-pass renderer

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

Page 12: Light pre-pass renderer

Marcin Korniluk - Light Pre-Pass Renderer 12

LIGHT PRE-PASS RENDERERNowe podejście

Page 13: Light pre-pass renderer

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

Page 14: Light pre-pass renderer

Marcin Korniluk - Light Pre-Pass Renderer 14

Light pre-pass renderer – cd.Obiekty lite

Obiekty przezroczyste

Normalne Głębokość

Oświetlenie

Rysowanie

Rysowanie 2

Page 15: Light pre-pass renderer

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

Page 16: Light pre-pass renderer

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

Page 17: Light pre-pass renderer

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;

Page 18: Light pre-pass renderer

Marcin Korniluk - Light Pre-Pass Renderer 18

Light pre-pass – przygotowanie, cd.

Page 19: Light pre-pass renderer

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

Page 20: 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

Page 21: Light pre-pass renderer

Marcin Korniluk - Light Pre-Pass Renderer 21

Light pre-pass – oświetlenie, cd.

Page 22: Light pre-pass renderer

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

Page 23: Light pre-pass renderer

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);

Page 24: Light pre-pass renderer

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;

Page 25: Light pre-pass renderer

Marcin Korniluk - Light Pre-Pass Renderer 25

Anti-aliasingSprzętowy MSAA

Nie jest tak różowo

Page 26: Light pre-pass renderer

Marcin Korniluk - Light Pre-Pass Renderer 26

Rozmiar ramki obrazuDeferred shading

Light pre-pass

408B 785 16447681366 MRTBpp

704B 392 8247681366 MSAABpp

Page 27: Light pre-pass renderer

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

Page 28: Light pre-pass renderer

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

Page 29: Light pre-pass renderer

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

Page 30: Light pre-pass renderer

Marcin Korniluk - Light Pre-Pass Renderer 30

Demo

Page 31: Light pre-pass renderer

Marcin Korniluk - Light Pre-Pass Renderer 31

PODSUMOWANIE2 slajdy do końca

Page 32: Light pre-pass renderer

Marcin Korniluk - Light Pre-Pass Renderer 32

PodsumowanieBrak ograniczeń MRTSprzętowy anti-aliasingNiski fill-rateDwukrotne transformacje

◦ Ale bez oświetleniaBardzo dobry batching