1 Michał Drobot Technical Art Director Reality PumpShadowing Michał Drobot Technical Art Director Reality Pump
2 Plan wykładu Charakterystyka cienia Algorytmy cieni Shadow VolumesShadow Mapping
3 Cień Cień powstaje w wyniku przesłonięcie źródła światła przez okluderMiejsce, 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łaszczyznyCienie 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ącyKolorowe szkło, wosk, skóra, mat przeźroczyste
8 Cień Ocena charakterystyki źródła światłaPunktowe, obszarowe (wielkość, stosunek wielkości do obiektów)
9 Cień Umbra – obszar znajdujący się w cieniu całkowitymPenumbra – obszar znajdujący się w półcieniu Umbra Penumbra
10 Cień
11 Algorytmy Rzutowanie płaszczyzn Śledzenie promieniStencil shadows , Shadow Volumes Śledzenie promieni Raytracing Porównywanie głębi Z Shadow mapping
12 Shadow Volumes Potraktujmy cienie jako bryły przestrzenneCień 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’ówZrzutuj 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’aPrześ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 cieniamiWypeł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 PassWyłą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 PassProblematyczny 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 FailWyłą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 FailZe 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 obrazuOpiera 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ściWidok ś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 bufferaW 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’ówMetoda 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’ówMetoda 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ściA = 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 = Alight 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 sourceeye 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 dyskretyzacjiBłę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 mapaMusi 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ówObiekty, 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 planeW 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 undersamplinguWystę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ązywanyZwię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 filtrowaniaShadow 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 filtrowaniaShadow 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 filtrowaniaPoszukiwanie 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 [email protected]Slides will be available at Drobot.org
53 Questions ?