Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałBolesław Żach Został zmieniony 11 lat temu
1
Michał Drobot Technical Art Director Reality Pump
Shadowing Michał Drobot Technical Art Director Reality Pump
2
Plan wykładu Charakterystyka cienia Algorytmy cieni Shadow Volumes
Shadow Mapping
3
Cień Cień powstaje w wyniku przesłonięcie źródła światła przez okluder
Miejsce, do którego nie dociera światło Jest naturalny dla człowieka Ważny element naszej wizji człowieka Ułatwia pozycjonowanie obiektów w przestrzeni Ocena odległości obiektu od powierzchni Ocena odległości źródła światła od obiektu Rodzaju materiału, z którego wykonano obiekt Ocena charakterystyki światła
4
Cień Pozycjonowanie obiektu Odległość obiektu od płaszczyzny
Cienie kontaktowe
5
Cień Ocena odległości źródła światła od obiektu
6
Cień Ocena odległości źródła światła od obiektu
7
Cień Ocena materiału z którego wykonano obiekt przesłaniający
Kolorowe szkło, wosk, skóra, mat przeźroczyste
8
Cień Ocena charakterystyki źródła światła
Punktowe, obszarowe (wielkość, stosunek wielkości do obiektów)
9
Cień Umbra – obszar znajdujący się w cieniu całkowitym
Penumbra – obszar znajdujący się w półcieniu Umbra Penumbra
10
Cień
11
Algorytmy Rzutowanie płaszczyzn Śledzenie promieni
Stencil shadows , Shadow Volumes Śledzenie promieni Raytracing Porównywanie głębi Z Shadow mapping
12
Shadow Volumes Potraktujmy cienie jako bryły przestrzenne
Cień jako bryła jest obiektem, w którym nie jest niesione światło dla danego źródła Punkt światła Bryła cienia Trójkąt rzucający cień
13
Shadow Volumes
14
Shadow Volumes
15
Shadow Volumes Generacja Shadow Volume’ów
Zrzutuj promień od światła, przez każdy vertex w nieskończoność Zrzutowane wektory/vertexy utworzą bryłę cienia Interesującą nas częścią okludera jest jedynie jego sylwetka Znajdź sylwetkę z punktu widzenia światła Rozciągnij ją w nieskończoność OD światła W zależności od algorytmu zamknij bryłę (cap)
16
Shadow Volumes Podczas tworzenia shadow volume’a
Prześlij każdą krawędź obiektu jako zdegenerowany quad Znajdź w VS krawędzie (poprzez dot product) Odpowiednie 2 vertex’y przemieść w nieskończoność wzdłuż wektora od światła Pozostałe będą dalej zdegenerowane i zostaną wyrzucone z potoku renderowania Front/Back – cap tworzą front/back face’y przesunięta na odpowiednią odległość (clip plane/far plane/nieskończoność)
17
Shadow Volumes Ogólny algorytm oświetlania z cieniami
Wypełnij Z-buffer sceny Zaznacz miejsca na obrazie w których występuje cień poprzez rasteryzacje shadow volume’ów Użyj stencil buffera Korzystając z gotowej informacji wyrenderuj scenę (np.): Pierwszy pass – ambient light (zapełnia z-buffer, krok 1) Drugi pass – oświetlenie korzystając z informacji o cieniu Ewentualnie światła deferred przycięte volume’ami, bądź odczytujące wartość cienia z textury
18
Shadow Volumes Oświetlone płaszczyzny mają 0 w stencilu Depth Pass
Wyłącz pisanie do Z i koloru Ustaw back-face culling Ustaw stencil na inkrementacje przy depth pass Tylko volume’y przed obiektem Wyrenderuj shadow volume’y Tylko front-face’y brył Ustaw front-face culling Ustaw stencil na dekrementację przy depth pass Tylko back-face’y brył Oświetlone płaszczyzny mają 0 w stencilu
19
Shadow Volumes Depth Pass
Problematyczny jeśli kamera jest wewnątrz bryły cienia Błędny wynik cieniowania W tym wypadku najprostszą metodą jest przełączyć się na Depth Fail
20
Shadow Volumes Oświetlone płaszczyzny mają 0 w stencilu Depth Fail
Wyłącz pisanie do Z i koloru Ustaw front-face culling Ustaw stencil na inkrementacje przy depth fail Tylko volume’y za obiektem Wyrenderuj shadow volume’y Tylko back-face’y brył Ustaw back-face culling Ustaw stencil na dekrementację przy depth fail Tylko front-face’y brył Oświetlone płaszczyzny mają 0 w stencilu
21
Shadow Volumes Wymaga back-cap’owania bryły Depth Fail
Ze względu na rasteryzację uznawany za wolniejszy W zamian za brak problemów wewnątrz bryły Wymaga back-cap’owania bryły Inaczej cień nie zostanie znaleziony tam gdzie punkty bryły odchodzą do nieskończoności
22
Shadow Mapping Shadow mapping Konceptualnie cieniowanie traktujemy jako problem widoczności Punkt znajdujący się w cieniu Światło nie widzi punktu Oko widzi punkt Punkt znajdujący się w świetle Światło widzi punkt
23
Shadow Mapping Metoda w pełni w przestrzeni obrazu
Opiera się na porównawczym teście widoczności Widok światła jest renderowany do textury głębi (shadow map) Scena jest renderowana normalnie z punktu widzenia oka Dla każdego punktu wykonywane jest porównanie głębi punktu w przestrzeni światła między punktem renderowanym (przetransformowanym przez odpowiednią macierz) z punktem zapisanym w shadow mapie Metoda w pełni w przestrzeni obrazu Nie wymaga wiedzy o geometrii sceny
24
Shadow Mapping Opiera się na porównawczym teście widoczności
Widok światła jest renderowany do textury głębi (shadow map) Scena jest renderowana normalnie z punktu widzenia oka Dla każdego punktu wykonywane jest porównanie głębi punktu w przestrzeni światła między punktem renderowanym (przetransformowanym przez odpowiednią macierz) z punktem zapisanym w shadow mapie
25
Shadow Mapping Zalety Nie wymaga stencil buffera
W wielu przypadkach jest szybszy ze względu na rasteryzację oraz mniejszą liczbę operacji transformacji Umożliwia generowanie cieni z alpha-testowanych textur Umożliwia łatwą integrację miękkich cieni (penumbra shadows / soft shadows) Umożliwia tworzenie cieni transparentnych Ma uzasadnienie praktyczno wydajnościowe w scenach otwartych (oświetlenie słoneczne) Umożliwia łatwą integrację z projekcją textur
26
Shadow Mapping Wady Mniej dokładna od Shadow Volume’ów
Metoda rasteryzacji zamiast operacji geometrycznej Problem z aliasingiem ze względu na dyskretyzację shadow mapy Rozdzielczość Zajętość pamięci shadow mapą dla każdego światła Problem renderowania świateł o dużych kątach oświetlania Point light = kilka shadow map
27
Shadow Mapping Wady Mniej dokładna od Shadow Volume’ów
Metoda rasteryzacji zamiast operacji geometrycznej Problem z aliasingiem ze względu na dyskretyzację shadow mapy Rozdzielczość Zajętość pamięci shadow mapą dla każdego światła Problem renderowania świateł o dużych kątach oświetlania Point light = kilka shadow map
28
Shadow Mapping Wyrenderuj do textury z-buffer z punktu widzenia światła Shadow mapa używana później Zawiera rodzaj 2D funkcji oznaczającej odległość najbliższych do światła punktów W podstawowej wersji odległość Z Wyrenderuj scenę z punktu widzenia oka Dla każdego pixela Zdefiniuj pozycję XYZ pixela w przestrzeni światła Powinna się zgadzać z parametrami wg. Jakich została stworzona shadow mapa Dokonaj testu porównawczego
29
Shadow Mapping Test porównawczy Dwie wartości
A = wartość Z z shadow mapy (z punktu XY pixela w przestrzeni światła) B = wartość Z punktu XYZ pixela w przestrzeni światła Jeśli B > A to znaczy, że istnieje punkt obiektu będącego bliżej światła niż cieniowany pixel Pixel jest w cieniu Jeśli A ~~ B to znaczy, że pixel jest oświetlony
30
Shadow Mapping B > A depth map image plane depth map Z = A
light source eye position eye view image plane, a.k.a. the frame buffer fragment’s light Z = B
31
Shadow Mapping B ~A depth map image plane depth map Z = A light source
eye position eye view image plane, a.k.a. the frame buffer fragment’s light Z = B
32
Shadow Mapping Precyzja shadow mapy może się różnić od precyzji bufora, do którego generujemy cień Dochodzi do pomyłek w szacowaniu Artefaktów Widocznego aliasingu Pixelozy na krawędzi cienia
33
Shadow Mapping Copyright by nvidia
34
Shadow Mapping
35
Shadow Mapping
36
Shadow Mapping Shadow bias Problem wynikły z dyskretyzacji
Błędne samo-cieniowanie płaszczyzn Objawia się tzw. Shadow ackne tworząc efekt Moire’a Zapisywaną głębie do shadow mapy należy przesunąć o ‘małą’ wartość Na tyle dużą by uniknąć błedów Na tyle małą, żeby cień nie odszedł za daleko od obiektu Można dobrać ręcznie Istnieją algorytmy, które dobierają ją optymalnie w czasie rzeczywistym względem danego pixela
37
Shadow Mapping Bias Bias
38
Shadow Mapping
39
Shadow Mapping Shadow mapa
Musi być generowana z każdą zmiana światła Musi być generowana z każda zmianą obiektów rzucających cień W zależności od algorytmu może być niezależna od ruchu oka Problem doboru projekcji przy konstrukcji macierzy światła Problem doboru shadow casterów oraz frustum Problem undersamplingu Problem filtrowania
40
Shadow Mapping Problem doboru projekcji przy konstrukcji macierzy światła Dla świateł punktowych bądź typu spot używamy projekcji perspektywicznej szerokiej wg kąta oświetlenia światła Efektywnie do 90* Dla świateł szerszych można rozważyć projekcje Point light = 6 * projekcja 90 = cubemap Ewentualnie możliwe projekcje wrap : sphere mapping, paraboloid mapping Dla świateł kierunkowych (słońce) używamy zaawansowanych projekcji Ortogonalna Projekcje wrapujące ze względu na zwiększenie jakości
41
Shadow Mapping Dobór obiektów
Obiekty, które będą wyrenderowane do shadow mapy Są oznaczone jako shadow casting Np. ze względu na wielkość (automatycznie odrzucamy zbyt małe obiekty których wielkość na shadow mapie będzie mniejsza niż n pixeli – w szczególności <1) Znajdują się w light frustum wyznaczonym Przez macierz światła Przyciętym na far przez frustum oka Przyciętym na near na pierwszy shadow castujący obiekt
42
Shadow Mapping Wyznaczenie near plane
W zależności od sytuacji możemy wybrać near plane tuż przy świetle Może mieć dramatyczny efekt w skomplikowanych scenach Np. teren podczas gdy słońce jest nisko Możemy odrzucać obiekty po funkcji wielkości bounding boxów oraz kąta padania światła Specyficzne sytuacje Możemy zrzutować wierzchołki bounding boxów wg macierzy światła i sprawdzić przecięcie z view frustrum Jęsli przecięcia nie będzie, oznacza to, że mamy pewność nie zobaczenia cieni przez oko
43
Shadow Mapping Problem undersamplingu
Występuje gdy w wyniku różnic perspektywy bądź projekcji wielkość potencjalnego pixela shadow mapy jest mniejsza niż pixela płaszczyzny na która generujemy cień d > di ds * rs / ri – perspektywa cosb/cosa - projekcja
44
Shadow Mapping Undersmapling rozwiązywany
Zwiększanie rozdzielczości shadow mapy Mało wydajne na pixel (duże marnotrawstwo) Zmiany projekcji wymuszające większą rozdzielczość w bardziej potrzebnych miejscach Trapezoidal mapping Perspective mapping Podział frustrum oka na części obsługiwane przez różne shadow mapy o różnej charakterystyce (dalsze mniejsza rozdzielczość) Podział frustrum światła wg podziału frustrum oka Podział ze względu na optymalizacje rozdzielczości analitycznej shadow mapy Parametryzowalne przez ilosc podzialow jak I rozdzielczosc poszczegolnych shadow map
45
Shadow Mapping
46
Shadow Mapping Problem filtrowania
Shadow mapa nie może być filtrowana standardowo tak jak zwykłe tekstury Da to błędny wynik Ze względu na dyskretyzacje filtrowanie jest potrzebne Wykonuje się je przy użyciu filtra PCF Ręcznie Sprzętowo dla obszaru 2x2 pixele Ręcznie dla tworzenia miękkich cieni oraz penumbra shadows
47
Shadow Mapping
48
Shadow Mapping
49
Shadow Mapping
50
Shadow Mapping Problem filtrowania
Shadow mapping wykonujemy przy użyciu kilku sampli z shadow mapy Najpierw wyliczamy potem filtrujemy Wsparcie sprzętowe tex2Dproj, fetch4 itp. Zależne od sprzętu Filtrowanie poprawia wygląd, błędy aliasingu //Projected coords projCoords = oTex1.xy / oTex1.w; //Sample nearest 2x2 quad shadowMapVals.r = tex2D(ShadowSampler, projCoords ); shadowMapVals.g = tex2D(ShadowSampler, projCoords + texelOffsets[1].xy * g_vFullTexelOffset.xy ); shadowMapVals.b = tex2D(ShadowSampler, projCoords + texelOffsets[2].xy * g_vFullTexelOffset.xy ); shadowMapVals.a = tex2D(ShadowSampler, projCoords + texelOffsets[3].xy * g_vFullTexelOffset.xy ); //Evaluate shadowmap test on quad of shadow map texels inLight = ( dist < shadowMapVals); //Percent in light percentInLight = dot(inLight, float4(0.25, 0.25, 0.25, 0.25) );
51
Shadow Mapping Problem filtrowania
Poszukiwanie innych funkcji zapisu odległości, umożliwiających przefiltrowanie przed operacją porównywania Zastąpienie prostej funkcji zapisu głębi i porównania na funkcję separowalną i liniową ze względu na operacje filtrowania Niektóre sprawdzone rozwiązania VSM – Variance Shadow Mapping – bazują na zapisie wariancji i koowariancji, które podlegają filtrowaniu ESM – Exponential Shadow Maps – bazują na szeregach funkcji exponencialnych, podległych filtrowaniu
52
Podsumowanie For more information contact me hello@drobot.org
Slides will be available at Drobot.org
53
Questions ?
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.