Anna Banaś Paulina Misiarz Marta Szafraniec Katarzyna Janowska
RENDERING Referat Animacja Komputerowa 2014
Kraków, 5.05.2014
Widzenie stereoskopowe Ludzie, jak większość zwierząt, mają umieszczone obok siebie dwie gałki oczne skierowane w tym samym kierunku. Obraz odbierany z każdej gałki ocznej jest pod nieco innym kątem, dlatego obracają się one aż przedmiot znajdzie się na wspólnej osi. W efekcie obie gałki oczne obserwują ten sam punkt na postrzeganym obiekcie. Korzystając ze znanego kąta patrzenia oczu oraz na podstawie znajomości rozstawu gałek ocznych, kora wzrokowa oblicza odległość do przedmiotu. Stosując szereg technik i „obliczeń”, kora buduje trójwymiarowy model otoczenia. Dzięki temu możemy widzieć stereoskopowo, czyli w „pseudo 3D”. Zakres działania takiego widzenia to ok. 10 metrów. Przedmioty znajdujące się dalej mózg lokalizuje korzystając z widocznych cieni oraz praw perspektywy (dalsze obiekty są mniejsze). Na przykład gdy jedziemy nocą samochodem, z daleka może nam się wydawać, że przy drodze widzimy skulonego człowieka. Gdy podjedziemy bliżej, możemy stwierdzić, że to tylko szmaty porzucone na poboczu. Jednak już naprawdę blisko widzimy, że to, co widzieliśmy, to tylko cień rzucany przez przydrożne wysokie trawy. Innym przykładem na „dopowiadanie” przez mózg niektórych kwestii może być wielkość księżyca. Wschodzący księżyc wydaje nam się dużo większy, niż ten, który jest w zenicie. Dzieje się tak, ponieważ mózg wie, że rzeczy, które są daleko powinny być mniejsze. Ponadto nie ma bliskiego punktu odniesienia, jakim przy wschodzącym księżycu może być horyzont. Robiąc zdjęcie tak samo ustawionym aparatem podczas wschodu księżyca, jak i podczas zenitu, nie zobaczymy już takiej różnicy w wielkości księżyca, ponieważ aparat fotograficzny nie będzie „interpretował” widzianej sceny tak, jak robi to mózg. Układ optyczny człowieka jest dosyć słabym mechanizmem i tak naprawdę do mózgu dociera niezbyt ostry obraz rzeczywistości. Dlatego mózg wykształcił powyższy mechanizm wyostrzania obrazu. W grafice właśnie taki mechanizm nazywamy renderingiem. Można domniemywać, że prawdziwe widzenie 3D byłoby możliwe, gdybyśmy byli istotami czterowymiarowymi i moglibyśmy korzystać z naszych czterowymiarowych zmysłów, widząc obiekt jednocześnie ze wszystkich czterech stron oraz wszystko, co jest w środku ze wszystkimi „warstwami” jednocześnie.
Definicja renderingu w grafice Rendering to proces wizualizowania modelu trójwymiarowego poprzez wyświetlanie wypełnionych powierzchni, czyli inaczej proces tworzenia obrazów z dostępnych modeli. Renderingu używa się do przedstawienia informacji zawartych w dokumencie elektronicznym w formie najbardziej właściwej dla danego środowiska. Można na przykład przedstawiać informacje wizualnie, w tym na ekranie i w druku, albo dźwiękowo. Rendering trójwymiarowy często jest nazywany "obrazowaniem" czy "prezentacją". Jest to analiza modelu danej sceny oraz utworzenie na jej podstawie dwuwymiarowego obrazu w formie statycznej lub animacji. Podczas takiej operacji bierzemy pod uwagę wiele różnych czynników, m.in. odbicia, cienie, załamania światła, wpływy atmosfery itp. W uproszczeniu obrazowanie to seria skomplikowanych obliczeń, na podstawie których z trójwymiarowych modeli powstaje dwuwymiarowy obraz.
2
Zjawiska lokalne i globalne – oświetlenie lokalne i globalne Zjawiska lokalne Oświetlenie lokalne opisuje jak pojedyncze powierzchnie odbijają światło (rozpatrujemy bezpośrednie promienie światła z danego źródła światła). Algorytmy matematyczne na podstawie danych o tym jak światło pada na powierzchnie są w stanie obliczyć intensywność, kolor i część światła odbitego. Następnie mechanizm sprawdza gdzie znajduje się źródło światła. W prostym renderingu podczas procesu shade’ingu brane jest pod uwagę tylko światło pochodzące z głównych (nieodbitych) źródeł światła. W scenie, w której rozpatrujemy tylko lokalne oświetlenie promienie odbite nie oświetlają innych obiektów, a scena jest niedoświetlona. Algorytm do obliczania zjawisk lokalnych jest szybki. Wykorzystywany jest między innymi w ray castingu i ray tracingu.
Zjawiska globalne Światło posiada naturę korpuskularno-falową. Według tej teorii fotony podróżują w przestrzeni aż natkną się na jakąś powierzchnię. Część z nich jest absorbowana przez materiał, a część rozpraszana, czyli wraca z powrotem do przestrzeni. To kolor powierzchni decyduje o tym, które z fotonów o konkretnej długości fali będą absorbowane. Od powierzchni zaś zależy w jaki sposób wiązka fotonów zostanie odbita.
Oświetlenie globalne jest określone poprzez ciąg zjawisk lokalnych (wiele różnych odbić). Oświetlenie globalne uwzględnia promienie odbite i załamane, ponieważ śledzony jest bieg promieni. Obraz stworzony dzięki takiemu oświetleniu jest bardziej realistyczny, ale złożoność algorytmu jest większa. Oświetlenie globalne wykorzystuje się na przykład w radiosity czy photon mappingu.
3
Źródła światła Wyróżniamy następujące źródła światła:
Światło otaczające (ambient light) – równomiernie oświetla wszystkie elementy sceny, nie pochodzi z żadnego konkretnego kierunku,
Światło rozproszone (diffuse light) – pada na obiekt z określonego kierunku, ale jest na nim rozpraszane we wszystkich kierunkach, Światło odbite (specular light) – światło kierunkowe. Pada na obiekt z określonego kierunku i odbijane jest w konkretnym kierunku.
Bryła widzenia Ważnym zagadnieniem dla renderingu jest bryła widzenia. Bryła widzenia ogranicza tę część świata, która ma być wycięta i zrzutowana na rzutnię. Dla rzutu perspektywicznego bryła widzenia jest otwartym ostrosłupem z wierzchołkiem w punkcie odniesienia rzutowania i krawędziach przechodzących przez rogi okna.
Typy renderingu Rendering interaktywny Charakteryzuje się szybkością generowania obrazów. Jest przeznaczony najczęściej do podglądu budowanych modeli, ale również stosuje się go w grach. Możemy wyróżnić kilka interaktywnych trybów renderingu:
Określanie linii widocznych – wyświetlanie tylko tych linii, które są widoczne w aktualnym położeniu kamery, czyli tych, które nie są przesłonięte. Tylko powierzchnie ograniczone przez krawędzie mogą przesłaniać inne odcinki, dlatego obiekty, które mogą zasłaniać inne, muszą być modelowane albo jako zbiory powierzchni, albo jako bryły. Linie niewidoczne są czasami pokazywane za pomocą linii przerywanych, aby pokazać również wewnętrzne struktury modelu. Określanie powierzchni widocznych – analogicznie do odcinków – pokazywane są tylko te powierzchnie, które są widoczne dla obserwatora.
Rendering fotorealistyczny W tym typie renderingu najważniejszy jest realizm. Podczas takiego renderowania wiele czasu i uwagi poświęca się na uwzględnienie padającego światła, cieni, odbijania się promieni od przedmiotów czy załamanie światła. Jest o zwykle bardziej skomplikowany i czasochłonny.
4
Równanie renderingu Równanie renderingu opisuje zależność między oświetleniem wzajemnym elementarnych fragmentów powierzchni. Pozwala nam ono wyznaczyć radiancję (I), czyli strumień promieniowania na jednostkę powierzchni na jednostkę kąta bryłowego. Dzięki ogólnemu równaniu renderingu możemy obliczyć intensywność światła jakie punkt x dostaje od punktu x’. Równanie ma następującą postać: ⬚
𝐼 𝑥, 𝑥
′
′
′
𝜌 𝑥, 𝑥 ′ , 𝑥 ′′ 𝐼 𝑥 ′ , 𝑥 ′′ 𝑑𝑥′′]
= 𝑔 𝑥, 𝑥 [𝜀 𝑥, 𝑥 + 𝑆
Funkcja g określa czy dwa rozpatrywane w przestrzeni punkty w ogóle się widzą. Jeżeli g jest równe 0, to powierzchnie się nie widzą i reszta równania nie jest wykonywana. Gdy dwa rozpatrywane punkty się widzą, funkcja g wynosi 1/r2, gdzie r jest odległością między x a x’. Wtedy mnożymy funkcję związaną z widocznością (g) przez sumę emisji własnej x’ w kierunku x oraz natężenie światła emitowanego do wszystkich innych punktów, które osiąga pierwszy punkt i jest odbijane od pierwszego punktu do drugiego. Ogólne równanie renderingu uwzględnia zarówno emisję własną fragmentu x' jak i odbicie przez x', co daje możliwość zbudowania zależności rekurencyjnej między wszystkimi fragmentami rozpatrywanej sceny. Oprócz tego równanie renederingu wymaga porównywania wszystkich fragmentów rozpatrywanej płaszczyzny na zasadzie „każdy z każdym”.
Algorytm z-bufora Algorytm z-bufora lub też bufora głębokości jest jednym z najprostszych do realizacji sprzętowej albo programowej algorytmów znajdywania powierzchni widocznych. Przechowuje on wartość Z, czyli odległość powierzchni od obserwatora. Na początku bufor (Z) jest zerowany, co odpowiada zapamiętywaniu wartości dla tylnej ściany obcinającej, a do bufora obrazu wpisywana jest barwa tła. Największa wartość, jaka może być wpisana w z-buforze, reprezentuje z dla przedniej ściany obcinającej. Wartości są przeglądane wierszami, a kolejność ich przeglądania jest dowolna. W efekcie działania algorytmu części sceny znajdujące się za innymi elementami zostają ukryte.
5
Metoda śledzenia promieni Śledzenie promieni (ang. ray tracing) jest pierwszą metodą wizualizacji obiektów trójwymiarowych, od której ludzie zaczęli mówić o ,,fotorealistycznych” obrazach utworzonych przez komputer. Można ją scharakteryzować za pomocą następujących uwag:
Metoda ta jest algorytmem widoczności (przestrzeni obrazu), co prawda niezbyt sprawnym i dlatego często bywa on wspomagany innymi algorytmami widoczności. Jest to również algorytm wyznaczania cieni.
Najbardziej charakterystyczna jest możliwość symulowania wielokrotnych odbić zwierciadlanych i załamań światła. Bardziej ograniczone są możliwości otrzymywania półcieni. Istnieje możliwość stosunkowo łatwego połączenia metody śledzenia promieni z konstrukcyjną geometrią brył i z wizualizacją objętościową (można więc tworzyć obrazy dymu, mgły itd.). Klasa dopuszczalnych obiektów, które można wizualizować tą metodą jest bardzo obszerna. Łatwo można przeciwdziałać zjawisku aliasu, możliwe są też efekty specjalne, takie jak symulowanie głębi ostrości obiektywu i inne. Ceną za to wszystko jest duża ilość obliczeń wykonywanych w tym algorytmie, czyli długi (rzędu kilku sekund do nawet godzin) czas tworzenia obrazu. Nie jest to więc algorytm nadający się do wykorzystania w programach interakcyjnych jako główna metoda wizualizacji trójwymiarowych scen. Metoda śledzenia promienia odwrotnego W naturze światło rozchodzi się od swojego źródła w kierunku obiektów znajdujących się w jego zasięgu, następnie załamuje bądź odbija się od nich jeden lub więcej razy, aby w końcu trafić do oka ludzkiego. W rzeczywistych warunkach tylko niewielka ilość emitowanych promieni osiąga oko, przez co symulowanie takiego procesu rozchodzenia się światła wprost byłoby bardzo nieefektywne. Jednakże można wykorzystać dwa istotne fakty:
radiancja jest stała wzdłuż linii widzenia, czyli odcinka łączącego obiekt i oko, lub dwa obiekty sceny, nie przecinającego żadnego innego obiektu, rozpraszanie światła (odbicie i załamanie) przez powierzchnie jest w pełni symetryczne.
Własności te pozwalają na śledzenie promieni w przeciwną stronę, poczynając od oka, poprzez obiekty wypełniające scenę, na źródłach światła kończąc i otrzymanie w efekcie identycznego wyniku. W ten właśnie sposób działa algorytm zaproponowany w artykule Whitted’a oraz większość współczesnych programów śledzących promienie. Stąd metodę śledzenia promieni nazywa się też metodą (śledzenia) promienia odwrotnego. Danymi wejściowymi dla każdego programu śledzącego promienie są:
opis geometrii wszystkich obiektów sceny wraz z właściwościami fizycznymi materiałów, z jakich są one zbudowane opis wszystkich źródeł światła pozycja obserwatora (kamery) płaszczyzna rzutowania, na której tworzony będzie obraz (np.kierunek patrzenia i kąt widzenia) rozdzielczość pionowa i pozioma tworzonego obrazu
6
Historia: ray casting ray tracing Podstawowa metoda śledzenia promieni, była pierwotnie opracowana przez Appela oraz Goldsteina i Nagela. W 1968 Arthur Appel po raz pierwszy przedstawił algorytm do ray castingu. Algorytm służył do określania widoczność powierzchni , wyznaczanych na zasadzie śledzenia umownych promieni światła od oka obserwatora do obiektów sceny. Goldstein i Nagel wykorzystywali początkowo ten algorytm do symulowania trajektorii torów pocisków i cząstek nuklearnych. Dopiero później użyli go w grafice. Metoda śledzenia promieni, została rozszerzona przez Whitted’a i Kay’a. Ich algorytm uwzględniał odbicie zwierciadlane i przezroczystość z załamaniem. Algorytm nazwano ray tracing. Za jego pomocą można uzyskać szereg efektów oświetlenia (dokładne cienie i odbicia, przenikania przez powierzchnie przezroczyste, również ugięte). W prostym algorytmie (Ray Casting) promień biegnący od obserwatora, przez punkt na rzutni w głąb sceny, śledzony jest tylko do ewentualnego pierwszego przecięcia z obiektem sceny. Algorytm ten nie uwzględnia odbicia promienia. Jest szybszy od ray tracingu, ale daje gorsze rezultaty. W rekursywnej metodzie śledzenia promieni (Ray Tracing) analizowany promień po trafieniu w pierwszy obiekt sceny śledzony jest dalej. Wylicza się kierunek tego promienia odbitego i sprawdza, czy nie trafia on w kolejny obiekt . Jeśli tak, ponownie analizuje się promień odbity itd. Algorytm ten jest dokładniejszy, pozwala tworzyć bardziej realistyczne obrazy, ale wymaga znacznych nakładów obliczeniowych. Algorytm ray castingu Algorytm ten jest jednym z najprostszych sposobów realistycznej wizualizacji oświetlonych scen trójwymiarowych. Stosowany był w wielu aplikacjach graficznych, na przykład grach "Doom" czy "Wolfenstein". Poniższy opis algorytmu dotyczy przypadku, gdy na scenie znajduje się tylko jeden obiekt i jedno źródło światła. Algorytm działa w ten sposób, że oblicza kolory kolejnych pikseli obrazu sceny według następujących reguł: 1. Przez kolejny analizowany piksel obrazu sceny przeprowadza się promień biegnący w kierunku ustalonym przez sposób rzutowania. 2. Bada się czy promień przecina powierzchnię znajdującego się na scenie obiektu. Jeśli nie przecina, analizowany piksel ekranu wypełnia się ustalonym wcześniej kolorem tła i przechodzi do analizy kolejnego piksela obrazu sceny. Jeśli promień przecina powierzchnię obiektu, wyznacza się współrzędne najbliższego względem rzutni punktu przecięcia. 3. Dla wyznaczonego w poprzednim kroku punktu przecięcia oblicza się oświetlenie (stosując wybrany model oświetlenia (np. model Phonga – uwzględniając wektor normalny i odcinek (kamera, punkt), następnie wypełnia się analizowany piksel odpowiednio do wyliczonego oświetlenia (pierwotny kolor punktu) i przechodzi do kolejnego piksela. Punkt jest tym bardziej jasny, im kąt między wektorem normalnym a odcinkiem (kamera, punkt) jest mniejszy.
Algorytm ray tracingu 1. Dla każdego piksela generowany jest promień pierwotny rozpoczynający się od obserwatora i przechodzący przez poszczególne piksele. 2. Poszukiwane jest przecięcie się promienia z najbliższymi obiektem na scenie. 3. W tym celu sprawdzane jest przecięcie promienia z każdym obiektem na scenie (przesłanianie się obiektów). 4. Z punktu przecięcia wysyłany jest promień testujący cienie. 5. Dla punku przecięcia obliczany jest kolor (np. za pomocą modelu oświetlenia Phong’a). 7
6. Dla powierzchni odbijających lub przezroczystych generowany jest promień wtórny śledzony podobnie jak promień pierwotny (ray tracing rekursywny). 7. Kolor piksela jest średnią ważoną kolorów obliczanych dla poszczególnych punktów przecięcia (waga zmniejsza się dla kolejnych odbić.
Drzewo promieni Traktując model kamery jako mechanizm realizacji rzutowania perspektywicznego, można zauważyć, że barwa danego piksela ekranu powstaje dzięki światłu docierającemu do niego z kierunku wynikającego z rzutowania. Można zatem prześledzić „drogę światła”, które dociera do piksela i na tej podstawie wyznaczyć barwę. Drogę promieni opisuje drzewo przecięć. 1. Korzeniem tego drzewa jest tzw. promień pierwotny, czyli półprosta o początku w położeniu obserwatora, ,,przechodząca przez piksel”. Każde napotkanie obiektu przez promień (promień pierwotny) wymaga analizy. 2. Następnie wyznaczane są promienie wtórne których może być kilka (zwykle co najmniej 1 , ale bywa też kilkanaście lub nawet kilkadziesiąt): Jeśli obiekt jest przezroczysty, to wyznaczany jest promień załamany (promień przechodzący przez obiekt) o kierunku zależnym od właściwości materiałowych obiektu. Promień odbity o kierunku zależnym od powierzchni obiektu. 3. Wyznaczamy promienie cienia (czasami nazywane promieniami oświetlenia) w kierunku każdego źródła światła. Promienie cienia pozwalają wyznaczyć oświetlenie danego elementu obiektu przez źródła światła. 4. Promienie wtórne mogą wskazać następne przecięcia z obiektami, stając się wtedy promieniami pierwotnymi kolejnej analizy. (algorytm rekurencyjny – powtarzany od punktu 2). 5. Tak stworzone drzewo promieni jest obliczane metodą zstępującą (DFS). Barwa każdego węzła jest liczona jako funkcja barwy potomków.
8
6. Gałąź w takim drzewie kończy się, gdy promienie wtórne (odbite i załamane) nie przecinają się z kolejnymi obiektami. Możne też być stosowane inne zakończenie procesu budowy i/lub analizy drzewa: gdy osiągnięto określony/zadany poziom rekurencji, albo po prostu gdy zabrakło pamięci na następne poziomy.
Promienie wtórne Dróg, po których porusza się światło jest niewyobrażalnie dużo i dlatego należy wybrać możliwie niewielki zbiór promieni wtórnych, które będą wystarczające do obliczenia intensywności światła z dostateczną dokładnością. Wśród promieni wtórnych wyróżniamy:
promienie odbite ( reflection rays) - których kierunek wynika z odbicia promienia pierwotnego lub wtórnego promienie załamane (transmission rays) — dla obiektów przezroczystych. Prawo załamania światła jest opisane wzorem
w którym i są współczynnikami załamania światła w poszczególnych ośrodkach. Nawias mówiąc, istnieją ośrodki, których współczynnik załamania światła zmienia się w sposób ciągły, np. powietrze o różnej temperaturze w różnych miejscach, lub roztwór soli o niejednolitym stężeniu. Światło w takich ośrodkach porusza się po krzywych, wskutek czego powstają zjawiska takie jak fatamorgana.
Promienie bezpośredniego oświetlenia (shadow rays)— ich kierunki są określone przez położenia źródeł światła. Promienie te służą do ustalenia czy miejsce przecięcia jest oświetlone konkretnym światłem. Śledzenie tych promieni ma na celu wyznaczenie odległości od źródeł światła oraz wykrycie ewentualnych obiektów rzucających cień. Mówiąc w skrócie, są to promienie testujące cienie. Odbicia raytracingowe Rozpoczynając proces raytracingu, render dzieli pole widzenia kamery na tablice pikseli, w oparciu o rozdzielczość renderowanego obrazu. Dla każdego piksela z kamery emitowany jest promień próbkujący kolor powierzchni punktu napotkanego obiektu. Przy wyłączonym antyaliasingu, może być potrzebna 9
więcej niż jedna próbka na piksel, co zwiększa ilość pracy raytacera. Kiedy promień natrafi na obiekt, testuje się, czy ma on własności refleksyjne, refrakcyjne, czy też jest zacieniony, co musi być obliczone przez kolejne próbkowanie promieni. Jeśli obiekt ma własności refleksyjne, po obliczeniu cieniowania światła rozproszonego i rozbłysków w danym punkcie powierzchni, śledzony jest dodatkowy promień odbity (reflection ray) od obiektu, aby sprawdzić, czy w tym punkcie renderingu widoczne będzie odbicie innego obiektu sceny. W przypadku sceny posiadającej wiele refleksyjnych bądź refrakcyjnych materiałów istnieje ryzyko, że raytracer wpadnie w niekończącą się pętle, śledząc promień odbijany od jednej powierzchni do drugiej. Takim przykładem może być próba wyrenderowania sceny, gdzie lustra na każdej ze ścian pokoju odbijają siebie nawzajem. Promienie światła wydają się odbijać w nieskończoność pomiędzy lustrami, więc scena mogłaby wymagać nieskończenie długiego czasu raytracingu. Aby uniemożliwić wpadnięcie w niekończący się cykl obliczeń, liczba kroków raytacingu jest ściśle ograniczona. Wiele aplikacji ogranicza ją w dwóch miejscach. Jeden to globalne ustawienie rendera, gdzie wskazuje się maksymalną liczbę odbić i sumę kroków raytacingu. Drugi sposób to ustawienie w parametrach shadera limitu odbić, nazywanego również głębokością rekurencji (ang.recursion depth) bądź śledzenia ( ang.trace depth). Przezroczytość i refrakcja Nadając obiektowi przezroczystość trzeba pamiętać, że otoczenie obiektu będzie miało wpływ na jego cieniowanie. Przezroczysta powierzchnia umiejscowiona w całkowicie czarnym otoczeniu, będzie stawać się coraz ciemniejsza w miarę zwiększania jej przezroczystości. Refrakcja (załamanie światła) jest efektem raytacingowym. Tak jak w przypadku soczewek, promienie światła będą skupiane w różny sposób przez modele 3D, w zależności od ich kształtu i proporcji. Posiadając ten sam współczynnik refrakcji, modele o różnych kształtach tworzą różne efekty refrakcyjne, co widać na poniższym rysunku.
Współczynnik refrakcji Poza kształtem modelu, na refrakcję wpływa liczba zwana współczynnikiem refrakcji –IOR. W zależności od wartości tego współczynnika uzyskujemy różne efekty przy renderowaniu przedmiotów. I tak wartość 1 nie załamuje światła. Zwiększenie bądź zmniejszenie współczynnika względem wartości 1 zwiększa załamanie światła. Poszczególne materiały mają różne wartości IOR. (np.szkło -1,44; woda-1,33; lód-1,3). Wartości
10
podawane w źródłach naukowych powinny być dobrymi wartościami wyjściowymi, ale zwykle dokonuje się korekt w oparciu o własne obserwacje.
Wady ray tracigu Nie jest idealny do obrazów fotorealistycznych:
nie uwzględnia światła rozproszonego, nie modeluje dyfrakcji, rozszczepienia światła, interferencji fal świetlnych, innych zjawisk falowych, techniki, które sobie z tym radzą to m.in. metoda energetyczna, śledzenie ścieżek, metoda map fotonowych i tzw. forward raytracing.
Forward raytracing Forward raytracing to metoda śledzenia promieni, która w przeciwieństwie do normalnego (czyli wstecznego – backward) raytracingu zaczyna się nie od kamery, lecz od źródeł światła. Określenie forward oznacza, że symulowane promienie poruszają się w tym samym kierunku co rzeczywistym świecie. Daje ona lepsze wyniki niż raytracing wsteczny, lecz wymaga nieporównywalnie więcej mocy obliczeniowej, więc jest używana tylko do pewnych specjalnych zastosowań, mających niewiele wspólnego z fotorealistycznym renderingiem, takich jak badanie właściwości sprzętu optycznego oraz w rozwiązaniach hybrydowych w połączeniu ze zwykłym raytracingiem.
.
11
Radiosity Naturalnym sposobem próby wyjaśnienia nazwy “Radiosity - Metody Energetycznej” wydaje się powołanie na definicję “Radiosity w procesie wymiany cieplnej”. Określa się ją wtedy jako całkowitą irradiancję (strumień promieniowania na jednostkę powierzchni). Na całkowitą irrandiancję składają się zaś: emisja odbita oraz własna. Jeśli jednak zastanowimy się moment nad dualną (korpuskularno-falową) naturą światła, okaże się, iż terminy emisja odbita i emisja własna mają swe podwaliny w 2 odmiennych sposobach rozumowania. O ile teoria, iż światło jest fala elektromagnetyczna sprawdza się dla zjawisk odbicia, interferencji, dyfrakcji, załamania i polaryzacji, nie radzi sobie z absorpcją (pochłanianiem) i emisją (wysyłaniem) światła . Ten stan rzeczy doprowadził do wygłoszenia tezy, że emisja i absorpcja światła dokonywane są nie w sposób ciągły, ale w porcjach, nazwanych kwantami energii zależnych od częstości promieniowania, które obecnie nazywamy fotonami. Zmiana częstotliwości fotonu musi odbywać się poprzez absorpcję fotonu, a następnie emisję innego fotonu (jednego bądź wielu) o innej częstotliwości. Ponieważ radiosity, tak w rozumieniu transferu cieplnego jak i grafiki komputerowej służy badaniu “odbić wzajemnych” ang. Interreflection, absorpcja i emisja są do jej realnego przybliżenia koniecznie potrzebne. Z powyższego, wynika zatem, iż Radiosity nazywamy Metodą Energetyczną, ponieważ emisja i absorbcja, na której ta metoda bazuje, wywodzi się z badań mechaniki kwantowej nad energią. Wprowadzenie do rachunku Jak jednak zabrać się za obliczenie czegoś, co jest zjawiskiem fizycznym? Z pomocą przychodzą nam metody numeryczne i Metoda elementu skończonego.
Metodą elementu skończonego (1984-1985; Goral, Cohena Greenberg, Nishita i Nakamae) rozwiązujemy układy równań różniczkowych, opierając się na podziale dziedziny(dyskretyzacji) na skończone elementy, dla których rozwiązanie jest aproksymacją konkretnych funkcji, i faktyczne obliczenia przeprowadzone są tylko dla węzłów tego podziału. (Posługujemy się aproksymacją [przybliżamy wynik, metody numeryczne], ponieważ nie istnieje funkcja analityczna(wzór), która pozwalałaby nam jednoznacznie określić “wynik” emisji lub odbicia promienia cieplnego.) Co z tego wynika? Realizacja metody energetycznej również wymaga podziału wszystkich powierzchni w rozpatrywanym układzie optycznym na płaty(trójkąty, czworokąty), dla których bazując na zasadzie zachowania energii w zamkniętym środowisku tego fragmentu, można przedstawić równaniem transportu promieniowania. Zasadna zachowania energii w zamkniętym środowisku: E2=w2+k*E1 E1 – światło padające na fragment, E2 – całkowite światło oddawane przez fragment, w2 – emisja własna, k – współczynnik uwzględniający wszystkie właściwości geometryczne i materiałowe związane z odbiciem (rodzaj powierzchni – odbicie kierunkowe/rozproszone, ile dany materiał odbija światła a ile absorbuje) 12
(Einsteinowskie: E = W + Ek [ gdzie: Ek - energia kinetyczna elektronu; W- praca wyjścia]) Różniczkowa forma równania transferu: Ponieważ ilość takich obliczeń będzie ogromna, będziemy je chcieli wprowadzić do komputera, by na tyle precyzyjnie na ile potrafi, policzył to za nas. Ustanawiamy sobie więc kilka pewników i ustalamy procedurę. Założenia:
Płaty mają skończone rozmiary, są płaskie, podlegają tym samym regułom emisji, odbicia, przenikania i absorpcji promieniowania (ambient light) Każdy płat odbija światło w sposób równomiernie rozproszony Pomiędzy dowolna para płatów zachodzą zjawiska związane z transportem światła
Etapy Metody Energetycznej: 1. 2. 3. 4.
Wyznaczenie układu oświetlenia na całej scenie (bez względu na obserwatora) Obliczenie współczynnika sprzężenia Rozwiązanie równania Renderowanie
Wyznaczenie układu oświetlenia Na każdej powierzchni w modelu ilość emisji fragmentu składa się z energii emitowanej przez fragment i energii odbitej. Ej tak samo jak współczynnik odbicia fragmentu to parametr, który musimy podać. Światło z zewnątrz pozostaje jednak wciąż do obliczenia. Żeby je obliczyć, należy przypomnieć sobie o założeniu nr. 3 i sprawdzić z jakimi innymi fragmentami nasz „j” kooperuje: zestawiając ze sobą nasze wnioski, otrzymujemy faktyczne równanie radiosity – zamieniamy Bj z Ej I przekształcamy równanie na macierzowe. Mając układ równań liniowych, zastosujemy iteracyjną metodę numeryczną Gaussa-Seidla do rozwiązania. Równania muszą być policzone dla każdej z branych pod uwagę długości fali, ponieważ współczynnik odbicia fragmentu oraz emisja własna są od nich zależne. W praktyce najczęściej prowadzi to do obliczeń dla składowych RGB. Współczynnik sprzężenia jest natomiast czysto geometryczny i nie musi być przeliczany ponownie w wyniku zmiany oświetlenia lub zdolności powierzchni do odbijania światła. Obliczanie współczynnika sprzężenia Współczynnik sprzężenia to część energii, która odbijając się od danej powierzchni, dociera do innej. Jest on zależny od właściwości powierzchni obiektów i ich wzajemnego ustawienia. Powinien być wyznaczony dla każdej pary płatów przed przystąpieniem do rozwiązywania układu równań bilansu energetycznego. Współczynnik sprzężenia optycznego jest większy od zera, jeśli powierzchnie „widzą się”, lub jest zerem, gdy powierzchnie „nie widzą się”. Istnieją dwa algorytmy obliczania współczynnika sprzężenia: półkuli i półsześcianu. Współczynnik sprzężenia jest nie bez powodu nazywany esencją radiosity – nie tylko jest czynnikiem wyróżniającym radiosity spośród innych metod renderingu, ale również zajmuje 80-90% wszystkich obliczeń w procesie renderingu tą metodą. Metoda półkuli (Nusselt analog) Wilhelm Nusselt zauważył, że jeśli element „i” zostanie otoczony półsferą i dokonamy rzutu elementu „j” na tę półsferę, to z punktu widzenia oddziaływania w postaci współczynnika sprzężenia, obiekt j oraz jego 13
rzutowanie są równoważne. Oznacza to, że obiekty, które mają taki sam rzut na półsferę, mają też takie same współczynniki sprzężenia. Analitycznie rzecz biorąc, wyglądałoby to tak. Gdzie relacja współczynnika sprężystości i powierzchni równomiernie rozpraszających światło (reciprocity relationship). Ponieważ jednak ta metoda okazała się bardzo kosztowna – wymaga obliczenia całek dla każdej pary wielokątów w scenie – powstała druga, konkurencyjna – metoda półsześnianu. Metoda półsześcianu Półsześcian dzielimy na warstwy. Każda z warstw jest podzielona na równą ilość mniejszych sześcianików i wyznacza współczynnik sprzężenia na podstawie rzutu obiektu na mapę pikseli półsześcianu. Progressive Radiosity (radiosity stopniowe) Progresywna radiacja „strzela” światłem iteracyjnie przetwarzając tylko jedną linijkę ze współczynnikiem sprzężenia w pojedynczej iteracji. Niestety, takie liczenie wymagałoby Fji dla każdego j, co wiąże się z długim czasem obliczeń. Powołujemy się zatem na „reciprocity relationship” wspomniane wcześniej i wstawiamy je do wzoru. Jeśli s to ilość naświetlań („strzałów światła”), złożoność tej metody wynosi O(nsv) a dodatkową zaletą algorytmu jest małe zużycie pamięci O(n) gdyż raz użyte kolumny macierzy są wyrzucane. Ulepszony algorytm stopniowej radiacji działa natomiast w ten sposób: 1. Powierzchnie dzielimy na stosunkowe duże wielokąty. Następnie możemy je znów podzielić w miejscach, gdzie różnica oświetlenia jest znacząca 2. Dystrybuujemy światło ze wszystkich źródeł na wielokąty. Mając oświetlenie wiemy, która powierzchnia jest przed którą i gdzie ono dociera a gdzie nie(gdzie powstają cienie). 3. Następnie zajmujemy się „indirect illumination”, sprawdzamy, która z powierzchni emituje najwięcej energii i w rezultacie, która wypuszcza najwięcej światła. 4. Powtarzamy punkt 3 aż do momentu, gdy większość światła zostanie zaabsorbowana. Tą metodą musimy przejść wiele iteracji by uzyskać idealny wynik, natomiast akceptowalny osiągniemy dość szybko. Postępowa/stopniowa metoda energetyczna jest często używana wraz z podstrukturalną. Oznacza to, że podzielone wielokąty, dzielimy jeszcze raz, na mniejsze, nie zmieniając jednak wielkości macierzy. Działanie algorytmu ulepszonej radiacji progresywnej:
Oświetl scenę, wyznacz Ej dla każdej powierzchni, dla której ilość docierającego światła jest różna od zera. Wybierz wielokąty, które emitują najwięcej energii Paruj daną powierzchnię ze wszystkimi, z którymi “wymienia” się energią, używaj kolejnego dzielenia na mniejsze elementy aż do momentu uzyskania najmniejszych elementów W drugim kroku uruchamiany jest algorytm ray-casting (uboższa wersja ray-tracingu), który wyznacza przecięcia promieni wysłanych z kamery z pierwszą napotkaną bryłą, a raczej z jednym z jej fragmentów. Zanotowana wartość natężenia światła emitowanego przez ten fragment wyznacza kolor piksela. Nowy obraz powstaje po każdej iteracji Algorytm kontynuuje pracę aż do osiągnięcia akceptowalnego wyniku.
14
Photon mapping Photon mapping to następny dodatek do ray tracingu służący radzeniu sobie z rozproszonymi odbiciami i nie tylko. O photon mappingu mówi się, że jest algorytmem dwuczęściowym. Zanim jednak pierwsza część się rozpocznie, należy oświetlić scenę w bardzo specyficzny sposób. Podobnie jak w radiosity, mamy do czynienia z iluminacją globalną i postrzeganiem światła w sposób cząsteczkowy. Generujemy zatem fotony ze źródła światła. Gdy foton natrafia na powierzchnię, zapamiętujemy: współrzędne punktu odbicia, kierunek padania fotonu (niektóre źródła mówią, że kolor i energię również) i zapisujemy w mapie fotonowej. Do implemetacji map fotonowych używane są drzewa kd. Drzewo kd to przestrzenna struktura danych, w której stosunkowo łatwo jest odnaleźć zapisany foton jak również jego najbliższych sąsiadów. Budowa mapy fotonowej Można budować kilka różnych rodzajów map fotonowych. My skupimy się na dwóch typowych. 1. Mapa fotonotwa “caustics” do przecięcia fotonów z powierzchniami szklanymi, wodą, połyskliwymi przedmiotami, innymi słowy, służąca modelowaniu skupienia, rozproszenia i rozszczepienia światła, wymaga bardzo dużej gęstości fotonów, zatem wypuszczamy ich ze źródeł światła jak najwięcej, by obraz był bardzo dokładny, do mapy fotonowej zapiszemy tylko informacje dotyczące dotarcia fotonu do tej szklanej powierzchni (zapisujemy informacje o danym fotonie tylko raz). 2. Mapa fotonowa globalna mniej dokładna, nie potrzebujemy dużej ilości fotonów, by zebrać informacje o świetle odbijającym sie od innych powierzchni do mapy fotonowej zapisujemy informacje za każdym razem gdy foton odbije się od powierzchni aż do momentu całkowitej absorpcji Rendering Dodajemy obserwatora. Z jego punktu widzenia włączamy ray tracing zaczynając od ostatniej lokalizacji każdego fotona (którą bierzemy z mapy). Do każdego możliwego sposobu odbicia przypisujemy prawdopodobieństwo. Używamy metody Rosyjskiej Ruletki by zdecydować o dalszym losie fotona – czy zostaje absorbowany czy mknie dalej. Funkcją BRDF obliczamy energię danego promienia (jasność). Przy obliczaniu światła odbitego wykonuje się procedurę “final gathering”. Dokonuje ona wygładzania mapy fotonowej, wykorzystując informacje z n najbliższych fotonów. Zalety photon mapping: realistyczne oświetlenie sceny, łatwość obrazowania efektów kaustycznych, odbić zwierciadlanych, subsurface scattering (soczewki, pryzmaty, woda), możliwość łączenia z innymi algorytmami. Wady photon mappingu: złożoność obliczeniowa (konieczność wyznaczenia mapy fotonowej)
15
Pozostałe metody renderingu Poza najbardziej powszechnymi metodami renderowania – ray tracingiem i radiosity, wykorzystuje się również metody analogiczne.
Metody Monte Carlo Algorytmy śledzenia promieni oparte na metodach monte carlo są bardzo ogólnymi metodami, pozwalającymi na wizualizowanie praktycznie wszystkich istotnych elementów realistycznego obrazu, w tym oświetlenia globalnego. Można je podzielić na trzy klasy:
metody metropolis (ang. metropolis light transport), dwukierunkowe śledzenie ścieżek (ang. bidirectional path tracing), śledzenie ścieżek (ang. path tracing)
Metody monte carlo pozwalają za pomocą losowo wybranych próbek badać właściwości nieznanej funkcji.
Path Tracing Śledzenie ścieżek daje możliwość pełnego odtworzenia oświetlenia globalnego. Algorytm wykorzystuje metody stochastyczne (losowe) do wygenerowania wszystkich możliwych ścieżek światła wewnątrz sceny. Opis algorytmu W przypadku śledzenia ścieżek badaną funkcją jest rozkład światła wewnątrz sceny dla jej konkretnego punktu. Jest ona próbkowana poprzez śledzenie wychodzących z tego punktu promieni o losowych kierunkach. Oświetlenie globalne w każdym pikselu obrazu jest ustalane poprzez wysłanie bardzo dużej liczby promieni w kierunku jego wnętrza. Natomiast na każdym kolejnym poziomie rekursji jest ono wyznaczane przy użyciu dokładnie jednego promienia odbitego. Jeden promień w obliczeniach rekursywnych może się wydawać wartością zbyt małą, ale gdyby każda ścieżka rozgałęziała się na kilkanaście innych, to otrzymany algorytm wraz z głębokością rekursji zwiększałby ich ilość w sposób wykładniczy, przez co niezwykle duży wysiłek obliczeniowy wkładany byłby w dokładne wyznaczanie wartości w punktach widocznych poprzez wiele odbić, czyli takich, których wpływ na wygląd renderowanego punktu jest mało istotny w porównaniu z tymi widocznymi bezpośrednio. Wybór typu generowanego promienia (odbity/załamany, zwierciadlany/rozproszony) dokonywany jest na podstawie właściwości materiału przy pomocy techniki zwanej rosyjską ruletką (korzystając z odpowiedniego rozkładu prawdopodobieństwa pozwala ona na usunięcie mało znaczących obszarów dziedziny problemu). Co ważne technika ta pozwala także śledzić ścieżki o skończonej długości i uzyskać rezultat taki sam, jak przy śledzeniu ścieżek nieskończonych. Oświetlenie bezpośrednie może być wyznaczane wprost, przy pomocy techniki opisanej w poprzednim akapicie. W tym wypadku wkład światła wliczany jest, gdy któraś ze ścieżek trafi w jedno z nich. Innym, lepszym sposobem jest wyliczanie oświetlenia bezpośredniego przy pomocy specjalnie skonstruowanej metody monte carlo pozwalającej próbkować tylko i wyłącznie powierzchnie źródeł światła. Ten sposobów wykorzystywany jest głównie z powodu bardzo istotnego wpływu, jaki ma 16
oświetlenie bezpośrednie na kolor punktu. W tym przypadku ścieżki trafiające w źródła światła są pomijane jako nieprawidłowe w celu uniknięcia sytuacji, w której oświetlenie bezpośrednie wliczane jest dwukrotnie. Obie metody pozwalają na wizualizowanie powierzchniowych źródeł światła i symulowanie obszarów półcienia, jednak druga z nich daje zdecydowanie lepsze rezultaty i pozwala na zastosowanie pewnych optymalizacji.
Rysunek przedstawia przykładowe drzewo promieni wygenerowane przez algorytm śledzenia ścieżek. W tym przykładzie poprowadzono dwa promienie pierwotne dla dwóch różnych pikseli. W punkcie pierwszego, widocznego poprzez piksel przecięcia ścieżka rozgałęzia się w wielu kierunkach. W każdym następnym przecięciu generowany jest tylko jeden promień wtórny. Dla każdego z promieni pierwotnych przedłużono tylko jedną ścieżkę, pozostałe pokazane są symbolicznie.
Zalety path tracingu Do głównych zalet należą:
możliwość wykorzystania dowolnej funkcji BRDF ("dwukierunkowa funkcja rozkładu odbicia" jest to stosunek luminancji energetycznej mierzonej w kierunku obserwatora do natężenia napromienienia badanego z kierunku padania promieniowania.) niskie zapotrzebowanie na pamięć złożoność czasowa, która na podstawie badań empirycznych została określona na O(log (N)), gdzie N oznacza ilość obiektów sceny.
Metoda ta dzięki swojej prostocie jest także świetnym punktem wyjścia dla algorytmów bardziej wyspecjalizowanych.
Wady path tracingu Największą wadą śledzenia promieni opartego na metodach monte carlo jest wariancja wśród oszacowań. Ujawnia się ona w postaci szumu wysokiej częstotliwości widocznego w wygenerowanym obrazie. Jest ona rezultatem użycia zbyt małej ilości ścieżek przy przybliżaniu wartości funkcji oświetlenia. Ilość szumu zależy w dużej mierze od charakteru zarówno bezpośredniego, jak i pochodzącego z odbić, oświetlenia sceny. W przypadku scen oświetlonych bardzo jednorodnie, np.: przez światło dużej mocy i powierzchni, jak słońce, oraz nie zawierających dużej ilości obiektów generujących silne zjawiska świetlne, wystarczy około 100-500 ścieżek na piksel w celu uzyskania obrazu o bardzo niskim poziomie szumu. Jednak w scenach charakteryzujących się dużymi i gwałtownymi zmianami w natężeniu oświetlenia, np.: zawierających dużo 17
obiektów połyskliwych zredukowanie szumu może wymagać użycia 10000 lub nawet 100000 ścieżek na piksel. Wysoki koszt wyeliminowania szumu wynika z faktu, że aby zmniejszyć go o połowę, trzeba użyć aż czterokrotnie więcej próbek.
Powyższy rysunek przedstawia dwa obrazy utworzone algorytmem śledzenia ścieżek. Przy ich generowaniu wykorzystano próbkowanie zgodne z rozkładem funkcji BRDF materiałów. Szum, wyraźnie widoczny w przypadku 100 ścieżek, znika prawie całkowicie po dziesięciokrotnym zwiększeniu ich liczby. Na obu obrazach widoczne są elementy oświetlenia globalnego. Sufit i obszary zacienione nie są całkowicie czarne. Na suficie widać, jak kolory otaczających ścian wpływają na jego barwę. Oświetlenie bezpośrednie utworzono przy pomocy osobnej techniki monte carlo. Cienie mają miękkie krawędzie, wyraźnie zarysowane są obszary półcienia. Inne rodzaje Path tracingu
Path tracing
Promienie są wypuszczane z aparatu, odbijając się po scenie, aż natrafią w światło.
Dwukierunkowe śledzenie ścieżek
Promienie są zwalniane z aparatu i źródeł światła. Następnie łączą się ze sobą, aby utworzyć wiele ścieżek światła.
Path tracing
Promienie są wypuszczane z aparatu, odbijając się po scenie, aż natrafią w światło. Gdy uda się odnalezienie ścieżki światła, kolejny promień wysyłany jest w podobnym kierunku.
z MLT Dwukierunkowe śledzenie ścieżek z MLT
Promienie są wypuszczane z aparatu i źródła światła, po czym łączą się by utworzyć wiele ścieżek. Gdy uda się odnalezienie ścieżki światła, kolejny promień wysyłany jest w podobnym kierunku.
18
Podsumowanie metody path tracing W path tracingu, analizowane ścieżki światła wybierane są losowo. Jeśli przeanalizuje się ich dostatecznie dużo, możliwe jest uniknięcie błędów i dobry pogląd na rozkład oświetlenia. Path tracing dla każdego piksela analizuje kilkadziesiąt lub kilkaset ścieżek promieni. W przeciwieństwie do ray tracingu, nie zajmuje się wyłącznie światłami punktowymi, dzięki czemu tworzy bardziej realistyczny efekt. Jest jednak oczywiście bardziej skomplikowany obliczeniowo.
19
Scanline Renderowanie Scanline jest algorytmem wyznaczania powierzchni widocznych w 3d. Działa on na zasadzie skanowania obiektów wiersz po wierszu, a nie na podstawie kolejności wielokątów jak np. w ray tracingu lub piksel za pikselem jak w path tracingu. Opis działania algorytmu Wszystkie wielokąty by być wyrenderowane, są najpierw sortowane przez współrzędną Y, skanującą wielokąt od góry do dołu i tworzącą listę krawędzi wielokąta. Każdy wiersz lub linia skanowania obrazu jest obliczana za pomocą przecięcia linii skanowania z krawędzią wielokąta z początku listy sortowania. Lista jest aktualizowana, aby odrzucić już zeskanowane części wielokątów a aktywna linia skanowania jest przesuwana w dół obrazu.
Mamy dany wielokąt, który składa się z ciągu łamanych. Wielokąt przecinamy liniami równoległymi do osi OX o współrzędnych yi rosnących od ymin do ymax, gdzie ymin i ymax jest zakresem współrzędnych y wierzchołków łamanej.
Obliczamy punkty przecięcia linii skanującej z krawędziami wielokąta. Obliczone punkty sortujemy rosnąco: x1, x2, x3 i x4. Kolejne pary punktów łączymy liniami poziomymi.
20
Zatem pierwsze podejście do konstrukcji algorytmu będzie następujące (nie jest to jeszcze gotowy algorytm a jedynie wstępne kroki): K01
Na podstawie listy łamanych skonstruuj listę krawędzi wielokąta.
K02
Przeglądnij listę krawędzi i wyznacz ymin i ymax.
K03
Dla y = ymin, ymin+1,...,ymax wykonuj kroki K04...K06.
K04
Wyznacz X – zbiór współrzędnych x punktów przecięcia krawędzi z listy z linią skanującą y.
K05
Posortuj rosnąco zbiór X.
K06
Kolejne pary punktów ze zbioru X połącz linią poziomą na wysokości y.
K07
Zakończ.
Tak wygląda szkielet algorytmu, uwzględnić należy jednak wiele przypadków szczególnych, które wymagają pewnych modyfikacji i są bardziej skomplikowane. Zalety scanline Główną zaletą jest to, że nie jest konieczne, aby przełożyć współrzędne wszystkich wierzchołków z pamięci głównej do pamięci operacyjnej, tylko wierzchołki wyznaczające krawędzie przecięcia z aktywną linią skanowania, a każdy wierzchołek jest odczytywany tylko jeden raz. Uniknięcie wielokrotnego dostępu do wierzchołków w pamięci głównej zapewnia znaczne przyspieszenie. Tego rodzaju algorytm może być łatwo zintegrowany z wieloma innymi technikami graficznymi, takimi jak model odbicia Phong'a lub algorytm z-bufora. Wady scanline Wadą scanline jest jego tendencja do tworzenia pełnych cieni – nie bierze on pod uwagę przezroczystości obiektów przy sprawdzaniu blokowania promieni.
scanline
ray tracing
Podsumowanie metody scanline Scanline jest wykorzystywany do prostych obrazów, niewymagających śledzenia promieni ani globalnego oświetlenia. Renderuje obrazy wysokiej jakości szybciej niż ray tracing. Ta metoda jest korzystna, kiedy w obrazie jest wiele detali małej wielkości, które mogłyby zostać pominięte przy innych sposobach renderingu. Jego jakość jest dobra, dopóki w obrazie nie są wykorzystane przezroczystości ani realistyczne cienie. Nie obsługuje też tekstur.
Algorytm Reyes Nazwa Reyes to akronim, oznacza Renders Everything You Ever Saw. Służy do foto-realistycznego renderingu. Opracowany został w latach osiemdziesiątych przez badaczy firmy Lucasfilm. Odpowiedzialny za niego dział został wykupiony przez Steve’a Jobsa, a nazwa została zmieniona na Studio Animacji Pixar. Opis działania Algorytm dzieli obraz na grupy pikseli o rozmiarach około 16 na 16 px., nazywane kubełkami. Reyes renderuje zakrzywione powierzchnie, dzieląc je na mikrowielokąty – taką ilość, żeby w danej rozdzielczości dać wrażenie gładkości. Dla każdego z nich ustalany jest kolor i przezroczystość poprzez obliczenie oświetlenia, cienia i mapowanie tekstur. Każdy rodzaj obliczenia wykonuje się w układzie współrzędnych. Mikrowielokąty są tworzone i teksturowane w lokalnym układzie współrzędnych obiektu, w związku z czym struktura filtrowania jest uproszczona. Podział na mikrowielokąty, cieniowanie i rendering odbywają się po kolei da każdego kubełka. Dzięki temu mikrowielokąty całych obiektów nie muszą być przechowywane w pamięci, mogą zostać z niej usunięte, po wyrenderowaniu kolejnych kubełków. Algorytm Reyes po raz pierwszy został użyty w 1982 roku wykreowania sekwencji Genesis w filmie Star Trek II: Gniew Khana. Starano się stworzyć ścianę ognia rozprzestrzeniającą się od punktu uderzenia pocisku w powierzchnię planety. Każda cząstka w systemie Reyes był to jeden punkt w przestrzeni, innymi słowy ściana ognia reprezentowana była przez tysiące tych poszczególnych punkcików. Każda cząstka miała następujące atrybuty:
położenie w przestrzeni 3D prędkość (prędkość i kierunek) kolor żywotność (jak długo to jest aktywne) wiek 22
kształt rozmiar przezroczystość
Zalety Reyes Reyes jest dużo szybszy, jednak mniej efektowny niż ray tracing. Dlatego często używane są one łącznie – tam, gdzie użycie ray tracingu jest zbyt kosztowne, pozostaje się przy samym algorytmie Reyes. Wady Reyes Jako że ta metoda nie przechowuje w pamięci wielokątów całej sceny, jest odpowiednia, dopóki promienie nie odbijają się od losowych obiektów. Nie ma możliwości wykorzystania informacji o wszystkich elementach, obliczając umiejscowienie odbić, załamań i cieni. Podsumowanie algorytmu Reyes Wykorzystując algorytm Reyes, można uzyskać gładko zakrzywione powierzchnie, mapowanie nierówności z detalami na poziomie piksela, rozmycie ruchu i głębię ostrości. Był i wciąż jest powszechnie używany do uzyskania realistycznych efektów w filmach, między innymi w oprogramowaniu RenderMan Pixara. Algorytmu Reyes używa się w następujących rendererach:
Digits 'n Art's 3Delight Aqsis jrMan Pixar's RenderMan Pro Server RenderMan for Maya Pixels 3d Renderer Pixie DotC Software's RenderDotC Side Effects Software's Mantra Poser's FireFly Guerilla Render Bakery Relight
Renderman Na początku lat 90 programiści – Ed Catmull, Loren Carpenter i Rob Cook otrzymali Oscara za wkład do przemysłu filmowego w dziedzinie efektów specjalnych, poprzez wynalazek systemu oprogramowania syntezy RenderMan. Był to pierwszy Oscar przyznany developerom podobnego oprogramowania. Aktualnie RenderMan wykorzystuje algorytm Reyes, elementy ray tracingu i pojedyncze efekty radiosity. Filmy tworzone za pomocą RenderMana wielokrotnie były nagradzane w kategorii efektów specjalnych.
23
Przykłady filmów, w których wykorzystano oprogramowanie RenderMan1: 1984: Star Trek, 1991: Beauty and the Beast, Terminator II, 1993: Jurasic Park, 1994: Forrest Gump, The Lion King, The Mask, 1995: Batman Forever, Jumanji, Pocahontas, Toy Story, 1997: Titanic, 1998: Armagedon, Patch Adams, 1999: Fight Club, The Matrix, Star Wars: The Phantom Menace, 2001: Harry Potter anf the Sorcerer's Stone, The Lord of the Rings: The Fellowship of the Ring, 2003: The Hulk, Finding Nemo, Peter Pan, Pirates of the Caribbean: The Far Side of the World, 2004: Spider Man 2, 2005: King Kong, Batman Begins, 2006: Happy Feet, Mission Impossible III, 2007: 300, Ratatouille, Sweeney Tod: Demon Barber of Fleet Street, Transformers,
2009: Avatar, Wolverine, 2010: Tangled, Iron Man 2, 2011: Rango, Thor, X-Men:First Class, 2012: The Avengers, The Hunger Games, Life of Pi, Skayfall, The Hobbit: An Unexpected Journey, 2013: Frozen, The Great Gatsby, Elysium.
HDR rendering HDR rendering (rendering z użyciem szerokiego zakresu dynamicznego, ang. High Dynamic Range Rendering) – technika generowania sceny w grafice trójwymiarowej, której efektem jest renderowanie świata z realistycznym oświetleniem, przy użyciu szerszego niż normalnie zakresu jasności oświetlenia.
1
Pełna lista dostępna pod adresem: http://renderman.pixar.com/view/movies-and-awards.
24
Największa różnica dostrzegana jest w bardzo ciemnych lub bardzo jasnych fragmentach sceny, gdzie symulowane jest natężenie światła wykraczające poza zakres możliwy do osiągnięcia na ekranie monitora (np. efekt oślepienia po spojrzeniu na słońce). Technologii tej użyto między innymi w grach: Test Drive Unlimited, Colin McRae: DiRT, Far Cry 2, Gothic 3, Half-life 2: Lost Coast, The Elder Scrolls IV: Oblivion, Splinter Cell: Double Agent oraz Crysis 2. Zalety HDR Technika ta pozwala oddać bardzo duże oraz bardzo małe (mniejsze niż 1/256) natężenie światła oraz koloru. Jedną z głównych zalet jest to, że szczegóły w scenie z dużym kontrastem są zachowane. Wady HDR HDR wymaga jednak większej mocy obliczeniowej, a przez to do jego wykorzystania w czasie rzeczywistym (czyli np. w grach komputerowych) potrzebne są silne procesory graficzne. Stąd, nie jest on realizowany na starszych kartach graficznych. Podsumowanie HDR rendering Dzięki temu sposobowi renderingu, można osiągnąć bardzo szeroki zakres jasności oświetlenia. Może symulować efekt porażenia przez słońce, silnego odblasku i wyjątkowego zaciemnienia, zwykle niedostępnego na ekranie. Kosztem tego jest wymaganie wysokiej mocy obliczeniowej.
Renderowanie sprzętowe Oprócz programowych metod renderowania bardzo powszechne jest wykorzystywanie sprzętowego wsparcia do rysowania obrazów i scen trójwymiarowych, np. w grach komputerowych. Polega na wykorzystywaniu obrazów generowanych przez kartę graficzną jako ostatecznych klatek. Procesory graficzne we współczesnych kartach graficznych do komputerów domowych pozwalają na bardzo szybkie rysowanie grafiki trójwymiarowej, zachowując realistyczny wygląd. Ogromne przyspieszenie obliczeń jest uzyskane dzięki zastosowaniu specjalizowanych modułów do obliczeń geometrycznych oraz modułów teksturowania obiektów czy też generowania efektów świetlnych. Dalsze przyspieszenie uzyskane jest przez uproszczony matematyczny sposób generowania obrazu 3D, zoptymalizowany bardziej pod kątem wydajności niż realizmu. Renderowanie sprzętowe jako procedura będzie działać w następujący sposób :
scena jest tesselated (rozmozaikowana, rozczłonkowana), wszystkie dane są przekazywane do karty graficznej, scena jest renderowana, wynik podawany jest z powrotem do procesu wywołującego.
25
Wady renderowania sprzętowego Drugi punkt może okazać się krytyczny i ograniczający. Aby najlepiej wykorzystać prędkość GPU(procesora graficznego) , wszystkie dane muszą być przesyłane do pamięci karty graficznej. To nie jest problem dla małych lub średnich scen. Ale np. wszystkie tekstury, mapy podziemnych przestrzeni i innych danych również muszą się tam znaleźć – bez kompresji. Jeśli wyobrazić sobie scenę produkcji z tysiącem obiektów, faktur i innych danych, może pojawić się problem z brakiem miejsca na karcie graficznej. Rendering sprzętowy jest rzadko używany na potrzeby animacji. Nie zapewnia szczegółowości wystarczającej na potrzeby jej tworzenia. Zalety renderowania sprzętowego Z drugiej strony, renderowanie sprzętowe jest bardzo skuteczne, jeśli ma się wiele tych samych zadań do wykonania w tym samym czasie. Pozwala to odciążyć główny uniwersalny procesor komputera, który może zająć się np. obliczeniami związanymi ze sztuczną inteligencją bohaterów świata wirtualnego. Z każdą kolejną generacją procesorów graficznych i zwiększającą się ich mocą obliczeniową grafika staje się coraz bardziej szczegółowa i realistyczna. Podsumowanie Wykorzystanie procesora graficznego jako wsparcie sprzętowe jest aktualnie dość powszechne (np. Blender), jednak implementacja programu wykorzystującego dwa rodzaje procesorów na raz może okazać się problematyczna.
Prawo Blinna As technology advances, rendering time remains constant. Technologia wciąż się rozwija, ale wiele mechanizmów działa tak samo długo, jak kiedyś. Zależność tę opisał James Blinn, naukowiec komputerowy w NASA. Podczas renderowania moce obliczeniowe nie są stosowane do skrócenia czasu procesu, ale są używane do wyrenderowania bardziej złożonych obrazów. Często porównuje się renderowanie obrazów w komputerze do pisania tekstów. Obecnie pisarze mają dużo więcej możliwości związanych z edycją tekstu niż na przykład 400 lat temu. Nie znaczy to jednak, że pisanie stało się szybsze i łatwiejsze niż było kiedyś. Napisanie powieści, mimo zaawansowanych technologii, zajmuje wciąż tyle samo czasu, co kiedyś. Technologia daje nam możliwość napisania bardziej obszernych powieści – np. z większą ilością postaci i wątków, a także daje możliwość rozwinięcia naszej wyobraźni. Z renderowaniem jest podobnie. Jeżeli studio animacji poświęca dziś np. 10 godzin na renderowanie filmu, to za 10 lat będzie najprawdopodobnie poświęcać tyle samo czasu, mimo że postęp technologiczny będzie wzrastał. Dzieje się tak, ponieważ graficy używają bardziej szczegółowych siatek, więcej złożonych narzędzi, bardziej zaawansowanych shaderów i skomplikowanych ułożeń światła.
26
Prawo Blinna nie oznacza jednak, że film takiej samej jakości i o takim samym stopniu skomplikowania będzie się renderował tyle samo dziś i tyle samo za 10 lat. W 1995 roku wyrenderowanie jednej klatki Toy Story w rozmiarach 1536 x 922 piksela zajęło 30 godzin. Obecnie wyrenderowanie takiej samej klatki byłoby raczej mierzone w minutach.
27
Źródła 1. Birn, Jeremy. Cyfrowe oświetlenie i rendering. Wydanie II, Wydawnictwo Helion, Gliwice 2007. 2. Foley D., James, Andries van Dam. Wprowadzenie do grafiki komputerowej, Wydawnictwo Naukowo-Techniczne, Warszawa 2001.
3. http://wazniak.mimuw.edu.pl/index.php?title=GKIW_Modu%C5%82_9__O%C5%9Bwietlenie_globalne 4. http://plasticdemo.nazwa.pl/webpage/downloadables/Globalne_Oswietlenie_W_Czasie_Rzeczywistym.p df 5. http://kik.pcz.pl/~mg/owsiiz/w3d/w_4.pdf 6. http://www.kngk.agh.edu.pl/sesje/2007/rendering.pdf 7. http://lighting.pl/index.php?s_id=10&akcja=artykul&a_id=195&typ=1 8. http://mst.mimuw.edu.pl/wyklady/gk1/vcamera.hd.png 9. http://www.cgw.com/Press-Center/Web-Exclusives/2013/Blinn-s-Law-and-the-Paradox-ofIncreasing-Perfor.aspx 10. http://www.navs.8m.com/seminar/radiosity.html 11. http://en.wikipedia.org/wiki/Radiosity_(3D_computer_graphics) 12. http://en.wikipedia.org/wiki/Radiosity_(heat_transfer) 13. http://www.wirtualne_laboratorium.republika.pl/swiatlo.html 14. http://www.navs.8m.com/seminar/radiosity.html 15. http://mst.mimuw.edu.pl/lecture.php?lecture=ona&part=Ch1 16. http://groups.csail.mit.edu/graphics/classes/6.837/F03/lectures/18_radiosity.pdf 17. http://web.cs.wpi.edu/~matt/courses/cs563/talks/radiosity.html 18. http://www.youtube.com/watch?v=_EW-33YXTGU 19. http://www.youtube.com/watch?v=4BBkjzwqMSU 20. http://sound.eti.pg.gda.pl/student/so/03-OswietlenieGlobalne.pdf 21. http://www.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15864s05/www/assignment3/rayTalk.pdf 22. http://graphics.ucsd.edu/~henrik/papers/ 23. http://percepcja44.republika.pl/percepcja3d.html 24. https://www.youtube.com/watch?v=-v3-l8Xi9UA 25. http://help.chaosgroup.com/vray/help/150SP1/tutorials_pmap.htm 26. http://128.148.32.110/courses/csci2240/papers/photon_mapping.pdf 27. http://marctenbosch.com/photon/ 28. http://www.zsk.ict.pwr.wroc.pl/zsk/dyd/intinz/gk/lab/cw_7_dz 29. http://www.scratchapixel.com/lessons/3d-basic-lessons/lesson-1-writing-a-simpleraytracer/implementing-the-raytracing-algorithm/
28