Grafika w czasie rzeczywistym wykorzystuje różne przybliżenia, aby poradzić sobie z kosztami obliczeniowymi symulacji oświetlenia pośredniego, kompromis między wydajnością w czasie wykonywania a wiernością oświetlenia. Jest to obszar aktywnych badań, a nowe techniki pojawiają się co roku.
Otaczające światło
Na najprostszym końcu zakresu można zastosować oświetlenie otoczenia : globalne, wszechkierunkowe źródło światła, które stosuje się do każdego obiektu na scenie, bez względu na rzeczywiste źródła światła lub lokalną widoczność. Nie jest to wcale dokładne, ale jest niezwykle tanie, łatwe do poprawienia przez artystę i może wyglądać dobrze w zależności od sceny i pożądanego stylu wizualnego.
Typowe rozszerzenia podstawowego oświetlenia otoczenia obejmują:
- Spraw, aby kolor otoczenia zmieniał się kierunkowo, np. Za pomocą harmonicznych sferycznych (SH) lub małej mapy sześciennej , i patrząc na kolor w module cieniującym w oparciu o normalny wektor każdego wierzchołka lub piksela. Umożliwia to pewne wizualne rozróżnienie powierzchni o różnych orientacjach, nawet tam, gdzie nie dociera do nich bezpośrednie światło.
- Zastosuj techniki okluzji otoczenia (AO) , w tym wstępnie obliczone AO wierzchołka, mapy tekstur AO, pola AO i AO w przestrzeni ekranu (SSAO) . Wszystko to działa, próbując wykryć obszary, takie jak dziury i szczeliny, w których światło pośrednie jest mniej podatne na odbijanie, i przyciemnić tam światło otoczenia.
- Dodaj mapę sześcienną środowiska, aby uzyskać odbicie lustrzane otoczenia. Mapa sześcienna o przyzwoitej rozdzielczości (128 ² lub 256 ² na twarz) może być dość przekonująca dla lustrzanych na zakrzywionych, błyszczących powierzchniach.
Pieczone oświetlenie pośrednie
Kolejny „poziom”, że tak powiem, technik obejmuje pieczenie (wstępne obliczenia offline) pewnej reprezentacji pośredniego oświetlenia na scenie. Zaletą pieczenia jest to, że można uzyskać bardzo wysokiej jakości wyniki przy niewielkich kosztach obliczeniowych w czasie rzeczywistym, ponieważ wszystkie twarde części są wykonywane w piecu. Kompromisy polegają na tym, że czas potrzebny na proces pieczenia szkodzi wskaźnikowi iteracji projektantów poziomów; potrzeba więcej pamięci i miejsca na dysku do przechowywania wstępnie obliczonych danych; możliwość zmiany oświetlenia w czasie rzeczywistym jest bardzo ograniczona; a proces pieczenia może wykorzystywać tylko informacje z geometrii na poziomie statycznym, więc pośrednie efekty świetlne pochodzące od obiektów dynamicznych, takich jak postacie, zostaną pominięte. Mimo to pieczone oświetlenie jest dziś bardzo szeroko stosowane w grach AAA.
W kroku pieczenia można użyć dowolnego pożądanego algorytmu renderowania, w tym śledzenia ścieżki, radości lub samego silnika gry do renderowania map sześciennych (lub półkul ).
Wyniki mogą być przechowywane w teksturach ( mapach świetlnych ) zastosowanych do geometrii statycznej na poziomie i / lub mogą być również konwertowane na SH i przechowywane w strukturach danych wolumetrycznych, takich jak objętości natężenia napromienienia (tekstury objętości, w których każdy tekst przechowuje sondę SH) lub czworościenne siatki . Następnie możesz użyć shaderów, aby wyszukać i interpolować kolory z tej struktury danych i zastosować je do renderowanej geometrii. Podejście wolumetryczne pozwala zastosować wypalone oświetlenie do obiektów dynamicznych, a także do geometrii statycznej.
Rozdzielczość przestrzenna map świetlnych itp. Będzie ograniczona pamięcią i innymi praktycznymi ograniczeniami, więc możesz uzupełnić pieczone oświetlenie pewnymi technikami AO, aby dodać szczegóły wysokiej częstotliwości, których nie zapewnia pieczone oświetlenie, i reagować na obiekty dynamiczne (takie jak przyciemnienie światła pośredniego pod poruszającą się postacią lub pojazdem).
Istnieje również technika zwana wstępnie obliczonym transferem blasku (PRT) , która wydłuża czas pieczenia w celu obsługi bardziej dynamicznych warunków oświetleniowych. W PRT zamiast pieczenia samego oświetlenia pośredniego, piec funkcję przenoszenia z jakiegoś źródła światła - zwykle nieba - do wynikowego oświetlenia pośredniego w scenie. Funkcja przenoszenia jest reprezentowana jako macierz, która przekształca się ze współczynników SH źródłowych na docelowe w każdym punkcie próbki upieczonej. Umożliwia to zmianę warunków oświetlenia, a oświetlenie pośrednie w scenie zareaguje w wiarygodny sposób. Far Cry 3 i 4 zastosowali tę technikę, aby umożliwić ciągły cykl dzień-noc, z pośrednim oświetleniem zmieniającym się w zależności od kolorów nieba o każdej porze dnia.
Jeszcze jedna uwaga na temat pieczenia: przydatne mogą być oddzielne dane na temat pieczenia dla rozproszonego i lustrzanego oświetlenia pośredniego. Mapy sześcienne działają znacznie lepiej niż SH dla lustrzanych (ponieważ mapy sześcienne mogą mieć znacznie więcej szczegółów kątowych), ale zajmują również dużo więcej pamięci, więc nie możesz sobie pozwolić na umieszczenie ich tak gęsto, jak próbki SH. Aby nieco to zrekompensować, można zastosować korekcję paralaksy , heurystycznie wypaczając mapę sześcienną, aby jej odbicia były bardziej uziemione do otaczającej ją geometrii.
Techniki w pełni czasu rzeczywistego
Wreszcie możliwe jest obliczenie w pełni dynamicznego oświetlenia pośredniego na GPU. Może reagować w czasie rzeczywistym na dowolne zmiany oświetlenia lub geometrii. Jednak znowu występuje kompromis między wydajnością środowiska uruchomieniowego, wiernością oświetlenia i rozmiarem sceny. Niektóre z tych technik wymagają w ogóle mocnego procesora graficznego i mogą być wykonalne tylko przy ograniczonych rozmiarach scen. Zwykle obsługują tylko jedno odbicie pośredniego światła.
- Dynamiczna mapa kubatury środowiska, w której ściany mapy kubków są ponownie renderowane dla każdej klatki za pomocą sześciu kamer skupionych wokół wybranego punktu, może zapewnić całkiem dobre odbicie otoczenia dla pojedynczego obiektu. Jest to często wykorzystywane na przykład w samochodzie gracza w grach wyścigowych.
- Globalne oświetlenie przestrzeni ekranu , rozszerzenie SSAO, które gromadzi odbite oświetlenie z pobliskich pikseli na ekranie w przebiegu przetwarzania końcowego.
- Odbicie raytracingu w przestrzeni ekranu działa poprzez marsz promienny przez bufor głębokości w post-passie. Zapewnia odbicia o dość wysokiej jakości, o ile odbite obiekty znajdują się na ekranie.
- Natychmiastowa radość polega na śledzeniu promieni na scenie za pomocą procesora i umieszczaniu punktowego światła w każdym punkcie trafienia promienia, który w przybliżeniu reprezentuje wychodzące światło odbite we wszystkich kierunkach od tego promienia. Te liczne światła, znane jako wirtualne światła punktowe (VPL), są następnie renderowane przez GPU w zwykły sposób.
- Odblaskowe mapy cienia (RSM) są podobne do natychmiastowej radości, ale VPL są generowane przez renderowanie sceny z punktu widzenia światła (jak mapa cienia) i umieszczenie VPL na każdym pikselu tej mapy.
- Objętości propagacji światła składają się z siatek 3D sond SH umieszczonych w całej scenie. RSM są renderowane i używane do „wstrzykiwania” światła odbitego do sond SH najbliższych powierzchni odbijających. Następnie proces przypominający wypełnienie powodziowe rozsyła światło z każdej sondy SH do otaczających punktów na siatce, a wynik tego jest wykorzystywany do zastosowania oświetlenia na scenie. Technikę tę rozszerzono również na wolumetryczne rozpraszanie światła .
- Śledzenie stożków wokselu polega na wokselowaniu geometrii sceny (prawdopodobnie przy użyciu różnych rozdzielczości wokseli, dokładniejszych w pobliżu kamery i grubszych daleko), a następnie wstrzykiwaniu światła z RSM do siatki wokseli. Podczas renderowania głównej sceny moduł cieniujący piksel wykonuje „ślad stożka” - marsz promieniowy o stopniowo zwiększającym się promieniu - przez siatkę wokseli, aby zebrać przychodzące światło dla cieniowania rozproszonego lub lustrzanego.
Większość tych technik nie jest dziś powszechnie wykorzystywana w grach z powodu problemów ze skalowaniem do realistycznych rozmiarów scen lub innych ograniczeń. Wyjątkiem jest odbicie przestrzeni ekranu, które jest bardzo popularne (chociaż zwykle używane jest z mapami sześciennymi jako rezerwą, w regionach, w których zawodzi część ekranu).
Jak widać, oświetlenie pośrednie w czasie rzeczywistym jest ogromnym tematem, a nawet ta (raczej długa!) Odpowiedź może zapewnić jedynie 10 000 stóp przeglądu i kontekst do dalszego czytania. To, które podejście będzie dla Ciebie najlepsze, będzie zależeć w dużej mierze od szczegółów konkretnej aplikacji, ograniczeń, które chcesz zaakceptować i od tego, ile czasu będziesz musiał w to włożyć.