Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Multi Light Shading Michał Drobot Technical Art Director Reality Pump.

Podobne prezentacje


Prezentacja na temat: "Multi Light Shading Michał Drobot Technical Art Director Reality Pump."— Zapis prezentacji:

1 Multi Light Shading Michał Drobot Technical Art Director Reality Pump

2 Problem wielu światełProblem wielu świateł Architektury oświetleniaArchitektury oświetlenia Forward RenderingForward Rendering Single-pass, multi-lightSingle-pass, multi-light Multi-pass, multi-lightMulti-pass, multi-light Deferred renderingDeferred rendering Deferred ShadingDeferred Shading Plan wykładu

3 Współczesne gry wymagająWspółczesne gry wymagają Zaawansowanego oświetlenia dynamicznegoZaawansowanego oświetlenia dynamicznego Wielu świateł na klatkęWielu świateł na klatkę >10 scenariusze polowe>10 scenariusze polowe >50 scenariusze miejskie>50 scenariusze miejskie Metod aproksymacji GI (global Illumination)Metod aproksymacji GI (global Illumination) Być może przy pomocy wielu światełByć może przy pomocy wielu świateł Problem wielu świateł

4 Światła istnieją jako obiekty w świecie gryŚwiatła istnieją jako obiekty w świecie gry Dwie podstawowe metodyDwie podstawowe metody Przekazać światła do shaderów obiektów, aby zostały uwzględnione w modelu oświetleniaPrzekazać światła do shaderów obiektów, aby zostały uwzględnione w modelu oświetlenia Wyrenderować światła do buforów pośrednich rozbijając równanie oświetleniaWyrenderować światła do buforów pośrednich rozbijając równanie oświetlenia Problem wielu świateł

5 Light = Ambient + Sum(N.L * Att * LightD + N.L * (N.H)^n * MatSpecD * N.L *Att)Light = Ambient + Sum(N.L * Att * LightD + N.L * (N.H)^n * MatSpecD * N.L *Att) Należy wyliczyć sumę oświetlenia dla dalszych obliczeń materiałuNależy wyliczyć sumę oświetlenia dla dalszych obliczeń materiału BRDF(Light)BRDF(Light) BRDF(DiffuseLight,Specular)BRDF(DiffuseLight,Specular) Problem wielu świateł

6 Dla każdego obiektuDla każdego obiektu Znajdź światła mające wpływ na obiektZnajdź światła mające wpływ na obiekt Partycjonowanie przestrzeniPartycjonowanie przestrzeni Kosztowne sortowania i sprawdzania dystansuKosztowne sortowania i sprawdzania dystansu Wyrenderuj wszystkie światła i materiał w pojedynczym shaderzeWyrenderuj wszystkie światła i materiał w pojedynczym shaderze Eksplozja shaderówEksplozja shaderów Potrzebna ilość shaderów = kombinacje(materiał, ilość świateł)Potrzebna ilość shaderów = kombinacje(materiał, ilość świateł) Ciężka integracja z cieniamiCiężka integracja z cieniami Shadow mapy muszą być ciągle w pamięciShadow mapy muszą być ciągle w pamięci Zmarnowane cykle GPUZmarnowane cykle GPU Trójkąty poza zasięgiem światłaTrójkąty poza zasięgiem światła Niewidoczne obiekty / overdrawNiewidoczne obiekty / overdraw Single Pass, Multi-light

7 Dla każdego światłaDla każdego światła Dla każdego obiektuDla każdego obiektu Dodaj oświetlenie od światła do framebufferaDodaj oświetlenie od światła do framebuffera FrameBuffer += brdf(object, light)FrameBuffer += brdf(object, light) Eksplozja shaderówEksplozja shaderów Potrzebna ilość shaderów = kombinacje(materiał, ilość świateł)Potrzebna ilość shaderów = kombinacje(materiał, ilość świateł) Zmarnowane cykle GPUZmarnowane cykle GPU Trójkąty poza zasięgiem światłaTrójkąty poza zasięgiem światła Niewidoczne obiekty / overdrawNiewidoczne obiekty / overdraw Dużo powtarzanej pracy z każdym passemDużo powtarzanej pracy z każdym passem Transformacje vertexówTransformacje vertexów FiltrowanieFiltrowanie Wysoki Batch Count (1/obiekt/światło)Wysoki Batch Count (1/obiekt/światło) Multi Pass, Multi-light

8 Dla każdego obiektuDla każdego obiektu Wyrenderuj parametry powierzchni do G-BufferaWyrenderuj parametry powierzchni do G-Buffera Dla każdego światła i każdego oświetlanego pixelaDla każdego światła i każdego oświetlanego pixela Użyj G-Buffera do obliczeń światłaUżyj G-Buffera do obliczeń światła Dodaj wynik do framebufferaDodaj wynik do framebuffera Proste shaderyProste shadery Dobrze skalowalne ze wzrostem ilości pixeli jak i światelDobrze skalowalne ze wzrostem ilości pixeli jak i światel Problematyczna obsługa przeźroczystościProblematyczna obsługa przeźroczystości Łatwa integracja cieniŁatwa integracja cieni Złożoność głębi dla świateł O(1)Złożoność głębi dla świateł O(1) Wiele małych świateł = jedno dużeWiele małych świateł = jedno duże Deferred Rendering

9 Light = Ambient + Sum(N.L * Att * LightD + N.L * (N.H)^n * MatSpecD * N.L *Att)Light = Ambient + Sum(N.L * Att * LightD + N.L * (N.H)^n * MatSpecD * N.L *Att) BRDF(Light) OR BRDF(Diffuse,Specular)BRDF(Light) OR BRDF(Diffuse,Specular) Do wyliczenia równania światła potrzebujemyDo wyliczenia równania światła potrzebujemy NormalNormal PozycjaPozycja AtrybutyAtrybuty Specular Intensity, Specular Glossines (n)Specular Intensity, Specular Glossines (n) Deferred Rendering

10 BRDF(Diffuse, Specular)BRDF(Diffuse, Specular) Do obliczenia pełnego BRDF potrzeba dodatkowoDo obliczenia pełnego BRDF potrzeba dodatkowo Material DiffuseMaterial Diffuse Material AttributesMaterial Attributes Typ materiałuTyp materiału Parametry materiału niezależne od światłaParametry materiału niezależne od światła Deferred Rendering

11 Deferred Shading Depth Buffer Light Buffer Forward Rendering Wyłączone pisanie Depth Specular / Motion Vec Normals Albedo / Shadow Sortowanie Back – To - Front Obiekty nieprzeźroczystePrzeźroczyste obiekty Deferred Lighting

12

13

14

15

16

17

18

19

20 Zapisujemy pełen G-Buffer dla pełnego wyliczenia BRDFZapisujemy pełen G-Buffer dla pełnego wyliczenia BRDF Podczas jednego przebiegu geometriiPodczas jednego przebiegu geometrii Każde światło renderujemy z osobna jakoKażde światło renderujemy z osobna jako Quad o wymiarach policzonych w screen spaceQuad o wymiarach policzonych w screen space Kule – point lightKule – point light Stożek – spot lightStożek – spot light Podczas wyliczeń światła tworzymy light bufferPodczas wyliczeń światła tworzymy light buffer Ostatecznie wyliczamy pełen BRDF podczas Deferred Lighting PassOstatecznie wyliczamy pełen BRDF podczas Deferred Lighting Pass Integruje materiały z wynikami light bufferaIntegruje materiały z wynikami light buffera Deferred Shading

21 Rozbijamy warstwę obliczeń geometrii i światła na dwa osobne przebiegiRozbijamy warstwę obliczeń geometrii i światła na dwa osobne przebiegi Przebieg geometrii generuje parametry w pełni opisujące materiał jak i jego interakcje ze światłemPrzebieg geometrii generuje parametry w pełni opisujące materiał jak i jego interakcje ze światłem Przykładowy G-Buffer (Killzone 2)Przykładowy G-Buffer (Killzone 2) Deferred Shading

22 MRTMRT Podczas przebiegu geometrii piszemy do wszystkich buforówPodczas przebiegu geometrii piszemy do wszystkich buforów Bufory muszą mieć ten sam alignmentBufory muszą mieć ten sam alignment Np. możliwe kombinacje (również uzależnione od platformy)Np. możliwe kombinacje (również uzależnione od platformy) RGBA16RGBA16 RG32RG32 W TW2W TW2 RGBA8 – Diffuse, Specular IntensityRGBA8 – Diffuse, Specular Intensity RGBA8 – XY Normal, Specular Glossines, Material IDRGBA8 – XY Normal, Specular Glossines, Material ID RGBA8 – Linear Depth zapisana na 32bitach (nieobecny na konsolach ze względu na bezpośredni dostęp do Zbufora)RGBA8 – Linear Depth zapisana na 32bitach (nieobecny na konsolach ze względu na bezpośredni dostęp do Zbufora) Deferred Shading

23 Operacje wektorowe wyliczenia światłaOperacje wektorowe wyliczenia światła PotrzebujemyPotrzebujemy Pozycji pixela w WorldSpace lub ViewSpacePozycji pixela w WorldSpace lub ViewSpace Pozycji Światła w WS lub VSPozycji Światła w WS lub VS Dla uproszczenia przyjmijmy wykonywanie obliczeń w View Space (Camer Space)Dla uproszczenia przyjmijmy wykonywanie obliczeń w View Space (Camer Space) Deferred Rendering

24 PozycjaPozycja Pozycje pixela w CS możemy zapisać do MRTPozycje pixela w CS możemy zapisać do MRT Wymaga dużej precyzji i 3 kanałówWymaga dużej precyzji i 3 kanałów RGBA16FRGBA16F Marnowanie pamięci i przepustowościMarnowanie pamięci i przepustowości Pozycja może być odtworzona z położenia pixela na ekranie oraz jego głębi liniowej w CSPozycja może być odtworzona z położenia pixela na ekranie oraz jego głębi liniowej w CS Macierz odwrotna do macierzy projekcjiMacierz odwrotna do macierzy projekcji Deferred Rendering

25 NormalneNormalne Ze względu na precyzję oraz znak zapisujemy w CSZe względu na precyzję oraz znak zapisujemy w CS Znak zawsze dodatniZnak zawsze dodatni Umożliwia kompresje buforaUmożliwia kompresje bufora Normal.z = sqrt(1.0 – Normal.x^2 – Normal.y^2)Normal.z = sqrt(1.0 – Normal.x^2 – Normal.y^2) Deferred Rendering

26 Atrybuty powierzchniAtrybuty powierzchni Przechowywane w sposób upakowanyPrzechowywane w sposób upakowany Czasem wymagana kompresja zakresuCzasem wymagana kompresja zakresu Np. Specular Power do skali log itpNp. Specular Power do skali log itp Deferred Rendering

27 GłębiaGłębia Zapisywana w formacie liniowym (Position.z w CS) zamiast log Z-buforaZapisywana w formacie liniowym (Position.z w CS) zamiast log Z-bufora W przypadku formatów INT możliwy zapis poprzez kompresje Float->RGB8W przypadku formatów INT możliwy zapis poprzez kompresje Float->RGB8 Kompresja ręczna, zależna od dokładnościKompresja ręczna, zależna od dokładności Na konsolach możliwy odczyt bezpośredni Z- bufora wraz z dekompresją do liniowegoNa konsolach możliwy odczyt bezpośredni Z- bufora wraz z dekompresją do liniowego Deferred Rendering

28 Light BufferLight Buffer Preferowany format HDRPreferowany format HDR RGBA16FRGBA16F RGB – Light Diffuse A – Specular IntensityRGB – Light Diffuse A – Specular Intensity Dla każdego światła (Light Accumulation)Dla każdego światła (Light Accumulation) W trybie ADD BlendW trybie ADD Blend Renderujemy w CS Convex Hull reprezentujący wymiary światła w CSRenderujemy w CS Convex Hull reprezentujący wymiary światła w CS QuadQuad SphereSphere ConeCone Dodatkowe przebiegi dla świateł kierunkowych (słońce) oraz Ambient LightDodatkowe przebiegi dla świateł kierunkowych (słońce) oraz Ambient Light Deferred Rendering

29 Deffered LightingDeffered Lighting Przebieg czytaPrzebieg czyta Light BufferLight Buffer Bufory atrybutów materiałów (minimalnie Diffuse Color)Bufory atrybutów materiałów (minimalnie Diffuse Color) Wykonuje obliczenia BRDFWykonuje obliczenia BRDF Wspólny BRDF dla wszystkich pixeliWspólny BRDF dla wszystkich pixeli Uwzględnione możliwe parametry materiałuUwzględnione możliwe parametry materiału Sterowany parametrami (parametr = kanał G-Buffera)Sterowany parametrami (parametr = kanał G-Buffera) Mała customizacja oraz brak skalowalności na ilość parametrów i różne materiałyMała customizacja oraz brak skalowalności na ilość parametrów i różne materiały Wiele przebiegów kilku BRDF-ówWiele przebiegów kilku BRDF-ów Wolne ze względu na ilość przebiegówWolne ze względu na ilość przebiegów Korzystanie z material IDKorzystanie z material ID Seria IF-ów decydująca o wykonaniu BRDFSeria IF-ów decydująca o wykonaniu BRDF Kosztowna dla ALUKosztowna dla ALU Korzystanie z zapisanych BRDF-ów wraz z indexem materiałuKorzystanie z zapisanych BRDF-ów wraz z indexem materiału Textura 3D – (U,V,W) = (N.L, H.L, MaterialID)Textura 3D – (U,V,W) = (N.L, H.L, MaterialID) Wolne w odczycie Tex3D, odczyty zależne, mało funkcjonalne w trakcie produkcjiWolne w odczycie Tex3D, odczyty zależne, mało funkcjonalne w trakcie produkcji Deferred Rendering

30 Końcowy buforKońcowy bufor Zawiera prawidłowo oświetloną scenę w formacie HDRZawiera prawidłowo oświetloną scenę w formacie HDR Na nim przeprowadzamy operacje wblendowywania obiektów nieprzeźroczystych, o materiałach nie uwzględmionych w trybie deferredNa nim przeprowadzamy operacje wblendowywania obiektów nieprzeźroczystych, o materiałach nie uwzględmionych w trybie deferred Dla każdego obiektu specjalnegoDla każdego obiektu specjalnego HDR Framebuffer = (Alpha Blend)[BRDF(obiekt, światła)] - w trybie forwardHDR Framebuffer = (Alpha Blend)[BRDF(obiekt, światła)] - w trybie forward Na nim przeprowadzamy operacje wblendowywania obiektów przeźroczystychNa nim przeprowadzamy operacje wblendowywania obiektów przeźroczystych Dla każdego przeźroczystego obiektuDla każdego przeźroczystego obiektu W trybie Blend (Add, Mul, MulAdd etc.)W trybie Blend (Add, Mul, MulAdd etc.) HDR Framebuffer += BRDF(obiekt, światła) - w trybie forwardHDR Framebuffer += BRDF(obiekt, światła) - w trybie forward Podobnie wblendowujemy particlePodobnie wblendowujemy particle Jest wejściem dla całego etapu post processinguJest wejściem dla całego etapu post processingu Potem ulega HDR Resolve i uzyskujemy końcowy framebuffer LDRPotem ulega HDR Resolve i uzyskujemy końcowy framebuffer LDR Deferred Rendering

31 OptymalizacjeOptymalizacje Chcemy oświetlać jedynie geometrie w środku light volumeaChcemy oświetlać jedynie geometrie w środku light volumea Pozostałe pixele są zmarnowaną pracąPozostałe pixele są zmarnowaną pracą Deferred Shading W środku volumea Poza volumeem, Nie będzie cieniowane Poza volumeem, Będzie cieniowane, Wynik będzie odrzucony odrzucony

32 Optymalizacje mające na celu ograniczenie cieniowanych obszarów przy użyciu bufora ZOptymalizacje mające na celu ograniczenie cieniowanych obszarów przy użyciu bufora Z Stencil CullStencil Cull Depth Bound TestDepth Bound Test Optymalizacje

33 Optymalizacje mające na celu ograniczenie cieniowanych obszarów przy użyciu bufora ZOptymalizacje mające na celu ograniczenie cieniowanych obszarów przy użyciu bufora Z Stencil CullStencil Cull Depth Bound TestDepth Bound Test Optymalizacje

34 Zaznaczenie pixele przed tylną granicą światłaZaznaczenie pixele przed tylną granicą światła Wyrenderuj back-faces światłaWyrenderuj back-faces światła Depth test : GREATER-EQUALDepth test : GREATER-EQUAL Zapisz wynik do STENCILZapisz wynik do STENCIL Optymalizacje

35 Zaznaczenie pixeli wewnątrz światłaZaznaczenie pixeli wewnątrz światła Zacznij własciwy shader światłaZacznij własciwy shader światła Wyrenderuj front-faces światłaWyrenderuj front-faces światła Depth test : LESS-EQUALDepth test : LESS-EQUAL Wykonaj stencil test EQUALWykonaj stencil test EQUAL Optymalizacje

36 Podsumowanie For more information contact me Slides will be available at Drobot.org

37 Questions ?


Pobierz ppt "Multi Light Shading Michał Drobot Technical Art Director Reality Pump."

Podobne prezentacje


Reklamy Google