Animowana grafika 3D
Transkrypt
Animowana grafika 3D
Przetwarzanie obrazu i dźwięku Opracowanie: J. Kęsik [email protected] Oświetlenie „Fiat lux! Et facta est lux” (Rdz 1, 3) Wtedy Bóg rzekł: Niechaj się stanie światłość! I stała się światłość. Powierzchnia obiektu 3D jest renderowana jako czarna jeżeli nie jest oświetlana żadnym światłem (wyjątkiem są obiekty samoświecące) Animowana grafika 3D - J. Kęsik Oświetlenie Generowanie oświetlenia i cieni obiektów 3D na scenie jest zadaniem skomplikowanym i wiąże się wieloma zasadami i prawami – nie koniecznie odpowiadającymi fizycznemu modelowi opisu zachowania fal świetlnych Generalną zasadą jest dążenie do uzyskania „odpowiedniego wyglądu” w sensownym* czasie renderowania *”sensowny” czas jest zależny od przeznaczenia renderingu Animowana grafika 3D - J. Kęsik Oświetlenie Powszechnie stosowaną metodą jest rozwiązywanie zadania znajdowania oświetlenia na zasadzie: obiekt JEST OŚWIETLANY przez źródła światła Dla każdego obiektu (obszaru obiektu) obliczana jest suma oświetlenia pochodząca od różnych źródeł światła. W zależności od ilości i rodzaju źródeł światła oraz możliwości karty graficznej obliczenie to wykonywane jest w jednym lub kilku przebiegach Animowana grafika 3D - J. Kęsik Model oświetlenia Stosowany powszechnie w grafice 3D model oświetlenia uwzględnia kilka możliwych sytuacji • Obiekt nie jest oświetlany, świeci własnym światłem • Obiekt jest oświetlony światłem jednakowo rozproszonym - bezkierunkowym (ambient light) • Obiekt odbija kierunkowe światło • W sposób idealnie rozproszony • Uzyskując połysk Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Opisuje wynikowe natężenie oświetlenia obiektu w danym punkcie – I Natężenie to jest najczęściej mnożone przez wartość koloru w tym punkcie (kolor obiektu lub punktu tekstury) aby uzyskać wartość koloru piksela na ekranie Jeżeli światło padające nie jest białe, intensywność zapisywana jest za pomocą koloru RGB a równanie oświetlenia rozbijane na 3 składowe Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia W najprostszym przypadku – samoświecenia, równanie to sprowadza się do 𝐼 = 𝑘𝑖 Gdzie ki jest współczynnikiem intensywności świecenia obiektu Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Tak prosta wersja nie daje możliwości pokazania głębi obiektu. Wszystkie piksele wewnętrzne świecą z jednakową intensywnością powodując jego optyczne spłaszczenie Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Oświetlenie bezkierunkowe jest opisywane zbliżoną wersją równania 𝐼 = 𝐼𝑎 𝑘𝑎 Gdzie Ia jest współczynnikiem natężenia światła bezkierunkowego a ka jest współczynnikiem odbicia światła otoczenia przez obiekt Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Również w tym przypadku nie ma możliwości ukazania głębi obiektu Światło otoczenia symuluje sytuację jednolitego oświetlenia sceny światłem powstałym z dużej ilości wielokrotnych odbić. Umożliwia uwidocznienie wszystkich obiektów sceny, nawet tych nie oświetlanych bezpośrednio. Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Odbicie rozproszone (dispersed) zakłada sytuację istnienia światła punktowego, wysyłającego jednakowe promienie we wszystkich kierunkach Oświetlany obiekt ma powierzchnię idealnie matową. Padające światło odbija się równomiernie we wszystkich kierunkach Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Jasność powierzchni w odbiciu rozproszonym (Lambertowskim) zależy od kąta między dwoma wektorami: • Wektorem jednostkowym L określającym kierunek od punktu na obiekcie do źródła światła • Wektorem normalnym N (jednostkowym) powierzchni obiektu w tym punkcie Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Odbicie rozproszone Zależy od kąta padania światła Nie zależy od kąta obserwacji powierzchni Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Odbicie rozproszone Podlega Lambertowskiemu kosinusowemu prawu Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Odbicie rozproszone jest więc opisywane równaniem 𝐼 = 𝐼𝑝 𝑘𝑑 𝑁 ∙ 𝐿 = 𝐼𝑝 𝑘𝑑 cos 𝜃 Gdzie Ip jest intensywnością światła punktowego a kd jest współczynnikiem intensywności odbicia rozproszonego obiektu Kąt Θ musi zawierać się w zakresie <0,90) stopni, dla wszystkich innych kątów Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Odbicie rozproszone Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Wariantem światła punktowego jest światło kierunkowe, zakładające że źródło światła znajduje się w znacznej odległości od obiektów. Wtedy można założyć, że dla wszystkich obszarów o tej samej wartości (skierowaniu) N, wartość kąta 𝑁∙𝐿 jest jednakowa Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Tłumienie światła zakłada że obiekty znajdujące się w różnej odległości od źródła światła są oświetlane z różną intensywnością Zgodnie z teorią rozchodzenia się fali kulistej, moc światła powinna maleć wraz z kwadratem odległości 𝑓𝑑𝑎𝑚𝑝 = 1 𝑑𝑙 Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia W grafice 3D wprowadzony został jednak bardziej „odpowiedni” współczynnik tłumienia 𝑓𝑑𝑎𝑚𝑝 = 1 𝑐1 +𝑐2 𝑑𝑙 +𝑐3 𝑑𝑙 2 przy założeniu, że nie może on przekroczyć wartości 1. Stałe c1, c2, c3 są określane empirycznie przez projektanta Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Równanie oświetlenia uwzględniające dotychczasowe rozważania, miałoby postać 𝐼 = 𝐼𝑎 𝑘𝑎 + 𝑓𝑑𝑎𝑚𝑝 𝐼𝑝 𝑘𝑑 cos 𝜃 A w przypadku wielu źródeł światła 𝑛 𝐼 = 𝐼𝑎 𝑘𝑎 + 𝑓𝑑𝑎𝑚𝑝𝑖 𝐼𝑝𝑖 𝑘𝑑𝑖 cos 𝜃𝑖 𝑖=1 Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Jeszcze bardziej ogólny wzór uwzględnia możliwość padania światła kolorowego (RGB) na powierzchnię o różnych współczynnikach odbicia (ambient i dispersed) dla każdej składowej Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Odbicie zwierciadlane (idealne) Przedstawia sytuację idealnie gładkiej powierzchni, od której odbija się padające na nią światło Kąt odbicia jest równy kątowi padania światła w stosunku do wektora normalnego Światło odbija się tylko pod kątem odbicia a jego kolor nie jest zależny od koloru powierzchni odbijającej Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Prawo Snella Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Odbicie zwierciadlane (idealne) Może zależeć od kąta padania światła Jest widoczne tylko przy obserwacji kierunku R Animowana grafika 3D - J. Kęsik z Model oświetlenia Równanie oświetlenia Odbicie zwierciadlane (nieidealne) Przedstawia bardziej rzeczywistą sytuację gdzie odblask jest widoczny także z innego kierunku niż kierunek odbicia światła Odblask maleje wraz ze wzrostem kąta α między kierunkiem obserwacji a kierunkiem odbicia Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Odbicie zwierciadlane (nieidealne) (specular) Może zależeć od kąta padania światła Jest zależne od kąta α między kierunkiem odbicia i kierunkiem obserwacji Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Odbicie zwierciadlane jest więc opisywane równaniem 𝐼 = 𝑓𝑑𝑎𝑚𝑝 𝐼𝑝 𝑊 𝜃 cos𝑛 ∝ Gdzie W(Θ) jest współczynnikiem intensywności odbicia zwierciadlanego, często ustalanym jako wartość stała <0,1> A n jest wykładnikiem odbicia, określającym „szerokość” rozbłysku – szybkość zanikania Animowana grafika 3D - J. Kęsik Model oświetlenia Odbicie zwierciadlane Źródło: http://pl.wikipedia.org/w/index.php?title=Plik:Phong_shading-balls.jpg&filetimestamp=201002231 n = 1, 5, 10, 20, 50, 100 Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Przybliżoną wartość wektora odbicia R można obliczyć ze wzoru 𝑅 = 2𝑁 𝑁 ∙ 𝐿 − 𝐿 Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Model uwzględniający wszystkie rodzaje oświetlenia został opracowany przez Phong Buoi-Tuonga w 1975r. można go zapisać wzorem 𝑛 𝑓𝑑𝑎𝑚𝑝𝑖 𝐼𝑝𝑖 𝑘𝑑𝑖 cos 𝜃𝑖 + 𝑊 𝜃𝑖 cos𝑛 ∝𝑖 𝐼 = 𝐼𝑎 𝑘𝑎 + 𝑖=1 Animowana grafika 3D - J. Kęsik Model oświetlenia Równanie oświetlenia Phonga Źródło: http://wazniak.mimuw.edu.pl/images/3/3d/GKIW_M8_Slajd_08.pn Animowana grafika 3D - J. Kęsik Cieniowanie Korzystając z modelu Phonga, można wyznaczyć kolor (intensywność oświetlenia) w dowolnym punkcie obiektu Obliczanie oświetlenia dla każdego punktu nie jest jednak możliwe ze względu na • ograniczenia sprzętowe • ograniczenia w dokładności modelu obiektu Animowana grafika 3D - J. Kęsik Cieniowanie Najprostszą metodą wyznaczania oświetlenia obiektu (cieniowania) jest cieniowanie płaskie Każdy wielokąt siatki opisującej obiekt jest cieniowany stałą wartością intensywności oświetlenia. Intensywność ta jest wyznaczana dla wektora normalnego wielokąta Animowana grafika 3D - J. Kęsik Cieniowanie Najprostszą metodą wyznaczania oświetlenia obiektu (cieniowania) jest cieniowanie płaskie Animowana grafika 3D - J. Kęsik Cieniowanie Podstawową wadą tego cieniowania jest występowanie ostrych przejść koloru na krawędziach wielokątów opisujących obiekt. Cieniowanie to będzie poprawne tylko wtedy gdy krawędzie wielokątów siatki odpowiadają krawędziom rzeczywistym obiektu W innych przypadkach konieczna jest interpolacja – wygładzenie przejść kolorów między wielokątami Animowana grafika 3D - J. Kęsik Cieniowanie Cieniowanie Gouraud W tej metodzie brane są pod uwagę wektory normalne wierzchołków wielokąta (trójkąta) Dla każdego wierzchołka obliczany jest kolor oświetlenia. Kolory pikseli wypełnienia trójkąta obliczane są na podstawie interpolacji biliniowej kolorów wierzchołków Animowana grafika 3D - J. Kęsik Cieniowanie Cieniowanie Gouraud Animowana grafika 3D - J. Kęsik Cieniowanie Cieniowanie Gouraud W przypadku braku wektora normalnego wierzchołka, jest on wyznaczany z uśrednienia wektorów normalnych wszystkich ścian do których należy dany wierzchołek Animowana grafika 3D - J. Kęsik Cieniowanie Cieniowanie Gouraud Animowana grafika 3D - J. Kęsik Cieniowanie Cieniowanie Gouraud Zaletą tego cieniowania jest zniwelowanie efektu ostrego przejścia między krawędziami wielokątów Wadą jest • zanik ostrych krawędzi na powierzchni obiektu Animowana grafika 3D - J. Kęsik Cieniowanie Cieniowanie Gouraud Zaletą tego cieniowania jest zniwelowanie efektu ostrego przejścia między krawędziami wielokątów Wadą jest • zła realizacja odbić zwierciadlanych • • • Ignorowanie rozbłysku wewnątrz trójkąta „trójkątny” kształt rozbłysku Skokowa zmiana rozbłysku podczas animacji Animowana grafika 3D - J. Kęsik Cieniowanie Cieniowanie Gouraud Animowana grafika 3D - J. Kęsik Cieniowanie Cieniowanie Phong W tej metodzie brane są pod uwagę wektory normalne wierzchołków wielokąta (trójkąta) Wektory te służą jako wektory wyjściowe do określenia (interpolacji) wektorów normalnych dla każdego piksela w trójkącie W każdym z pikseli obliczana jest jasność według określonego modelu (np. Phong) Animowana grafika 3D - J. Kęsik Cieniowanie Cieniowanie Phong Animowana grafika 3D - J. Kęsik Cieniowanie Cieniowanie Phong Animowana grafika 3D - J. Kęsik Cieniowanie Cieniowanie Phong Zaletą tego cieniowania jest uzyskiwanie gładkich przejść oraz możliwość generowania odbić mniejszych od wielkości wielokąta Wadą jest • Znacznie większa złożoność obliczeniowa • • Wyznaczanie wektora normalnego 3x bardziej złożone Obliczanie jasności w każdym pikselu Animowana grafika 3D - J. Kęsik Cieniowanie - porównanie Animowana grafika 3D - J. Kęsik Śledzenie promieni Ray tracing jest techniką renderowania będącą obecnie podstawą wielu algorytmów fotorealistycznych Po raz pierwszy wykorzystana w 1980 przez Turnera Whitteda Dzięki ray tracingowi można uzyskać szereg efektów oświetlenia (dokładne cienie i odbicia, przenikania przez powierzchnie przezroczyste, również ugięte) Znaczący wzrost jakości wizualnej za cenę poważnego zwielokrotnienia obliczeń Animowana grafika 3D - J. Kęsik Śledzenie promieni Podstawowy pomysł to symulacja przebiegu promienia światła od źródła światła do obserwatora Animowana grafika 3D - J. Kęsik Śledzenie promieni Dwa możliwe podejścia: Wyznaczanie promieni wychodzących ze źródła światła Nieefektywne obliczeniowo Animowana grafika 3D - J. Kęsik Śledzenie promieni Dwa możliwe podejścia: Wyznaczanie promieni docierających do obserwatora Właściwy Ray-tracing Animowana grafika 3D - J. Kęsik Śledzenie promieni Wyznaczanie pojedynczego promienia wymaga określenia czy ten promień przecina się z którymkolwiek z prymitywów (miliony) Podstawowy problem to stworzenie algorytmu, nie tylko umożliwiającego takie obliczenia ale wykonującego je w sposób najbardziej efektywny Śledzenie pojedynczego promienia jest skomplikowanym zadaniem a wykonanie obrazu wymaga prześledzenia ogromnej ilości promieni Animowana grafika 3D - J. Kęsik Śledzenie promieni Real time? Quake3 : Raytraced (2005) 20 klatek 512x512 na sek. 36 GHz klaster 20 AMD 1800XP http://graphics.cs.unisb.de/~sidapohl/egoshooter/ W chwili obecnej pierwsze karty graficzne z potokami raytrace Animowana grafika 3D - J. Kęsik Gry z raytracingiem do końca roku… Śledzenie promieni Promień jest elementem geometrycznym, posiadającym punkt początkowy i kierunek Zapis promienia w 3D wymaga dwóch wektorów 3 wartościowych (3D) Wektor 3D źródła – origin Wektor 3D kierunku – direction (znormalizowany) class Ray { Vector3 Origin; Vector3 Direction; }; Animowana grafika 3D - J. Kęsik Śledzenie promieni Algorytm śledzenia rozpoczynamy „wypuszczając” promienie z kamery w kierunku sceny, każdy promień odpowiada jednemu pikselowi obrazu Kolejność generowania pikseli obrazu nie ma większego znaczenia. Dla każdego piksela obrazu wyznaczany jest promień podstawowy (primary ray) Animowana grafika 3D - J. Kęsik Śledzenie promieni Źródłem promienia jest pozycja kamery Kierunek wyznaczany jest wg. zasady • Wyznaczenie wektorów kierunków dla 4 rogów obrazu • Aproksymacja kierunku promienia na podstawie położenia piksela Animowana grafika 3D - J. Kęsik Śledzenie promieni Promień podstawowy jest następnie testowany na okoliczność przecięć z prymitywami sceny • Jeżeli promień nie przecina się z niczym to piksel przyjmuje kolor „tła” • W innym przypadku musimy wyznaczyć pierwszy z prymitywów, w który trafił promień (najbliższy kamerze) W miejscu przecięcia musimy wyznaczyć: pozycję, kolor, normalną, współrzędne tekstury i in. (interpolacja danych werteksów) Animowana grafika 3D - J. Kęsik Śledzenie promieni Dane punktu przecięcia zapisane następująco: class Intersection { Vector3 Position; Vector3 Normal; Vector2 TexCoord; Material *Mat; float Distance; // przecięcia }; odległość mogłyby od źródła Animowana grafika 3D - J. Kęsik być do Śledzenie promieni Mając pozycję przecięcia możemy w tym miejscu obiektu wyznaczyć oświetlenie według dowolnego modelu (np. Phong) Efektem będzie uzyskanie koloru, jaki przyjmie piksel obrazu (w najprostszym przypadku kolor obiektu w punkcie przecięcia) Zakończenie algorytmu na tym etapie skutkowałoby obrazem nie lepszym (a czasem gorszym) niż uzyskanym tradycyjnymi metodami Animowana grafika 3D - J. Kęsik Śledzenie promieni Śledzenie promieni zakończone na pierwszym etapie (model oświetlenia ambient) Animowana grafika 3D - J. Kęsik Śledzenie promieni Wiele algorytmów śledzenia promieni przewiduje kontynuację poprzez wyznaczenie nowych promieni z punktu przecięcia promienia podstawowego Istnieje kilka typów promieni generowanych z miejsca przecięcia. Wszystkie te promienie określane są mianem promieni drugorzędnych (secondary rays) Animowana grafika 3D - J. Kęsik Shadow rays Shadow rays odpowiadają za określenie, czy miejsce przecięcia jest oświetlone konkretnym światłem. Za ich pomocą można w stosunkowo łatwy sposób wyznaczyć cienie. Chcąc tego dokonać, wyznaczamy z punktu przecięcia promienie do każdego źródła światła znajdującego się po właściwej stronie prymitywu (kąt mniejszy niż 90 stopni do normalnej) Animowana grafika 3D - J. Kęsik Shadow rays Światło z danego źródła będzie wzięte pod uwagę tylko wtedy, gdy promień do tego źródła nie przecina żadnego innego prymitywu. W takim przypadku w równaniu oświetlenia np. Phonga współczynniki intensywności diffuse i specular światła zacienionego przyjmą wartość = 0 Animowana grafika 3D - J. Kęsik Shadow rays W obliczeniu oświetlenia nie jest brane pod uwagę źródło 5 a źródła 1 i 4 mają wyzerowane współczynniki. 4 2 3 1 5 Animowana grafika 3D - J. Kęsik Shadow rays Shadow rays nie potrzebują znać parametrów punktu przecięcia z prymitywem, wystarczy parametr binarny wystąpienia przecięcia Dzięki temu generowane są nieco szybciej niż standardowe promienie Dobrą praktyką przy generowaniu shadow rays jest przesunięcie źródła promienia o nieznaczną odległość w kierunku normalnej prymitywu. Unika się w ten sposób potencjalnego błędu zaokrągleń mogącego spowodować wykrycie przecięcia własnej Animowana grafika 3D - J. Kęsik powierzchni Shadow rays Shadow rays Animowana grafika 3D - J. Kęsik Reflection rays Kolejną możliwością raytracingu jest generowanie dokładnych odbić od skomplikowanych powierzchni. Gdy promień podstawowy trafia w powierzchnię lustrzaną, tworzony jest promień odbicia. Promień ten, podobnie jak promień główny testowany jest na okoliczność przecięcia z obiektami sceny. Animowana grafika 3D - J. Kęsik Reflection rays Promień odbicia wyznaczany jest na podstawie promienia głównego i wektora normalnego n d r r d 2d n n Animowana grafika 3D - J. Kęsik Reflection rays Gdy promień odbicia natrafi na obiekt, możliwe są dwa przypadki: 1. Powierzchnia obiektu nie jest lustrzana. 2. Powierzchnia obiektu jest lustrzana W 1 przypadku obliczany jest kolor w punkcie przecięcia (z uwzględnieniem shadow rays) W przypadku 2 rekursywnie generowany jest następny promień odbicia… W przypadku wielu luster istnieje możliwość wystąpienia pętli nieskończonej. Zapobiega się temu przez ograniczenie głębokości rekursji do np. 10 poziomów Animowana grafika 3D - J. Kęsik Reflection rays Powierzchnia obiektu jest lustrzana Animowana grafika 3D - J. Kęsik Reflection rays W rzeczywistości rzadko mamy do czynienia z idealnymi lustrami Prawdziwe lustro odbije maksymalnie 95-98% światła padającego. Niektóre powierzchnie mogą powodować odbarwienia odbitego światła Taką sytuację symuluje się przez przemnażanie koloru światła padającego przez kolor lustra przy odbiciu od niego. Animowana grafika 3D - J. Kęsik Reflection rays Możemy również symulować odbicia rozproszone. W takim przypadku dla punktu przecięcia obliczane jest pełne równanie oświetlenia, zawierające składnik rozproszenia jak i odbicia (należy uwzględnić również shadow rays dla tego punktu) a następnie dodawana wartość pochodząca od promienia odbicia (z wagami odpowiadającymi zachowaniu energii) Animowana grafika 3D - J. Kęsik Transmission rays Ray tracing pozwala również na dokładne renderowanie ugięcia światła przy przechodzeniu przez przezroczyste powierzchnie. Gdy promień pada na powierzchnię przezroczystą, generowany jest nowy promień przenikania i analizowany dalej podobnie jak promień odbicia Animowana grafika 3D - J. Kęsik Transmission rays Zgodnie z prawem Snella promień przenikający z jednego środowiska do drugiego, będzie odchylony od normalnej pod kątem wynikającym ze wzoru (n1sinθ1=n2sinθ2), gdzie n1 i n2 są współczynnikami przenikania dla obu środowisk r d 2d n n n1 z d d n n n2 2 t z 1 z n n d r θ1 n1 z n2 θ2 t Animowana grafika 3D - J. Kęsik Transmission rays Gdy światło przemieszczające się w środowisku o wysokim współczynniku przenikania trafia na materiał o niskim współczynniku przenikania pod ostrym kątem, następuje całkowite wewnętrzne odbicie. W takim przypadku nie jest generowany promień przenikania n d r θ1 n1 z n2 Animowana grafika 3D - J. Kęsik Transmission rays Odbicie całkowite można wykryć sprawdzając czy długość wektora z jest większa od 1. W tym przypadku wektora t nie można obliczyć (ujemna wartość pierwiastka) n1 z d d n n n2 2 t z 1 z n Animowana grafika 3D - J. Kęsik Transmission rays Gdy światło trafia na powierzchnię przezroczystą, często oprócz przenikania widzimy odbicie. Dlatego natrafienie na taką powierzchnię powoduje wygenerowanie dwóch promieni (odbicia i przenikania), przeanalizowanie ich i połączenie uzyskanych kolorów. Wynikiem każdego z promieni jest kolor jaki „widzi” dany promień. W przypadku promieni głównych jest to kolor ostateczny piksela. W przypadku promieni pośrednich ich kolor jest połączony w wynikowy kolor piksela Animowana grafika 3D - J. Kęsik Transmission rays Promień odbicia N Promień główny Promień przenikania Animowana grafika 3D - J. Kęsik Transmission rays Równania Fresnela n2 (n d) n1 (n t ) określają proporcje między rhor n (n d) n (n t ) 2 1 światłem przenikającym (ft) a odbitym (fr). Uwzględniają równania dla n1 (n d) n2 (n t ) r światła spolaryzowanego wert n (n d) n (n t ) 1 2 horyzontalnie i wertykalnie (najczęściej uśrednione do 1 2 jednej wartości) 2 fr (rhor rwert ) 2 f t 1 .0 f r Animowana grafika 3D - J. Kęsik Recursive Ray Tracing Klasyczny algorytm raytracingu uwzględnia cienie, odbicia, przenikania i nietypowe materiały Pojedynczy promień główny może wygenerować znaczną ilość promieni pośrednich w zależności od ilości źródeł światła i ułożenia obiektów Promienie te układają się w strukturę drzewiastą Animowana grafika 3D - J. Kęsik Recursive Ray Tracing Przykład itd. Animowana grafika 3D - J. Kęsik Recursive Ray Tracing Przykład Animowana grafika 3D - J. Kęsik Ray Tracing Obrazy wyrenderowane klasyczną metodą raytracingu mogą zawierać cienie, dokładne odbicia pomiędzy obiektami i efekty przezroczystości Wadą jest wrażenie zbytniej ostrości uzyskanego obrazu (aliasing) z powodu ograniczenia do punktowych źródeł światła i idealnego odbicia od powierzchni. Dzieje się tak z powodu wykorzystywania pojedynczych promieni przy określaniu cieni, odbić i przenikań Animowana grafika 3D - J. Kęsik Stohastic Ray Tracing Pewne wygładzenie krawędzi można uzyskać zaburzając kierunki promieni głównych tak aby kierowały się losowo w ramach obszaru zajmowanego przez piksel Animowana grafika 3D - J. Kęsik Distribution Ray Tracing Rozproszone śledzenie promieni jest rozszerzeniem klasycznego podejścia – zakłada wyprowadzenie w miejsce pojedynczego promienia wiązki kilku(nastu) promieni Jest to technika pozwalająca uzyskać bardzo naturalne efekty za cenę kolejnego, znacznego zwielokrotnienia obliczeń (setki a nawet tysiące promieni dla jednego piksela) Animowana grafika 3D - J. Kęsik Distribution Ray Tracing Za pomocą takiego podejścia można uzyskać: • Antyaliasing – przy stosowaniu wiązki dla promieni głównych (dla pojedynczego piksela) • Uwzględnienie powierzchni emitującej światło – rozproszone cienie • Rozmyte odbicia i przenikania • Rozmycie zbliżeniowe (focus blur) • Motion Blur Animowana grafika 3D - J. Kęsik Distribution Ray Tracing Przykład itd. itd. Distribution Ray Tracing Animowana grafika 3D - J. Kęsik Distribution Ray Tracing Animowana grafika 3D - J. Kęsik Distribution Ray Tracing Animowana grafika 3D - J. Kęsik Przecięcia promieni Podstawowym elementem algorytmu raytracingu jest system określający w co trafił promień Typowa scena może zawierać miliony prymitywów Przymitywy te mogą być po prostu trójkątami albo być złożone – w takim przypadku następuje teselacja (podzielenie siatki na trojkąty) Animowana grafika 3D - J. Kęsik Przecięcia promieni Scena jest zbudowana z pewnej liczby obiektów – składających się z prymitywów i/lub innych obiektów Aby obiekt był renderowalny, potrzebujemy procedury określającej przecięcie tego obiektu z promieniem. Dla różnych rodzajów obiektów można zdefiniowac inne procedury wyznaczania przecięcia. Animowana grafika 3D - J. Kęsik Przecięcia promieni Promień - sfera Promień ma źródło w punkcie p i kierunek u a sfera ma środek w punkcie c i promień r p u c r Animowana grafika 3D - J. Kęsik Przecięcia promieni Promień - sfera Promień jest zbiorem punktów p+αu, dla α≥0 Znajdujemy punkt q, który jest punktem na linii promienia leżącym najbliżej środka sfery Linia qc musi być prostopadła do wektora u, czyli (q-c)·u=0, lub (p+αu-c)·u=0 Z tego możemy obliczyć: α=-(p-c)·u, takie że q=p-((p-c)·u)u q p u c Animowana grafika 3D - J. Kęsik Przecięcia promieni Promień - sfera Następnie sprawdzamy czy q znajduje się wewnątrz sfery: |q-c|≤r Gdy q jest poza sferą promień jej nie przecina Gdy q jest w środku sfery – poszukujemy punktu przecięcia z powierzchnią sfery Promien przebija powierzchnie w 2 punktach q1 i q2: q2 q1 p u q c Animowana grafika 3D - J. Kęsik Przecięcia promieni Promień - sfera Pozycje przebić: q1=p+(α-a)u) q2=p+(α+a)u) gdzie a=sqrt(r2-|q-c|2) Dla α-a≥0, promień przebija sferę w punkcie q1, dla α-a<0 q1 znajduje się bliżej niż źródło promienia (jest ono wewnątrz sfery) q2 q1 Wtedy wybieramy q2 q p u c Animowana grafika 3D - J. Kęsik Przecięcia promieni Promień – powierzchnia płaska Powierzchnia taka jest zdefiniowana przez wektor normalny n i odległość d od środka układu wsp. Testując przecięcie obliczamy punkt q przecięcia promienia z płaszczyzną, by q leżało na płaszczyźnie: d=q·n=p·n+αu·n więc α=(d-p·n)/(u·n) Jeżeli (u·n)=0 to promień jest równoległy do płaszczyzny Dla α≥0 promień przecina płaszczyznę Animowana grafika 3D - J. Kęsik Przecięcia promieni Promień – trójkąt Sprawdzenie przecięcia polega najpierw na sprawdzeniu przecięcia z płaszczyzną, na której leży trójkąt (można również sprawdzić kierunek trójkąta – backface culling). Gdy punkt q przecięcia promienia z płaszczyzną, musimy sprawdzić czy leży on wewnątrz trójkąta Animowana grafika 3D - J. Kęsik Przecięcia promieni Promień – trójkąt p u v0 v2 •q v1 Animowana grafika 3D - J. Kęsik Przecięcia promieni Promień – trójkąt Jedna z prostrzych obliczeniowo metod uwzględnia wsp. barycentryczne punktu q v2 q' =q-v0 e1=v1-v0 β e2=v2-v0 α=(q'·e2)/(e1·e2) v0 α β=(q'·e1)/(e1·e2) q v1 Gdy α<0, β<0 lub α+β >1 to punkt q znajduje Animowana grafika 3D - J. Kęsik się poza trójkątem Przecięcia promieni Promień – trójkąt Jedna z prostrzych obliczeniowo metod uwzględnia wsp. barycentryczne punktu q v2 q' =q-v0 e1=v1-v0 β e2=v2-v0 α=(q'·e2)/(e1·e2) v0 α β=(q'·e1)/(e1·e2) q v1 Gdy α<0, β<0 lub α+β >1 to punkt q znajduje Animowana grafika 3D - J. Kęsik się poza trójkątem Metody akceleracji Przykład • Obraz 1280x1024 - przeciętnie 10 promieni/piksel • 1000 obiektów różnych typów • 3 poziomy rekurencji ~39321600000 testów przecięć Dla prędkości 100 000 testów/s rendering potrwa ponad 100 dni! Akceleracja jest konieczna Animowana grafika 3D - J. Kęsik Metody akceleracji Struktury akceleracji Są to zestawy danych grupujące obiekty w taki sposób, że można wydzielić z nich podgrupę obiektów, dla której będziemy sprawdzać przecięcie z promieniem Większość tego typu struktur bazuje na hierarchicznym podziale przestrzeni otaczającej grupę obiektów Animowana grafika 3D - J. Kęsik Metody akceleracji Hierarchie przestrzeni otaczającej (omawiane częściowo wcześniej) Generalnie tworzymy otoczenie sceny (sfera, sześcian itp) a następnie dzielimy go na obszary tego samego typu (mniejsze sfery…) Testując promień sprawdzamy jego zderzenie z poszczególnymi poziomami otoczeń dochodząc do obszarów zawierających rzeczywiste prymitywy Taka metoda redukuje ilość testów z O(n) do O(log n), gdzie n jest ilością prymitywów Animowana grafika 3D - J. Kęsik Metody akceleracji Wykorzystywane hierarchie to: • • • • • • Drzewa ósemkowe Drzewa KD Drzewa BSP Siatki jednolite Hierarchie sferowe Drzewa hierarchiczne Animowana grafika 3D - J. Kęsik Metody akceleracji Wykorzystywane hierarchie to: • Drzewa ósemkowe Podział wg. Zasady: Jeżeli sześcian zawiera więcej niż graniczna liczbę prymitywów – jest dzielony na 8 jednakowych sześcianów Jest to struktura regularna, łatwa do automatycznego wyznaczenia – tworzy jednak dużo niepotrzebnie rozdrobnionych przedziałów Animowana grafika 3D - J. Kęsik Metody akceleracji Wykorzystywane hierarchie to: • Drzewa KD Podział wg. Zasady: Jeżeli równoległobok zawiera więcej niż graniczna liczbę prymitywów – jest dzielony na 2 niejednakowe równoległoboki. Podział następuje w arbitralnie wybranym punkcie Nieco lepiej dopasowuje się do nieregularnych kształtów – dobrze spisuje się w raytracingu Animowana grafika 3D - J. Kęsik Metody akceleracji Wykorzystywane hierarchie to: • Drzewa BSP (binary space partitioning) Podział wg. Zasady: Jeżeli obszar zawiera więcej niż graniczną liczbę prymitywów – jest dzielony na 2 niejednakowe części za pomocą płaszczyzny nie koniecznie równoległej do osi wsp. Lepsze wyniki niż drzewa KD – bardziej skomplikowany algorytm doboru miejsca cięcia Animowana grafika 3D - J. Kęsik Metody akceleracji Wykorzystywane hierarchie to: • Siatki Jednolite Podział na jednolite obszary (np. sześciany) Zysk na szybkości metody, strata na zajętości pamięci dla skomplikowanych scen. Niewygodne przy dużym zróżnicowaniu wielkości obiektów – rzadko stosowane w raytracingu (tylko szczególne przypadki) Animowana grafika 3D - J. Kęsik Metody akceleracji Wykorzystywane hierarchie to: • Hierarchie sferowe Sfera jest dzielona na podsfery obejmujące jej obszar – sfery się nakładają. Łatwość wyznaczenia przecięcia za cenę redundancji Nie są zbyt popularne ze względu na trudności z automatycznym określeniem podziału Animowana grafika 3D - J. Kęsik Metody akceleracji Wykorzystywane hierarchie to: • Drzewa hierarchiczne Działają na podobnej zasadzie jak drzewa ósemkowe ale dopuszczają podział poszczególnych bloków na dowolnie dobrana ilość części Bardzo dobrze sprawdzają się w raytracingu Animowana grafika 3D - J. Kęsik Metody akceleracji Rozwinięciem tych struktur jest wprowadzenie możliwości zagnieżdżania struktur różnego typu Np. jeden z sześcianów drzewa ósemkowego może zawierać wewnątrz strukturę drzewa BSP Animowana grafika 3D - J. Kęsik Teksturowanie Polega na mapowaniu płaskich (i nie tylko) obrazów na trójwymiarowe bryły Jest prostym sposobem na zwiększenie wizualnej złożoności sceny o stosunkowo niewielkiej liczbie trójkątów Po co tekstura Uzyskanie wrażenia realizmu bez nadmiernego zagęszczania siatki Współrzędne tekstury 2D W dwu wymiarze współrzędne tekstury są podawane w układzie U,V (s,t) Wartości U, V są znormalizowane do 1 V Tekstura jest opisana jako tablica wartości RGB 1.0 Każdy element tekstury jest nazwany “tekselem” (ang. texel) Tekstury są najczęściej obrazkami kwadratowymi o rozdzielczości =^2 np. 256x256 0.0 1.0 U Mapowanie tekstury 0.1 0.0 V Tekstura 1.1 1.0 Wynik 1.0 0.0 Polygon 1.0 U Mapowanie tekstury (1,1) t1 v1 v0 v t2 (0,0) t0 u Wsp. tekstury v2 Trójkąt (w dowolnej przestrzeni 3D) Mapowanie tekstury • Kafelkowanie - tiling (1,1) (0,0) v u Wsp. tekstury Kafelkowanie Zachodzi gdy współrzędne wykraczają poza 1 Od budowy tekstury zależy widoczność połączeń (0,3) (0,3) (1,1) (1,1) (0,0) (0,0) (0,0) (3,0) Łączenia widoczne (0,0) (3,0) Łączenia zamaskowane Mapowanie tekstury • Smużenie - clamping 1.5,0 (1,1) 1.0,0 v (0,0) u 0, 0 Wsp. tekstury Mapowanie tekstury • Odbicie - mirroring (1,1) v (0,0) u Mapowanie tekstury Dopasowanie wielkości tekstury Wielkość tekstury i wielkość obiektu, na który nakładana jest tekstura nie musi się zgadzać Prawie na pewno będziemy nakładali mniejszą teksturę na większy obszar albo odwrotnie Konieczne jest dopasowanie tekseli Mapowanie tekstury Dopasowanie wielkości tekstury Zakres u, v tekstury jest równy [0.0,1.0] teksel Mapowanie tekstury Dowolna wartość (u, v) jest dopasowywana do tekseli tekstury wg. Zasady: Wartość (u,v) jest mnożona przez rozdzielczość tekstury w poziomie i pionie. Odpowiednia pozycja jest odnajdywana na teksturze (najczęściej nie trafia w teksel) Kolor jest dobierany w zależności od sąsiadujących tekseli Mapowanie tekstury Najbliższy sąsiad Interpolacja biliniowa Mapowanie tekstury Tekstura Obraz Tekstura > obraz Obraz > tekstura Inne algorytmy przy powiększaniu i pomniejszaniu Powiększenie: Interpolacja Zmniejszenie: Uśrednianie Dobrze by było mieć jednolity algorytm Mip Mapping MIP = Multim In Parvo = wiele w małym d v u Dla danego obszaru dobierana jest wersja tekstury o najbliższej rozdzielczości Mip Mapping Dla tekstury 2n x 2n pixeli, wyznacz n-1 tekstur pochodnych – każda z rozdzielczością = ½ rozdzielczości poprzedniej Oryginał Niższe rozdzielczości Mip Mapping - Przykłady John Hart Mip Mapping Zapis MIP mapy w pojedynczym pliku RGB nieefektywny Obszar nie używany MIP mapę N bajtowej tekstury można zapisać na 4n/3 bajtach stosując trik rozkładu na kanały RGB Mip Mapping R G R G B B R G R G B B Ułożone w mozaikę kanały RGB kolejnych MIP map Mip Mapping - przykład Cztery razy więcej pikseli, trzy razy mniej bitów na piksel Mip Mapping – filtrowanie triliniowe Trilinear filtering rozszerzenie filtrowania biliniowego zamiast wybierać najbliższą MIP mapę – uśrednia liniowo dwie najbliższe Dopasowanie liniowe: Uproszczone równanie dla mapowania liniowego: uα = (1 – α)u0 + αu1, dla 0 ≤ α ≤ 1 Wyznacza wartości uα pomiędzy u0 i u1 • Proste równanie • Nie ma dzielenia • Szybki algorytm Mapowanie tekstury Dopasowywanie liniowe nie sprawdza się przy nakładaniu tekstury na powierzchnie będące pod kątem do kamery (0,1) (0,0) (1,0) Liniowe mapowanie tekstury • Wada: – Zaburzenia w teksturze Liniowe mapowanie tekstury Tekstura Efekt uzyskany Efekt oczekiwany Liniowe mapowanie tekstury Problem Jednakowe kroki na płaszczyźnie obrazu nie odpowiadają jednakowym krokom na płaszczyźnie obiektu Liniowe mapowanie tekstury Interpolacja w przestrzeni ekranu Interpolacja w 3D Liniowe mapowanie tekstury Aby zmniejszyć widoczność zniekształcenia można podzielić obszar na mniejsze trójkąty Mimo to błędy mogą być widoczne w połączeniach typu „T” Liniowe mapowanie tekstury Liniowe mapowanie tekstury Perspektywiczne mapowanie tekstury uα = (1 – α)u0 + αu1, dla 0 ≤ α ≤ 1 uα = (1 – α)(u0/z0) + α(u1/z1) (1 – α)(1/ z0) + α(1/z1) Mapowanie perspektywiczne uwzględnia informację o głębi położenia werteksów (za cenę bardziej skomplikowanych obliczeń) MIP mapy - Prefiltrowanie Wystąpienie powierzchni znajdującej się pod ostrym katem do obserwatora powoduje dodatkowo kłopoty z MIP mapowaniem Na skutek złożenia mapowania na wielokąt z mapowaniem na ekran w obszarach dalszych może zostać wybrana zbyt mała MIP mapa 4 16 32 Algorytm dopasowuje do kwadratu MIP mapy - Prefiltrowanie Rozwiązaniem jest filtr anizotropowy (an-isotropic -> nie tak samo w każdą stronę). Do MIP map dokładane są także wersje (N)x(N/2) np. 128x64 i odwrotnie Odpowiednia wersja dopasowywana jest w przypadku wąskich pasków MIP mapy - Prefiltrowanie © Extremetech MIP mapy - Prefiltrowanie © 3D Mark 2006 Automatyczne mapowanie tekstury Teksturę 2D można zmapować na obiekt 3D w sposób „automatyczny” metoda planarna, rzutuje obraz na płaszczyznę XY Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually” Automatyczne mapowanie tekstury Teksturę 2D można zmapować na obiekt 3D w sposób „automatyczny” metoda planarna, rzutuje obraz na płaszczyznę XY Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually” Automatyczne mapowanie tekstury Teksturę 2D można zmapować na obiekt 3D w sposób „automatyczny” metoda cylindryczna, rzutuje obraz z powierzchni cylindra opisanego na obiekcie Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually” Automatyczne mapowanie tekstury Teksturę 2D można zmapować na obiekt 3D w sposób „automatyczny” metoda sferyczna, rzutuje obraz z powierzchni sfery opisanej na obiekcie Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually” Automatyczne mapowanie tekstury Teksturę 2D można zmapować na obiekt 3D w sposób „automatyczny” metoda sześcienna (box), rzutuje obraz z powierzchni sześcianu opisanego na obiekcie – wielokrotna metoda planarna Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually” Mapowanie tekstury Bardziej skomplikowane obiekty wymagają stworzenia mapy UV Źródło: Johan Steen Blog Mapowanie tekstury Mapowanie tekstury Tekstura może zawierać kanał alpha – umożliwiający stworzenie wrażenia przezroczystości (przerwy, prześwitywania) Mapowanie tekstury We wczesnych wersjach silników 3D stosowano przezroczyste bitmapy do (kiepskiego) symulowania bardziej skomplikowanych obiektów 3D Takie drzewko wyglądało znośnie z daleka i w przeciwieństwie do płaskiej bitmapy, zmieniało się nieznacznie w miarę jego okrążania (zmiana kątów patrzenia na tekstury) Bump Mapping Wiele tekstur przedstawia obraz małych nierówności powierzchni Ich wymodelowanie w obiekcie wymagałoby zbyt skomplikowanej siatki trójkątów Symulacja tych nierówności za pomocą tekstury daje wrażenie płaskości przy oświetleniu pod kątem do powierzchni Bump Mapping Bump Mapping Nawet jeżeli obraz tekstury zawiera cienie to nie będą one z reguły pasowały do bieżącego ustawienia oteksturowanej powierzchni Bump Mapping Zadaniem Bump mappingu – mapowania wybojów, jest stworzenie wrażenia chropowatości powierzchni bez modelowania nierówności w siatce Bump Mapping Wykorzystuje mapę wysokości (bitmapa jednokanałowa) do zmiany wartości wektorów normalnych powierzchni Bump Mapping Bez BM BM Bump Mapping Nowa normalna jest wyznaczana na podstawie: N’(u,v) = Ou Ov - Bu(N Ov) + Bv(N Ou) + Bu Bv(N N) = N - Bu(N Ov) + Bv(N Ou) =N+D D N’ N Normal Mapping Podobna zasada jak BM Wykorzystuje mapę normalnych zamiast mapy wysokości Nie zmienia geometrii obiektów Normal Mapping Zamiast obliczania nowej normalnej na podstawie wysokości, wartość normalnej w danym punkcie powierzchni jest zakodowana jako wartość RGB Mapa wysokości Mapa normalnych Normal Mapping Przykład Normal Mapping Może być użyte do znacznego zredukowania stopnia skomplikowania siatki Siatka 4 mln trójkątów Uproszczona siatka 500 trójkątów 8000 razy mniej trójkątów! Uproszczona siatka i normalka Źródło: www.Wikipedia.org Bump Mapping Co tu nie pasuje? Normal/Bump Mapping Zalety: ◦ Nie zmienia się geometria obiektu ◦ Mały koszt obliczeniowy Teoretycznie chropowata powierzchnia jest gładka przy brzegu Chropowatości nie rzucają cienia Poprawa tych błędów jest kosztowna obliczeniowo Wady: ◦ Nie zmienia się geometria obiektu Displacement Mapping Przykład Bump Mapping Displacement Mapping Displacement Mapping Przykład Height (Displacement) Map Displacement Mapping Displacement Mapping Przykład Displacement Mapping Zalety: ◦ Zmienia geometrię obiektu ◦ Dodaje wysoki poziom detali obiektu Wady: ◦ Skomplikowany i kosztowny algorytm ◦ Bardzo łatwo doprowadzić do zbytniego skomplikowania obiektów 3D Displacement Mapping Obrazek z: Geometry Caching for Ray-Tracing Displacement Maps Matt Pharr i Pat Hanrahan. Skomplikowane cienie rzucane przez kamienie Environment Map Mapowanie środowiskowe umożliwia tworzenie symulacji efektów odbicia czy przenikania Powierzchnie odbijające są symulowane przez położenie na obiekcie tekstury zawierającej (statyczny) widok odbicia. Widok ten jest generowany na podstawie obliczonej wcześniej mapy odbicia „środowiska” Najczęściej wykorzystywane są mapy sferyczne i sześcienne Environment Map Mapa sferyczna zawiera bitmapę wygenerowaną jako odbicie od kulistej powierzchni znajdującej się w koło obiektu Kolor piksela wyznaczany jest na podstawie promienia padania i odbicia dla każdego piksela obiektu, widocznego na ekranie Taka mapa daje dobry wynik tylko dla obiektów zbliżonych do kulistych Environment Map Environment Map Mapa sześcienna daje nieco lepszy efekt – mniej zniekształceń Jako odniesienie wykorzystany jest lokalny skybox – sześcian zawierający odbicia wygenerowane osobno dla każdej z płaskich ścian Environment Map Źródło: Rosalee Wolfe, „Teaching Texture Mapping Visually” Wady metody Mapa jest zapisywana dla widoku zogniskowanego na środku obiektu, ◦ w przypadku skierowania „wzroku” na element obiektu odległy od środka widok powinien być inny. Najczęściej różnica jest nieznaczna – słabo zauważalna Obiekt nie odbija sam siebie ◦ (Można to poprawić stosując odpowiedni model oświetlenia) Brak odbicia dla ruchomych obiektów – nie można się przejrzeć w lustrze Jak zapisać teksturę? Environment Mapping Example Terminator II Environment Maps The environment map may take one of several forms: ◦ Cubic mapping ◦ Spherical mapping (two variants) ◦ Parabolic mapping Describes the shape of the surface on which the map “resides” Determines how the map is generated and how it is indexed What are some of the issues in choosing the map? Refraction Maps Za pomocą podobnej techniki można zasymulować przenikanie światła Opacity Maps Za pomocą tekstur można definiować widoczne obszary Opacity Maps Za pomocą tekstur można definiować widoczne obszary Znaczne uproszczenie modelu dla płaskich elementów Mapy oświetlenia Quake Mapy oświetlenia Stosowane wtedy gdy chcemy zaoszczędzić na czasie renderowania Statyczne obiekty mogą mieć nałożone tekstury określające padające na nie światło Tekstura taka powstaje podczas wcześniejszego obliczenia oświetlenia dla danego obiektu – światło nie może być zmienne = Illumination Maps + Mapy oświetlenia Lightmapy są skalowane w lumelach (lumination element), odpowiadających jednemu lub więcej texelowi Jakość Lightmapy jest kompromisem między szybkością renderowania a jakością oświetlenia Zastosowanie Lightmap pozwala na użycie bardziej zaawansowanych modeli oświetlenia – brak konieczności renderowania „w locie” Illumination Maps Quake light maps Procedural Texture Nie są gotowymi obrazami tylko instrukcjami generującymi pewien obraz 2D użyty następnie jako tekstura Służą do tworzenia materiałów mających określony wygląd (np. przypominający marmur) Procedura może tworzyć niepowtarzalne wzory tekstury Procedural Texture Szachownica Scale: s= 10 If (u * s) % 2=0 && (v * s)%2=0 texture(u,v) = 0; // czarny Else texture(u,v) = 1; // biały Turbulence Wykorzystanie różnego rodzaju procedur pseudolosowych daje możliwości generowania tekstur o określonym „ogólnym” wyglądzie k turbulence ( x) i 0 1 2i i noise(2 x) Turbulence turbulence (x) sin( x turbulence ( x))