GRK 4 dr Wojciech Palubicki
Uproszczony Potok Graficzny (Rendering) Model Matrix View Matrix Projection Matrix Viewport Transform Object Space World Space View Space Clip Space Screen Space
Projection Matrix View Space Clip Space
Potok graficzny Window space View Space Orthographic view Canonical view
Rzutowania Perspektywicznie rzutowanie Ortograficzne rzutowanie
Clipping Żeby zdecydować czy pociąć trójkąt musimy: Sprawdzić czy on przecina hiperpłaszczyznę Stworzyć nowy trójkąt(y)
Obliczenie punktów przecięcia Jak dwa punkty Ԧa i b są po różnych stronach hiperpłaszczyzny stwarzamy równanie krzywej która przez te punkty przechodzi: Ԧp t = Ԧa + t b Ԧa Podkładając te równanie pod nasze równanie hiperpłaszczyzny daje nam: n Ԧp Ԧq = 0 n Ԧa + t b Ԧa Ԧq = 0 t = n a+n q n (a b)
Stwarzanie nowych trójkątów Na podstawie dwóch punktów intersekcji możemy pociąć nasz trójkąt według naszej hiperpłaszczyzny w następujący sposób: Jak dwa wierzchołki są zewnątrz hiperpłaszczyzny dostajemy nowy trójkąt Jak jeden wierzchołek jest zewnątrz hiperpłaszczyzny dostajemy dwie nowe trójkąty
Culling Gdy jednak trójkąt leży poza bryłą widzenia usuwamy go całkowicie z dalszych obliczeń Testowanie wierzchołków jest ale jednak kosztowne
Bryły brzegowe (bounding volumes) Często kule są używane jako bryły brzegowe Jak płaszczyzna jest dana przez Ԧp Ԧa n = 0 i kula ma środek Ԧc i promień r, wtedy sprawdzamy nierówność Ԧc a n > r n n Ԧa Ԧc r
Backface culling Gdy modelujemy obiekty geometryczne za pomocy trójkątów to normalna trójkątów jest ustawiona na zewnątrz obiektu Odrzucanie trójkątów których normalna jest skierowana od punktu widzenia nazywamy to backface culling (usuwanie powierzchni tylnych)
v n = v n cos(θ) Skierowany do przodu gdy θ > π 2, dlatego cos θ < 0 i v n < 0
Przykład Bez backface culling Backface culling
Algorytm malarza (painter s algorithm)
Częściowe pokrywanie wielokątów
Z-bufor
CPU GPU Vertex shader Fragment shader
Oświetlenie Bez oświetlenia Z oświetleniem
Oświetlenie Bez oświetlenia Z oświetleniem
Światło Zwykły materiał Część światła jest odbita Część wnika w materiał Metal Część światła jest odbita Część wnikająca jest absorbowana
Nie-metalowe materiały Światło które wnika w materiał Jest absorbowane Lub wychodzi z powrotem z materiału na zewnątrz
Podpowierzchniowe rozpraszanie (subsurface scattering) Dystans pomiędzy punktem wejścia i wyjścia promieni światła jest wyznaczony przez materiał
Modelowanie za pomocy BRDF BRDF to Bidirectional Reflectance Distribution Function lub "dwukierunkowa funkcja rozkładu odbicia" Modelujemy światło ignorując różnice dystansu punktu wejścia i wyjścia światła (lustrzane) (rozproszone)
obserwator obiekt bezpośrednie oświetlenie pośrednie oświetlenie źródło światła obiekt obiekt źródło światła
obserwator obiekt bezpośrednie oświetlenie pośrednie oświetlenie źródło światła obiekt obiekt źródło światła
obserwator obiekt bezpośrednie oświetlenie pośrednie oświetlenie źródło światła obiekt obiekt źródło światła
promienie światła Obserwacja dl płaszczyzna
promienie światła Obserwacja dl da płaszczyzna
promienie światła Obserwacja dl = da dl da płaszczyzna
promienie światła Obserwacja dl = da dl > da dl dl da da
promienie światła Obserwacja dl = da dl > da dl > da dl dl dl da da da
promienie światła Obserwacja dl = da dl > da dl > da dl = dl dl dl da da da da
Model Phonga odbicia rozproszonego
Model Phonga odbicia rozproszonego
Model Phonga odbicia rozproszonego
Model Phonga odbicia rozproszonego
Model Phonga odbicia rozproszonego Model Phonga odbicia rozproszonego zależy od pozycji światła relatywnie do powierzchni D = I p k d max[cos θ, 0] Gdzie I p jest intensywność światła od punktowego źródła światła k d [0, 1] jest współczynnik rozproszonego światła θ jest kątem pomiędzy wektorem światła L i normalną powierzchni n max[cos θ, 0] jest używane żeby światło nie zostało odbite jak źródła światła znajduję się za powierzchnia
Model Phonga odbicia rozproszonego Model Phonga odbicia rozproszonego zależy od pozycji światła relatywnie do powierzchni D = I p k d max[cos θ, 0] Gdzie I p jest intensywność światła od punktowego źródła światła k d [0, 1] jest współczynnik rozproszonego światła θ jest kątem pomiędzy wektorem światła L i normalną powierzchni n max[cos θ, 0] jest używane żeby światło nie zostało odbite jak źródła światła znajduję się za powierzchnia
Model Phonga odbicia rozproszonego Model Phonga odbicia rozproszonego zależy od pozycji światła relatywnie do powierzchni D = I p k d max[cos θ, 0] Gdzie I p jest intensywność światła od punktowego źródła światła k d [0, 1] jest współczynnik rozproszonego światła θ jest kątem pomiędzy wektorem światła L i normalną powierzchni n Funkcja max[cos θ, 0] jest używana żeby światło nie zostało odbite wtedy gdy źródło światła znajduję się za powierzchnią
k d = 0.25 k d = 0.5 k d = 0.75 k d = 1
Definicja iloczynu skalarnego to: a b = a b cos(θ) Ale jak L i n są wektory jednostkowe to: L n = cos(θ) Czyli kosztowne obliczenie kosinusa da się zastąpić prostym iloczynem skalarnym D = I p k d max[l n, 0]
Definicja iloczynu skalarnego to: a b = a b cos(θ) Ale jak L i n są wektory jednostkowe to: L n = cos(θ) Czyli kosztowne obliczenie kosinusa da się zastąpić prostym iloczynem skalarnym D = I p k d max[l n, 0]
Odbicie lustrzane wpadające promienie odbite promienie
Odbicie lustrzane - wektory
Rzutowanie wektorów
Rzutowanie wektorów
Rzutowanie wektorów
Z definicji iloczynu skalarnego: a b = a b cos α = a b c a = b c c = a b b Gdy b jest wektorem jednostkowym to wtedy c = a b i c = a b b
Z definicji iloczynu skalarnego: a b = a b cos α = a b c = a b b Gdy b jest wektorem jednostkowym to wtedy c = a b i c = a b b c a
Z definicji iloczynu skalarnego: a b = a b cos α = a b c a = b c c = a b b Gdy b jest wektorem jednostkowym to wtedy c = a b i c = a b b
Z definicji iloczynu skalarnego: a b = a b cos α = a b c a = b c c = a b b Gdy b jest wektorem jednostkowym to wtedy c = a b i c = a b b
Z definicji iloczynu skalarnego: a b = a b cos α = a b c a = b c c = a b b Gdy b jest wektorem jednostkowym to wtedy c = a b i c = a b b
Odbicie geometryczne lustrzane - wektory Model Phonga odbicia geometrycznego lustrzanego jest S = I p k s cos n α = I p k s (V R) n Gdzie k s [0, 1] jest współczynnik geometryczny lustrzany n jest wykładnik geometryczny lustrzany α jest kątem pomiędzy R i V cos n (α) ustala ile światła odbija się
Odbicie geometryczne lustrzane - wektory Model Phonga odbicia geometrycznego lustrzanego jest S = I p k s cos n α = I p k s (V R) n Gdzie k s [0, 1] jest współczynnik geometryczny lustrzany n jest wykładnik geometryczny lustrzany α jest kątem pomiędzy R i V cos n (α) ustala ile światła odbija się
Odbicie geometryczne lustrzane - wektory Model Phonga odbicia geometrycznego lustrzanego jest S = I p k s cos n α = I p k s (V R) n Gdzie k s [0, 1] jest współczynnik geometryczny lustrzany n jest wykładnik geometryczny lustrzany α jest kątem pomiędzy R i V cos n (α) ustala ile światła odbija się
Wykładnik geometryczny lustrzany
n = 50 n = 20 n = 5 n = 1
Światło otoczenia Swiatlo otoczenia, to odbicie światła które nie przychodzi bezpośrednio od źródła światła Model Phonga jest modelem bezpośredniego oświetlenia, tzn. światło spada na wszystkie obiekty równo A = I a k a Gdzie I a jest intensywność światła i k a [0, 1] jest współczynnik otoczenia k a umożliwia dostarczać scenie odpowiedniego stopnia światła otoczenia, n.p. k a 1 dla jasnych scen a k a 0 dla ciemnych scen
k a = 0.25 k a = 0.5 k a = 0.75 k a = 1.0
Tłumienność (attenuation) Tłumienność jest utrata energii światła w przestrzeni W modelu Phonga tłumienność jest wyrażona przez współczynnik f att Fizyczne modele światła proponują f att ~ 1 d 2 Bo powierzchnia kuli to 4πr 2
Ale z powodu że model Phonga jest modelem bezpośredniego oświetlenia w praktyce zostaje za dużo z intensywności światła usunięte dlatego model Phonga używa f att = 1 ( d r )2 Gdzie r jest promieniem kuli otaczającą źródło światła która określa przestrzeń w której światło może być wysyłane
Składając wszystkie części modelu Phonga do jednego równania daje cały model odbicia światła Phonga I = I a k a + f att I p k d max[l n, 0] + f att I p k s (V R) n Dla więcej niż jednego źródła światła, odpowiednie komponenty modelu odbicia światła Phonga są obliczone dla każdego źródła i sumowane I = I a k a + σ m i=1 f att I p,i [k d max(l i n, 0) + k s (V R i ) n ]
Składając wszystkie części modelu Phonga do jednego równania daje cały model odbicia światła Phonga I = I a k a + f att I p k d max[l n, 0] + f att I p k s (V R) n Dla więcej niż jednego źródła światła, odpowiednie komponenty modelu odbicia światła Phonga są obliczone dla każdego źródła i sumowane I = I a k a + σ m i=1 f att I p,i [k d max(l i n, 0) + k s (V R i ) n ]
Intensywność światła i kolory RGB Skalujemy wektory kolorów v new = v I Na przykład: kolor czerwony v =(1, 0, 0) z 50% intensywnością to v new = (0.5, 0, 0)
Wynik światło otoczenia (ambient) światło rozproszone (diffuse) światło odbite geometryczne lustrzane (specular) = model odbicia światła Phonga
Metody cieniowania (shading) Model odbicia światła Phonga oblicza oświetlenie jednego punktu na powierzchni (zależnie od normalnej powierzchni) Żeby cały wielokąt oświetlić potrzebujemy metodę cieniowania tego wielokąta Podstawowe metody cieniowania: Płaskie cieniowanie (cieniowanie Lamberta) Cieniowanie Gourauda Cieniowanie Phonga
Metody cieniowania (shading) Model odbicia światła Phonga oblicza oświetlenie jednego punktu na powierzchni (zależnie od normalnej powierzchni) Żeby cały wielokąt oświetlić potrzebujemy metodę cieniowania tego wielokąta Podstawowe metody cieniowania: Płaskie cieniowanie (cieniowanie Lamberta) Cieniowanie Gourauda Cieniowanie Phonga
Metody cieniowania (shading) Model odbicia światła Phonga oblicza oświetlenie jednego punktu na powierzchni (zależnie od normalnej powierzchni) Żeby cały wielokąt oświetlić potrzebujemy metodę cieniowania tego wielokąta Podstawowe metody cieniowania: Płaskie cieniowanie (cieniowanie Lamberta) Cieniowanie Gourauda Cieniowanie Phonga
Cieniowanie płaskie Cieniowanie płaskie zakłada ze wszystkie piksele wielokąta są oświetlone równomiernie Model odbicia światła oblicza oświetlenie dla wszystkich pikseli
Pasmo Macha
Luminancja Pasmo Macha wrażenie faktycznie
Rozwiązanie: więcej wielokątów
Cieniowanie Gourauda Cieniowanie Gourauda oblicza oświetlenie dla wierzchołków wielokąta i następnie liniowo interpoluje wartości oświetlenia we wszystkich pikseli wielokąta IP obliczany przez uśrednianie IA i IB powierzchnia piksel
Uśrednianie intensywności Gdy I jest intensywność oświetlenia w danym punkcie P: I A,i+1 = I A,i ΔI A I B,i+1 = I B,i ΔI B I C,i+1 = I C,i ΔI C Gdzie I A = I 3 I 1 y 3 y 1, I B = I 3 I 2 y 3 y 2, I C = x B x A I B I A
Cieniowanie Gourauda
Cieniowanie Phonga W cieniowaniu Phonga (nie pomylić z modelem odbicia światła Phonga) interpolujemy wektory normalne wszystkich pikseli wielokąta IP obliczany przez model Phonga (na podstawie normalnej NP) powierzchnia piksel
Uśrednianie normalnych Gdy n jest wektor normalny w danym punkcie: n A,i+1 = n A,i Δn A n B,i+1 = n B,i Δn B n C,i+1 = n C,i Δn C Gdzie n A = n 3 n 1 y 3 y 1, n B = n 3 n 2 y 3 y 2, n C = n B n A x B x A
OpenGL Interpolacja normalnych
płaskie Gouraud Phong