Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałWisława Napora Został zmieniony 10 lat temu
1
Michał Drobot Technical Art Director Reality Pump
Multi Light Shading Michał Drobot Technical Art Director Reality Pump
2
Plan wykładu Problem wielu świateł Architektury oświetlenia
Forward Rendering Single-pass, multi-light Multi-pass, multi-light Deferred rendering Deferred Shading
3
Problem wielu świateł Współczesne gry wymagają
Zaawansowanego oświetlenia dynamicznego Wielu świateł na klatkę >10 scenariusze polowe >50 scenariusze miejskie Metod aproksymacji GI (global Illumination) Być może przy pomocy wielu świateł
4
Problem wielu świateł Światła istnieją jako obiekty w świecie gry
Dwie podstawowe metody Przekazać ś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świetlenia
5
Problem wielu świateł 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łu BRDF(Light) BRDF(DiffuseLight,Specular)
6
Single Pass, Multi-light
Dla każdego obiektu Znajdź światła mające wpływ na obiekt Partycjonowanie przestrzeni Kosztowne sortowania i sprawdzania dystansu Wyrenderuj wszystkie światła i materiał w pojedynczym shaderze Eksplozja shaderów Potrzebna ilość shaderów = kombinacje(materiał , ilość świateł) Ciężka integracja z cieniami Shadow mapy muszą być ciągle w pamięci Zmarnowane cykle GPU Trójkąty poza zasięgiem światła Niewidoczne obiekty / overdraw
7
Multi Pass, Multi-light
Dla każdego światła Dla każdego obiektu Dodaj oświetlenie od światła do framebuffera FrameBuffer += brdf(object, light) Eksplozja shaderów Potrzebna ilość shaderów = kombinacje(materiał , ilość świateł) Zmarnowane cykle GPU Trójkąty poza zasięgiem światła Niewidoczne obiekty / overdraw Dużo powtarzanej pracy z każdym passem Transformacje vertexów Filtrowanie Wysoki Batch Count (1/obiekt/światło)
8
Deferred Rendering Dla każdego światła i każdego oświetlanego pixela
Dla każdego obiektu Wyrenderuj parametry powierzchni do G-Buffera Dla każdego światła i każdego oświetlanego pixela Użyj G-Buffera do obliczeń światła Dodaj wynik do framebuffera Proste shadery Dobrze skalowalne ze wzrostem ilości pixeli jak i światel Problematyczna obsługa przeźroczystości Łatwa integracja cieni Złożoność głębi dla świateł O(1) Wiele małych świateł = jedno duże
9
Deferred Rendering Do wyliczenia równania światła potrzebujemy
Light = Ambient + Sum(N.L * Att * LightD + N.L * (N.H)^n * MatSpecD * N.L *Att) BRDF(Light) OR BRDF(Diffuse,Specular) Do wyliczenia równania światła potrzebujemy Normal Pozycja Atrybuty Specular Intensity, Specular Glossines (n)
10
Deferred Rendering BRDF(Diffuse, Specular)
Do obliczenia pełnego BRDF potrzeba dodatkowo Material Diffuse Material Attributes Typ materiału Parametry materiału niezależne od światła
11
Deferred Shading Obiekty nieprzeźroczyste Przeźroczyste obiekty
Normals Specular / Motion Vec Albedo / Shadow Depth Buffer Light Buffer Wyłączone pisanie Depth Forward Rendering Deferred Lighting Sortowanie Back – To - Front
20
Deferred Shading Podczas wyliczeń światła tworzymy light buffer
Zapisujemy pełen G-Buffer dla pełnego wyliczenia BRDF Podczas jednego przebiegu geometrii Każde światło renderujemy z osobna jako Quad o wymiarach policzonych w screen space Kule – point light Stożek – spot light Podczas wyliczeń światła tworzymy light buffer Ostatecznie wyliczamy pełen BRDF podczas Deferred Lighting Pass Integruje materiały z wynikami light buffera
21
Deferred Shading Rozbijamy 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łem Przykładowy G-Buffer (Killzone 2)
22
Deferred Shading MRT Podczas przebiegu geometrii piszemy do wszystkich buforów Bufory muszą mieć ten sam alignment Np. możliwe kombinacje (również uzależnione od platformy) RGBA16 RG32 W TW2 RGBA8 – Diffuse, Specular Intensity RGBA8 – 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)
23
Deferred Rendering Operacje wektorowe wyliczenia światła Potrzebujemy
Pozycji pixela w WorldSpace lub ViewSpace Pozycji Światła w WS lub VS Dla uproszczenia przyjmijmy wykonywanie obliczeń w View Space (Camer Space)
24
Deferred Rendering Pozycja Pozycje pixela w CS możemy zapisać do MRT
Wymaga dużej precyzji i 3 kanałów RGBA16F Marnowanie pamięci i przepustowości Pozycja może być odtworzona z położenia pixela na ekranie oraz jego głębi liniowej w CS Macierz odwrotna do macierzy projekcji
25
Deferred Rendering Normalne
Ze względu na precyzję oraz znak zapisujemy w CS Znak zawsze dodatni Umożliwia kompresje bufora Normal.z = sqrt(1.0 – Normal.x^2 – Normal.y^2)
26
Deferred Rendering Atrybuty powierzchni
Przechowywane w sposób upakowany Czasem wymagana kompresja zakresu Np. Specular Power do skali log itp
27
Deferred Rendering Głębia
Zapisywana w formacie liniowym (Position.z w CS) zamiast log Z-bufora W przypadku formatów INT możliwy zapis poprzez kompresje Float->RGB8 Kompresja ręczna, zależna od dokładności Na konsolach możliwy odczyt bezpośredni Z-bufora wraz z dekompresją do liniowego
28
Deferred Rendering Light Buffer Preferowany format HDR
RGBA16F RGB – Light Diffuse A – Specular Intensity Dla każdego światła (Light Accumulation) W trybie ADD Blend Renderujemy w CS Convex Hull reprezentujący wymiary światła w CS Quad Sphere Cone Dodatkowe przebiegi dla świateł kierunkowych (słońce) oraz Ambient Light
29
Deferred Rendering Deffered Lighting Przebieg czyta
Light Buffer Bufory atrybutów materiałów (minimalnie Diffuse Color) Wykonuje obliczenia BRDF Wspólny BRDF dla wszystkich pixeli Uwzględnione możliwe parametry materiału Sterowany parametrami (parametr = kanał G-Buffera) Mała customizacja oraz brak skalowalności na ilość parametrów i różne materiały Wiele przebiegów kilku BRDF-ów Wolne ze względu na ilość przebiegów Korzystanie z material ID Seria IF-ów decydująca o wykonaniu BRDF Kosztowna dla ALU Korzystanie z zapisanych BRDF-ów wraz z indexem materiału Textura 3D – (U,V,W) = (N.L , H.L, MaterialID) Wolne w odczycie Tex3D, odczyty zależne, mało funkcjonalne w trakcie produkcji
30
Deferred Rendering Końcowy bufor
Zawiera 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 deferred Dla każdego obiektu specjalnego HDR Framebuffer = (Alpha Blend)[BRDF(obiekt, światła)] - w trybie forward Na nim przeprowadzamy operacje wblendowywania obiektów przeźroczystych Dla każdego przeźroczystego obiektu W trybie Blend (Add, Mul, MulAdd etc.) HDR Framebuffer += BRDF(obiekt, światła) - w trybie forward Podobnie wblendowujemy particle Jest wejściem dla całego etapu post processingu Potem ulega HDR Resolve i uzyskujemy końcowy framebuffer LDR
31
Deferred Shading Optymalizacje
Chcemy oświetlać jedynie geometrie w środku light volume’a Pozostałe pixele są zmarnowaną pracą W środku volume’a Poza volume’em, Będzie cieniowane, Wynik będzie odrzucony Poza volume’em, Nie będzie cieniowane
32
Optymalizacje Optymalizacje mające na celu ograniczenie cieniowanych obszarów przy użyciu bufora Z Stencil Cull Depth Bound Test
33
Optymalizacje Optymalizacje mające na celu ograniczenie cieniowanych obszarów przy użyciu bufora Z Stencil Cull Depth Bound Test
34
Optymalizacje Zaznaczenie pixele przed tylną granicą światła
Wyrenderuj back-faces światła Depth test : GREATER-EQUAL Zapisz wynik do STENCIL
35
Optymalizacje Zaznaczenie pixeli wewnątrz światła
Zacznij własciwy shader światła Wyrenderuj front-faces światła Depth test : LESS-EQUAL Wykonaj stencil test EQUAL
36
Podsumowanie For more information contact me hello@drobot.org
Slides will be available at Drobot.org
37
Questions ?
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.