M. Kupczyk - Oświetlenie w grach
Transkrypt
M. Kupczyk - Oświetlenie w grach
O świetlenie w grach komputerowych. Deferred Shading. Mateusz Kupczyk1 1 Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok I Politechnika Częstochowska [email protected] Streszczenie Celem niniejszej pracy jest przedstawienie roli o świetlenia w grach trójwymiarowych oraz ogólne zaprezentowanie kilku najpopularniejszych sposobów oświetlenia sceny (z użyciem lightmap, per vertex i per pixel). Głównym zamierzeniem jest natomiast porównanie tych technik z technik ą relatywnie nową - "deferred shading", która reprezentuje odmienne podej ście w renderowaniu oświetlenia i dzięki odpowiedniej mocy obliczeniowej dzisiejszych kart graficznych jest stosowana we współczesnych grach 3D. 1 Wst ęp Postęp technologiczny oraz wydajność dzisiejszego sprzętu pozwalają twórcom gier na jeszcze dokładniejsze symulowanie zjawisk, które mają odzwierciedlenie w rzeczywistości. Dzięki temu obecne gry pozwalają cieszyć się m.in. coraz to lepszym odwzorowaniem fizyki obiektów, inteligentniejszym zachowaniem przeciwnika sterowanego przez komputer oraz przede wszystkim zaawansowaną, szczegółową oprawą graficzną. Wszystkie te dziedziny mają duży wpływ na odbiór gry przez użytkowników, także jako produktu (za który przecież zapłacili i od którego mają prawo wymagać, by spełniał ich oczekiwania). Czasy, w których na uświadczenie dynamicznego oświetlenia oraz cieni mogli sobie pozwolić tylko posiadacze najnowszych kart graficznych, odeszły do lamusa, a gra, w której posta ć podczas dialogu nie porusza ustami, wywołuje uśmiech na twarzach graczy. Dlatego te ż konieczna jest dbałość producentów gier o to, jak ich produkt się prezentuje, a okresowy „wyścig” kilku największych tytułów o miano „najładniejszego” dodaje argumentów, aby takową grę zakupić. Oświetlenie ma niewątpliwie ogromny wpływ na ostatecznie wygenerowany obraz. Poniższy obrazek przedstawia porównanie wyglądu tej samej sceny w dwóch wersjach: nieoświetlonej oraz ze światłem punktowym. 1 Rys. 1. Wpływ o świetlenia na ko ńcowy efekt. Po lewej stronie scena nieo świetlona. (źródło: http://irrlicht.sourceforge.net) Różnica jest zauważalna. Dodatkowo w grach, w odró żnieniu od grafiki wyrenderowanej w studio graficznym, konieczne jest generowanie obrazu w czasie rzeczywistym, jednocześnie zachowuj ąc płynne dzia łanie (przynajmniej ok. 25-30 klatek na sekundę) na wielu ró żnych konfiguracjach sprz ętowych. Do dzi ś jest to cz ęsto przeszkodą w osiągni ęciu zamierzonych efektów, jednak dzi ęki wydajno ści obecnych komputerów możemy jeszcze dokładniej je odwzorowa ć. Od wielu lat powstawa ły i ciągle są opracowywane nowe techniki oświetlania sceny, aby ten cel osi ągn ąć. 2 O świetlenie w teorii W celu dokładnego zasymulowania o świetlenia obiektów przez konkretne źród ła świat ła stosowanych jest wiele ró żnych modeli lub ich rozszerze ń. Podstawowym, opisanym w tym rozdziale, b ędzie uproszczony model Phong. Ostateczny kolor powierzchni oświetlonej mo żna zapisa ć za pomoc ą poni ższego wzoru. kolor powierzchni = emisja + otoczenie + dyfuzja Wspołczynnik emisji (ang. emissive) określa świat ło emitowane przez obiekt - jest to zwykły kolor RGB dodawany do koloru powierzchni. Zazwyczaj jest wy łączony (przypisana jest mu warto ść #000000), jednak u życie go bardzo u łatwia tworzenie efektów niestandardowych. Współczynnik otoczenia (ang. ambient) określa nat ężenie ogólnego świat ła panuj ącego na scenie, które pochodzi ze wszystkich stron i nie zale ży od żadnego konkretnego kierunku ani źród ła. Ma on na celu zasymulowa ć efekt świat ła odbitego od innych obiektów, jednak ze względu na kosztowno ść obliczeniow ą zazwyczaj jest sta łą wartości ą przypisywaną całej scenie, cho ć popularne jest równie ż przeprowadzanie skomplikowanych obliczeń już na etapie projektowania gry. Kilka lat temu firma Crytek po raz pierwszy zastosowała technik ę dokładniejszego przybli żania tego efektu w czasie rzeczywistym (SSAO, ang. Screen Space Ambient Occlusion), do dziś jest ona ci ągle rozwijana i stosowana w najnowszych grach. 2 Współczynnik rozproszenia (ang. diffuse) dotyczy świat ła, które ze wzgl ędu na chropowatość powierzchni obiektu odbija si ę od niej we wszystkich kierunkach. Natężenie świat ła odbitego od obiektu jest proporcjonalne do k ąta padania świat ła na t ę powierzchni ę. Wzór pozwalający na obliczenie współczynnika rozproszenia: rozproszenie=K d ×K l ×max( N⋅L , 0) gdzie: • • • • Kd to kolor rozproszenia obiektu Kl to kolor świat ła N to znormalizowana normalna powierzchni L to znormalizowany wektor skierowany w stron ę źród ła świat ła Rys. 2. Sposób obliczania świat ła rozproszonego w punkcie P. Iloczyn skalarny wektorów N i L daje w rezultacie miar ę k ąta mi ędzy tymi wektorami, a zastosowanie funkcji max pozwala ograniczy ć wynik do przedziału <0,1>. Dzi ęki temu w łatwy sposób uzyskujemy efekt, w którym świat ło padaj ące z góry ma najwi ększe nat ężenie (równe 1, stopniowo zmieniaj ące si ę wraz z k ątem padania), a powierzchnia skierowana „ty łem” do źród ła świat ła nie zostanie o świetlona (współczynnik wynosi 0). 3 Ró żne techniki realizacji o świetlenia w grach Na przestrzeni lat, zarówno poziom skomplikowania wy świetlanych scen, jak i jako ść prezentowanych efektów świetlnych, zmienia ły si ę bardzo znacz ąco. Zadaniem programistów było (i wci ąż jest) dostosowanie gry do platformy sprz ętowej graczy, co jeszcze kilka lat temu wi ąza ło si ę z powa żnym uproszczeniem modelu o świetlenia. Przede wszystkim niska wydajno ść komputerów i ch ęć uzyskania jak najbardziej zadowalaj ących efektów zmusi ły twórców gier do opracowania technik, które przy obecnych ograniczeniach sprz ętu pozwalały na uzyskanie po żądanego celu. Pierwsz ą technik ą, która pozwala ła uzyska ć naprawd ę dobre efekty, by ło u życie map świetlnych (ang. lightmaping). Cała idea polega na obliczeniu nat ężenia świat ła dla ka żdego punktu na scenie ju ż na etapie projektowania poziomu (za pomoc ą odpowiedniego narz ędzia wbudowanego w edytor mapy). Wyniki skomplikowanych oblicze ń (które uwzgl ędnia ły równie ż wp ływ świat ła odbitego od innych obiektów, 3 ang.radiosity) były zapisywane na specjalnej teksturze, która by ła u żywana przy renderowaniu obrazu w czasie gry. Rys. 3. Sposób działania map świetlnych. Kolejno od lewej: tekstura ściany, mapa świat ła, o świetlony obiekt. Każdy obiekt był pokrywany dwiema teksturami – pierwsza okre śla ła wygl ąd obiektu, druga natomiast nat ężenie świat ła w danym punkcie. Dzi ęki wymno żeniu tych dwóch kolorów obszary słabiej o świetlone zosta ły przyciemnione, a te o wi ększym natężeniu rozja śnione. Zalet ą tego rozwi ązania by ła wydajno ść i jako ść uzyskiwanych efektów. Twórcy poziomu nie byli praktycznie w ogóle ograniczeni, gdyż skomplikowanie modelu o świetlenia lub ustawienie wi ększej ilo ści świate ł przek łada ło się tylko i wyłącznie na d łu ższy czas generowania mapy świate ł, pozostawiaj ąc szybkość działania gry bez zmian. Sporymi wadami by ły natomiast: czas „wypalania” lightmap, statyczność o świetlenia i rozmiar przechowywanych danych. Ka żda zmiana układu oświetlenia przez projektanta mog ła skutkowa ć konieczno ści ą powtórnego przeprowadzania nawet kilkunastogodzinnych obliczeń. Kolejnym typem o świetlenia, które w odró żnieniu od lightmappingu umożliwiało ustawienie na scenie dynamicznych świate ł, by ło oświetlenie obliczane dla wierzchołków (ang. per-vertex lighting). Około 1999 roku producenci kart graficznych wprowadzili sprz ętowe wsparcie dla tej techniki (T&L), jednak posiada ły one ograniczenie do 8 świateł oddziałuj ących jednocze śnie na rysowany obiekt. Rys. 4. Wygenerowane oświetlenie per-vertex dla ró żnych poziomów szczegółowości ( źród ło: [1]) 4 Obiekt trójwymiarowy w grze sk łada si ę z siatki trójk ątów. W o świetleniu per-vertex, dla każdego wierzchołka wielok ąta obliczane jest nat ężenie świat ła, a wynik jest interpolowany dla całej jego powierzchni. Technika ta daje zadowalaj ące efekty w przypadku powierzchni o skomplikowanej strukturze, jednak dla obiektów o prostej budowie, gdzie wierzchołki s ą od siebie mocno oddalone, efekt jest jedynie przybliżony, a niekiedy wr ęcz niepoprawny. Wp ływ skomplikowania siatki na ko ńcowy rezultat przedstawia rys. 4. Zaletami tej techniki są przede wszystkim wydajność i mo żliwo ść dynamicznego oświetlenia sceny, cho ć cz ęsto rezultaty uzyskiwane dzi ęki niej s ą niewystarczaj ące. Ciekawym podejściem wykorzystywanym przez twórców gier by ło po łączenie oświetlenia per-vertex z mapami świate ł – świat ła statyczne by ły renderowane z użyciem lightmap, natomiast dynamiczne o świetlenie wierzcho łkowe oddzia ływa ło tylko na niektóre, odpowiednio oznaczone przez projektantów obiekty. Naturalnym rozwiązaniem problemu braku odpowiedniego zag ęszczenia siatki wielokątów dla o świetlenia per-vertex jest obliczanie warto ści nat ężenia świat ła dla każdego piksela, co jest podstawą działania techniki oświetlenia per-pixel (ang. perpixel lighting). W 2004 roku, dzi ęki odpowiedniej mocy obliczeniowej ówczesnych komputerów, John Carmack mógł po raz pierwszy u ży ć tego typu o świetlenia na du żą skalę w grze Doom 3, a wprowadzenie do uk ładów graficznych mo żliwo ści programowania jednostek Vertex i Pixel Shader rozpowszechni ło u życie tej metody na stałe. Jako ść uzyskiwanych efektów była nieporównywalnie lepsza z metod ą per-vertex i przede wszystkim niezale żna od ilo ści wielok ątów. Nak łada ła jednak ograniczenie renderowania tylko jednego świat ła w ka żdym przebiegu, co oznacza tyle, że dla skomplikowanej sceny zbudowanej z 200 000 trójk ątów o świetlonej pi ęcioma świat łami, karta graficzna musiała przetworzy ć milion wielok ątów, co jest ju ż sporym obciążeniem. Z tego te ż powodu powsta ło wiele sposobów optymalizowania renderingu oświetlenia, m. in. pomijanie rysowania świate ł niewidocznych lub znajduj ących si ę w bardzo dalekiej odległo ści od gracza. 4 Deferred Shading Wydajność standardowego, wieloprzebiegowego podej ścia do rysowania świate ł per-pixel pozostawia wiele do życzenia. Rozwi ązanie problemu renderowania geometrii tyle razy, ile jest świate ł na scenie, stanowi technika deferred shading, która poniekąd stanowi jej rozszerzenie. Pierwsza praca na temat tej metody zosta ła opublikowana ju ż w 1988 roku przez Michaela Deeringa [5]. Pomysł był rozwijany i modyfikowany przez innych, by na początku lat 90-tych przyj ąć form ę, na której bazuj ą dzisiejsze implementacje. Od początku miał on na celu zmniejszenie liczby oblicze ń w skomplikowanych modelach oświetlenia, jednak dopiero od kilku lat jeste śmy w posiadaniu sprz ętu b ęd ącego w stanie praktycznie wykorzystać tę technik ę w czasie rzeczywistym. Deferred shading wykorzystuje całkowicie odmienne podej ście w rysowaniu oświetlenia. Cały proces jest podzielony na dwie fazy: faz ę geometrii i faz ę o świetlenia. 5 Faza geometrii, zamiast wyświetlania wyniku od razu na ekran monitora, polega na wyrenderowaniu wszystkich potrzebnych danych do specjalnego bufora (ang. G-Buffer – Geometry Buffer). W praktyce jest to kilka tekstur, z których ka żda z nich przechowuje informacje zapisane w postaci kolorów, takie jak pozycj ę piksela, wektor normalny, kolor tekstury, kolory rozproszenia, emisji i inne atrybuty materia łu. Obecne karty graficzne pozwalają na u życie MRT (ang. Multi Render Target), dzięki czemu wypełnienie bufora mo że odby ć si ę w jednym przebiegu. W fazie oświetlenia, zamiast kosztownego wyświetlania obiektów, wykorzystywane s ą dane zgromadzone w buforze. Dzi ęki temu, niezale żnie od poziomu skomplikowania sceny, koszt dodania ka żdego kolejnego świat ła jest znikomy. Wyrenderowanie następnego świat ła polega na narysowaniu zwyk łego prostok ąta, natomiast odpowiednio zaprogramowana jednostka cieniowania pikseli dokona obliczeń i wyświetli zamierzony wynik. Rys. 5. Od lewej: oświetlona scena i u żyte tekstury G-bufora (pozycji, koloru tekstury i wektorów normalnych) dla przykładowej aplikacji [6]. Dzięki zastosowaniu deferred shadingu mo żemy uzyska ć ogromny wzrost wydajności przy renderowaniu rozbudowanych scen z du żą ilo ści ą dynamicznych świateł. W niektórych grach projektanci poziomów i graficy wykorzystuj ą ten fakt do tego stopnia, że umieszczaj ą nawet do kilkunastu świate ł o bardzo znikomym wp ływie (np. promieniu kilku pikseli) w rogu pomieszczenia, symuluj ąc w ten sposób wspomniany na początku pracy efekt świat ła odbitego od innych powierzchni. Niestety technika ta nie jest pozbawiona wad. Oprócz obci ążania karty graficznej wypełnianiem pikseli oraz wi ększym zapotrzebowaniem na pami ęć, problematyczną kwestią jest sposób rysowania obiektów przezroczystych - elementy prześwituj ące musimy rysowa ć osobno, nak ładaj ąc je na wcze śniej wygenerowane t ło. Pozostałe niedogodności, z których najbardziej uporczyw ą by ł brak sprz ętowego wygładzania kraw ędzi (ang. anti-aliasing), w wi ększo ści zostały wyeliminowane wraz z rozwojem ostatnich generacji kart graficznych - DirectX 10 oraz 11 wprowadzają znacz ące udogodnienia. 5 Porównanie wydajno ści metod o świetlenia per-pixel Testy wydajności dwóch metod o świetlenia per-pixel (podej ścia standardowego oraz deferred shadingu) zostały przeprowadzone przy u życiu aplikacji testowej (napisanej w C++ z u życiem DirectX 9.0c), na komputerze wyposa żonym w procesor 6 Intel Core i5 M480 2,66 GHz, 8GB pami ęci RAM oraz kart ę graficzn ą ATI Radeon Mobility HD 5470. Kryterium oceny wydajno ści by ła ilo ść uzyskanych klatek na sekundę (ang. frames per second – FPS). Rys. 6. Zrzut ekranu z aplikacji testowej – 48 w pełni dynamicznych świate ł. Rendering oświetlenia został wykonany dla dwóch ró żnych scen – pierwsza z nich, o niskim stopniu skomplikowania, sk łada ła si ę z 4 tysi ęcy wielok ątów, druga natomiast z ponad 35 tysięcy. Wyniki przestawiaj ą wykresy 1. i 2. Wykres 1. Test wydajności podczas renderingu pierwszej sceny. Standardowe podej ście w rysowaniu oświetlenia per-pixel sprawdzi si ę tylko przy mało skomplikowanych scenach oraz małej ilo ści dynamicznych świate ł. Ka żde kolejne źródło świat ła znacz ąco obni ża wydajno ść tej metody, dzi ęki czemu ju ż przy zastosowaniu kilkunastu świate ł widoczna jest przewaga deferred shadingu. 7 Wykres 2. Test wydajności podczas renderingu drugiej sceny. Tak jak w poprzednim przypadku, zwiększanie liczby świate ł znacznie odbija si ę na wydajności standardowej techniki o świetlenia, podczas gdy koszt ka żdego kolejnego źródła świat ła w deferred shadingu jest niezale żny od ilo ści rysowanej geometrii. Znaczna ilość renderowanych wierzchołków oraz dynamicznych źróde ł świat ła są przykładami sytuacji, w których deferred shading sprawdzi si ę znakomicie, co potwierdzają wyniki powyższych testów. 6 Podsumowanie Wraz ze wzrostem realizmu gier komputerowych nale ży przypuszcza ć, i ż używane modele o świetlenia b ęd ą coraz bardziej skomplikowane, a zapotrzebowanie na moc obliczeniow ą będzie ci ągle ros ło. Z tego powodu mo żna niew ątpliwie uzna ć Deferred Shading za technik ę najlepiej spełniaj ąc ą wymagania zarówno programistów, jak i graczy – dzi ęki zaoszcz ędzonym przebiegom renderingu uzyskana wydajno ść jest satysfakcjonująca, a co najwa żniejsze dzieje si ę to praktycznie bezstratnie w stosunku do oprawy graficznej. Poziom graficzny prezentowany przez niektóre gry korzystaj ące z tej metody (m.in. S.T.A.L.K.E.R., Gears of War czy Crysis) potwierdzaj ą jako ść uzyskanych efektów. Bibliografia [1] R. Fernando, M. J. Kilgard, Język Cg. Programowanie grafiki w czasie rzeczywistym, Gliwice: Wydawnictwo HELION, 2003. [2] K. Dempski, DirectX. Rendering w czasie rzeczywistym, Gliwice: Wydawnictwo HELION, 2003. [3] W. Toman, Deferred Shading jako wydajna technika oświetlenia, Siedlce, 2008. [4] S. Hargreaves, M. Harris, Deferred Shading, 2004. [5] M. Deering, S. Winner, B. Schediwy, C. Duffy, N. Hunt, The Triangle Processor and Normal Vector Shader: A VLSI System for High Performance Graphics, 1988. [6] NVIDIA Corporation, Deferred Shading. User Guide, 2004. 8