9. Radiosity, czyli metoda energetyczna

Metoda energetyczna, bardziej ściśle nazywana metodą bilansu energetycznego lub bilansu promieniowania, opisuje równowagę energii światła w zamkniętej przestrzeni, przy założeniu, że procesy emisji i odbicia są idealnie rozpraszające. Metoda pozwala wygenerować bardzo realistyczne obrazy powierzchni rozpraszających, zawierających subtelne cienie i półcienie i delikatnie oświetlone szczegóły, a więc uzyskać efekty niemożliwe do otrzymania metodą śledzenia promieni. Nie nadaje się natomiast do symulacji wzajemnych odbić między obiektami błyszczącymi. Dlatego dopiero połączenie obu tych metod prowadzi do uzyskania prawdziwie fotorealistycznych obrazów.

 

Metoda bilansu energetycznego zakłada zachowanie energii światła w zamkniętych środowiskach, zatem energia emitowana lub odbijana od każdej powierzchni jest w całości odbijana bądź pochłaniana przez inne powierzchnie. Na oświetlenie składa się suma świateł bezpośredniego oraz odbitego. Światło bezpośrednie można zdefiniować jako pochodzące bezpośrednio ze źródła światła, zmodyfikowane wyłącznie przez czynniki takie, jak dym, mgła lub kurz. Za odbite uznaje się światło, które na swej drodze od źródła zostało odbite od jednej lub więcej powierzchni. Zamiast rozpatrywania oświetlenia otoczenia prowadzona jest więc dokładna symulacja odbić międzyobiektowych.

Rysunek 65. Oświetlenie powierzchni światłem bezpośrednim i odbitym.

Energia opuszczająca powierzchnię jest zmieniana w zależności od właściwości odbijających powierzchni, które określają, jaka część światła zostaje odbita, a jaka pochłonięta (lub przetransmitowana) przez obiekt. Przeważnie jedyną modyfikacją światła odbijanego jest zmiana jego barwy. Energia wychodząca z danej powierzchni jest sumą energii emitowanej przez powierzchnię, odbijanej lub transmitowanej przez tę powierzchnię. 

Rysunek 66. Składniki energii opuszczającej powierzchnię

 Pierwszym krokiem w algorytmie metody energetycznej jest ustalenie interakcji światła między obiektami sceny niezależnie od punktu obserwacji. Aby tego dokonać, musimy podzielić scenę wraz ze znajdującymi się w niej obiektami na elementarne płaty (najczęściej wieloboki), o których zakłada się, że mają stałą energię świetlną (promienistość). Otrzymana w ten sposób siatka płatów jest bardzo gęsta, znacznie gęstsza niż początkowa siatka obiektów definiujących powierzchnię (o ile jest ona zadana siatką 3D). Każdy z płatów wynikłych z takiego podziału w określony sposób odbija, przepuszcza (transmituje) lub emituje światło (jedna możliwość nie wyklucza innych). Na każdy z płatów mają wpływ wszystkie pozostałe płaty znajdujące się w danej scenie. W wyniku dokonanego bilansu energii otrzymuje się otrzymuje się promienistości każdego płata, a zatem intensywność każdego z nich. Wartości te są niezależne od obserwatora.

Następnym krokiem jest renderowanie obrazu dla wybranego przez nas rzutu, co wiąże się z dodatkowymi obliczeniami powierzchni widocznych z pozycji obserwatora oraz interpolacją intensywności. To zasadniczo różni tę metodę od metody śledzenia promieni, która pozwala wyłącznie na stworzenie obrazu zależnego od uprzednio obranego punktu obserwacji. Tutaj mając obliczoną emisję światła dla każdej powierzchni renderujemy od razu całą scenę określając tylko punkt obserwacji.

 

W metodzie energetycznej każda powierzchnia może emitować światło, w związku z czym wszystkie źródła światła są modelowane jako mające powierzchnię. Aby poprowadzić dalej rozważania, musimy najpierw podzielić stworzone przez nas środowisko - czyli obiekty i źródła światła - na skończoną liczbę dyskretnych płatów o skończonej powierzchni, zakładając, że każdy z płatów jednolicie odbija i emituje światło na całej swojej powierzchni.

 

Rysunek 67. Podział środowiska na n płatów.

Po przyjęciu założenia, że każdy płat jest nieprzezroczystym, rozpraszającym emiterem i reflektorem,  otrzymuje się następujące równanie bilansu energetycznego:

B_{i} =E_{i} +p_{i}\sum\limits _{1\leq j\leq n} B_{j} F_{i-j}

gdzie:

Bi   - promienistość płata i,

Bj   - promienistość płata j.

Promienistość jest mierzona w W/m2 - czyli energia/jednostka czasu/jednostka powierzchni.

Ei   - energia świetlna emitowana samoistnie przez płat i (ma taką sama jednostkę jak promienistość),

ρi   - współczynnik rozproszenia światła (zdolność odbijania) dla płata i - współczynnik bezwymiarowy <1.

Fj-i - współczynnik sprzężenia (bezwymiarowy <1) - określa, jaka część energii opuszczająca płat j trafia do płata i (uwzględnia kształt i względną orientację płatów oraz obecność wszelkich zakłócających płatów).

Podane wyżej równanie bilansu energetycznego, opisujące oddziaływanie światła między płatami w zamkniętym środowisku, można zapisać w postaci następującego układu równań, w którym niewiadomymi są promienistości Bi płatów:

 

$\displaystyle \left[\begin{matrix} \begin{matrix} \begin{matrix} \begin{matrix} 1-p_{1} F_{1-1}\\ -p_{2} F_{2-1}\\ \cdot \end{matrix}\\ \begin{matrix} \cdot \\ \cdot \\ -p_{n} F_{n-1} \end{matrix} \end{matrix} & \begin{matrix} \begin{matrix} -p_{1} F_{1-2}\\ 1-p_{2} F_{2-2}\\ \cdot \end{matrix}\\ \begin{matrix} \cdot \\ \cdot \\ -p_{2} F_{n-2} \end{matrix} \end{matrix} \end{matrix} & \begin{matrix} \begin{matrix} \begin{matrix} \cdots \\ \cdots \\ \cdots \end{matrix}\\ \begin{matrix} \cdots \\ \cdots \\ \cdots \end{matrix} \end{matrix} & \begin{matrix} \begin{matrix} -p_{1} F_{1-n}\\ -p_{2} F_{2-n}\\ \cdot \end{matrix}\\ \begin{matrix} \cdot \\ \cdot \\ 1-p_{n} F_{n-n} \end{matrix} \end{matrix} \end{matrix} \end{matrix}\right]\left[\begin{matrix} \begin{matrix} B_{1}\\ B_{2}\\ \cdot \end{matrix}\\ \begin{matrix} \cdot \\ \cdot \\ B_{n} \end{matrix} \end{matrix}\right] =\left[\begin{matrix} \begin{matrix} E_{1}\\ E_{2}\\ \cdot \end{matrix}\\ \begin{matrix} \cdot \\ \cdot \\ E_{n} \end{matrix} \end{matrix}\right] \ $

 

Macierz tego układu jest diagonalnie dominująca i najczęściej rozwiązuje się go korzystając z metody iteracyjnej Gaussa - Seidela.

 

Tabela 1. Graficzne przedstawienie obliczania promienistości.

Po rozwiązaniu układu równań otrzymujemy promienistość (a stąd intensywność) dla każdego płata. Wartości te są stałe i niezależne od punktu patrzenia, co umożliwia - w kolejnym etapie - rendering płatów z dowolnego punktu obserwacji przy wykorzystaniu algorytmu wyznaczania powierzchni widocznych.

 

Podczas odtwarzania obrazu intensywność w pikselach wewnątrz każdego płata wyznacza się interpolując intensywności w wierzchołkach analogicznie jak w metodzie Gourauda. W tym celu należy najpierw wyznaczyć promienistość wierzchołków - oblicza się ją jako średnią promienistość sąsiednich płatów.

W przypadku gdy wierzchołek jest wewnętrzny dla powierzchni, to przypisuje mu się średnią wartość promienistości płatów, pomiędzy którymi leży.  Promienistość wierzchołków leżących na krawędzi wyznacza się korzystając z promienistości płatów sąsiadujących z punktem bądź znajdujących się w jego bliskim otoczeniu, np. wg wzoru (Rysunek 68).

B=\max(0,\left(3B_1+3B_2-B_3-B_4\right))

Rysunek 68. Wyznaczanie romienistości w wierzchołku

 

Największą trudność w metodzie bilansu promieniowania stanowi obliczanie współczynników sprzężenia geometrycznego Fi-j  (zwanych też współczynnikami kształtu) między płatami. Współczynniki te zależą wyłącznie od geometrii powierzchni.

Aby uzyskać współczynnik sprzężenia płata Ai do płata Aj, należy wykonać całkowanie po powierzchni obu płatów:

 

F_{i-j}=\frac{1}{A_i}\int_{A_i}^{\ }\int_{A_j}^{\ }{\frac{\cos{\theta_i}\cos{\theta_j}}{\pi r^2}H_{ij}dA_jdA_i}

 

gdzie:

dAi, dAj - powierzchnie elementarne,

r - długość promienia łączącego płaty,

Θi - kąt między promieniem a normalną do Ai,

Θj - kąt między promieniem i normalną do Aj.

Hij - współczynnik przyjmujący wartość 1 lub 0 w zależności od tego, czy dAj jest widoczne z dAi, czy też nie.

 

Rysunek 69. Wielkości geometryczne potrzebne do obliczenia współczynnika sprzężenia między powierzchniami.

 

Zgodnie z teorią Nusselta obliczanie współczynnika sprzężenia między powierzchnią dA, a powierzchnią Aj jest równoważne rzutowaniu widocznych z dAi części płata Aj na jednostkową półkulę ze środkiem w dAi, a następnie dalsze rzutowanie tego rzutu na jednostkowe koło będące podstawą półkuli i dzielenie przez pole koła:

Rysunek 71. Metoda hemisphere

Rysunek 70. Metoda "hemicube" - zasada obliczania współczynnika sprzężenia poprzez rzutowanie płata na półsześcian; elementarny płat dAi znajduje się w środku układu współrzędnych, płat Aj jest tu trójkątem.

 

Zamiast tej analitycznej metody można zastosować metodę numeryczną, wykorzystującą rzutowanie płatów na odpowiednią ścianę półsześcianu ("hemicube"), stanowiącego przybliżenie półkuli będącej obszarem całkowania; współczynnik sprzężenia jest aproksymowany poprzez sumowanie wartości współczynników sprzężenia przypisanych do wszystkich elementarnych kwadratów na ścianach półsześcianu zakrytych przez płat Aj. Rzutowanie wszytkich płatów na powierzchnie półsześcianu odbywa się z wykorzystaniem z-bufora, tak by wyznaczyć wielobok najbliższy dla każdego piksela półsześcianu.

 

W celu zwiększenia efektywności zamiast jednokrotnego rozwiązania układu równań opisującego bilans energii i wyznaczania naraz wszystkich współczynników sprzężenia i promienistości wszystkich płatów, stosuje się metodę tzw. progresywnych ulepszeń, w której do tego końcowego rozwiązania dochodzi się, z pewnym przybliżeniem, w kolejnych krokach. Na początku wybiera się płaty pochodzące od źródeł światła i z każdego z nich kolejno wysyła się promieniowanie do wszystkich pozostałych płatów sceny, wyznaczając współczynniki sprzężenia ich z danym płatem, a na tej podstawie przyrost ich promienistości. Potem udział w oświetleniu całej sceny biorą kolejno te płaty, które odebrały od innych najwięcej energii, i promieniowanie od nich pochodzące jest akumulowane przez pozostałe płaty. W ten sposób następuje stopniowe rozjaśnianie sceny i zbliżanie się do końcowego bilansu promieniowania; proces przerywany jest, gdy zmiany promieniowania płatów po kolejnej iteracji są niezauważalne lub po przekroczeniu zadanej liczby iteracji (np. 100, jak w Rhino).

 

Jest oczywiste, że jakość obrazów generowanych metodą radiosity zależy nie tylko od liczby iteracji, ale też od sposobu podziału sceny na płaty (wieloboki). Podział taki zwykle dokonywany jest adaptacyjnie, w różny sposób dla płatów emitujących światło i dla absorberów, przy zadanych ustawieniach granicznych wielkości płatów.

Metodę energetyczną bardzo często łączy się z metodą śledzenia promieni. Obliczenia wykonywane są wówczas w dwu fazach:

  • Faza niezależna od położenia obserwatora - wyznaczanie składowej rozproszonej (radiosity). Następuje tu podział powierzchni obiektów modelujących scenę na powierzchnie elementarne i wyznaczanie rozkładu oświetlenia rozproszonego;
  • Faza zależna od położenia obserwatora - wyznaczanie składowej lustrzanej i przepuszczonej (ray tracing) i sumowanie jej z informacją o rozkładzie oświetlenia rozproszonego otrzymaną w fazie pierwszej.

W ten sposób uzyskuje się obrazy o najwyższym stopniu realizmu - ale trzeba pamiętać, że jest to metoda bazująca na bilansie energii w zamkniętej przestrzeni, czyli dobrze nadaje się np. do wnętrz architektonicznych czy nawet do obrazowania zaprojektowanych modeli usytuowanych wewnątrz pomieszczeń. Niekiedy stosuje się ją też do obrazowania modeli "jako takich " czy scen w otwartej przestrzeni, ale wtedy należy tę przestrzeń ograniczyć dodatkowo zamodelowaną kopułą nieboskłonu, będącą emiterem światła. Tego typu źródło światła dobrze symuluje światło dzienne, słoneczne, zastępuje więc wprowadzanie punktowego źródła światła i pozwala uzyskać całkowicie odmienne, często bardziej realistyczne efekty.

 

Metoda radiosity, kiedyś czysto teoretyczny pomysł naukowców bez szans na implementację ze względu na złożoność obliczeń, wraz ze wzrostem mocy obliczeniowej komputerów staje się coraz bardziej powszechna i w ostatnich latach stała się dostępna nie tylko w najdroższych systemach grafiki komputerowej, ale również w systemach CAD/CAM i takich programach jak Rhinoceros, POV-Ray i Blender.

 

Poniżej przedstawiono parę obrazków wygenerowanych w Rhino. Pierwszy z nich pokazuje cienie i odbicia obliczone metodą energetyczną, drugi - po przejściu przez etap działania ray tracera. Warto zwrócić uwagę na różnice pomiędzy wyglądem obiektów przezroczystych i odbijających po i przed przeliczeniem obrazka przy pomocy ray tracingu.

 

 

Rys. 11.36. Cienie i odbicia policzone przy pomocy metody energetycznej - tylko po barwie cieni można się domyślić, które obiekty są przezroczyste (bo cienie ich nie są czarne).

 

Rys. 11.37. Ten sam rysunek dodatkowo policzony metodą Raytracingu - dokładnie widać, który obiekt jest przezroczysty, a także który ma powierzchnię metaliczną.