Mapa świetlna - Lightmap
Lightmap jest struktura danych stosowany w Lightmapping , forma buforowania powierzchni , w którym jasność powierzchni w wirtualnym sceny jest wstępnie obliczane oraz przechowywane w tekstury mapy w celu późniejszego wykorzystania. Lightmapy są najczęściej stosowane do obiektów statycznych w aplikacjach wykorzystujących grafikę komputerową 3D w czasie rzeczywistym , takich jak gry wideo , w celu zapewnienia efektów świetlnych, takich jak globalne oświetlenie, przy stosunkowo niskich kosztach obliczeniowych.
Historia
John Carmack „s Quake była pierwsza gra komputerowa używać lightmapy poszerzyć renderowania . Zanim wynaleziono lightmapy, aplikacje działające w czasie rzeczywistym opierały się wyłącznie na cieniowaniu Gourauda w celu interpolacji oświetlenia wierzchołków powierzchni. Pozwalało to tylko na informacje o oświetleniu o niskiej częstotliwości i mogło tworzyć artefakty przycinania w pobliżu kamery bez interpolacji z poprawną perspektywą. Czasami używano siatki nieciągłości, zwłaszcza w przypadku rozwiązań radiosity , aby adaptacyjnie poprawić rozdzielczość informacji o oświetleniu wierzchołków, jednak dodatkowe koszty w konfiguracji prymitywnej do rasteryzacji w czasie rzeczywistym były generalnie niedopuszczalne. Rasteryzator oprogramowania Quake'a wykorzystał buforowanie powierzchni do zastosowania obliczeń oświetlenia w przestrzeni tekstur raz, gdy wielokąty początkowo pojawiają się w polu widzenia (skutecznie tworząc tymczasowe, „oświetlone” wersje aktualnie widocznych tekstur, gdy widz negocjował scenę).
Wraz z konsumenckim sprzętem graficznym 3D zdolnym do multiteksturowania , mapowanie światła stało się bardziej popularne, a silniki zaczęły łączyć mapy światła w czasie rzeczywistym jako drugorzędną warstwę tekstur z wieloma mieszankami ...
Ograniczenia
Lightmapy składają się z lumeli (elementów Lumination), analogicznie do tekseli w Texture Mapping . Mniejsze lumele dają mapę świetlną o wyższej rozdzielczości , zapewniając dokładniejsze oświetlenie za cenę zmniejszonej wydajności i zwiększonego zużycia pamięci. Na przykład, skala lightmap 4 lumeli na jednostkę świata dałaby niższą jakość niż skala 16 lumeli na jednostkę świata. Dlatego, używając tej techniki, projektanci poziomów i artyści 3d często muszą iść na kompromis między wydajnością a jakością; jeśli lightmapy o wysokiej rozdzielczości są używane zbyt często, aplikacja może zużywać nadmierne zasoby systemowe, negatywnie wpływając na wydajność. Rozdzielczość i skalowanie lightmap mogą być również ograniczone przez ilość miejsca na dysku, przepustowość/czas pobierania lub pamięć tekstur dostępną dla aplikacji. Niektóre implementacje próbują spakować wiele lightmap razem w procesie zwanym atlasowaniem, aby pomóc ominąć te ograniczenia.
Rozdzielczość i skala Lightmap to dwie różne rzeczy. Rozdzielczość to obszar w pikselach dostępny do przechowywania jednej lub więcej lightmap powierzchni. Liczba pojedynczych powierzchni, które mogą zmieścić się na lightmapie, jest określona przez skalę. Niższe wartości skali oznaczają wyższą jakość i więcej miejsca na lightmapie. Wyższe wartości skali oznaczają niższą jakość i mniej zajmowanego miejsca. Powierzchnia może mieć lightmapę, która ma ten sam obszar, czyli stosunek 1:1 lub mniejszy, więc lightmapa jest rozciągnięta w celu dopasowania.
Lightmapy w grach to zazwyczaj kolorowe mapy tekstur lub kolory per vertex. Zwykle są płaskie, bez informacji o kierunku światła, podczas gdy niektóre silniki gier używają wielu lightmap, aby zapewnić przybliżone informacje o kierunku, które można połączyć z normalnymi mapami. Lightmapy mogą również przechowywać oddzielne wstępnie obliczone składniki informacji o oświetleniu dla oświetlenia półdynamicznego z shaderami, takie jak ambient occlusion i cień światła słonecznego.
kreacja
Tworząc lightmapy, można wykorzystać dowolny model oświetlenia, ponieważ oświetlenie jest w całości wstępnie obliczone, a wydajność w czasie rzeczywistym nie zawsze jest konieczna. Zazwyczaj stosuje się różne techniki, w tym okluzję otoczenia , bezpośrednie oświetlenie z próbkowanymi krawędziami cieni i pełne rozwiązania w zakresie światła odbitego radiosity . Nowoczesne pakiety 3D zawierają specjalne wtyczki do nakładania współrzędnych UV mapy świetlnej, atlasowania wielu powierzchni w pojedyncze arkusze tekstur i renderowania samych map. Alternatywnie potoki silnika gier mogą zawierać niestandardowe narzędzia do tworzenia lightmap. Dodatkową kwestią jest użycie skompresowanych tekstur DXT, które podlegają artefaktom blokowania – poszczególne powierzchnie nie mogą zderzać się z kawałkami tekselu 4x4, aby uzyskać najlepsze wyniki.
We wszystkich przypadkach możliwe są miękkie cienie dla geometrii statycznej, jeśli do określenia, które lumele są widoczne dla światła, zostaną użyte proste testy okluzji (takie jak podstawowe śledzenie promieni ). Jednak rzeczywista miękkość cieni zależy od sposobu, w jaki silnik interpoluje dane dotyczące lumeli na powierzchni i może skutkować pikselowaniem, jeśli lumele są zbyt duże. Zobacz filtrowanie tekstur .
Lightmapy można również obliczać w czasie rzeczywistym w celu uzyskania kolorowych efektów świetlnych dobrej jakości, które nie są podatne na defekty cieniowania Gourauda, chociaż tworzenie cieni nadal musi być wykonywane przy użyciu innej metody, takiej jak szablonowe objętości cienia lub mapowanie cieni , takie jak promień w czasie rzeczywistym -tracing jest nadal zbyt wolny, aby można go było wykonać na nowoczesnym sprzęcie w większości silników 3D.
Mapowanie fotonów może służyć do obliczania globalnego oświetlenia dla map świetlnych.
Alternatywy
Oświetlenie wierzchołkowe
W oświetleniu wierzchołków informacje o oświetleniu są obliczane na wierzchołek i przechowywane w atrybutach koloru wierzchołków . Te dwie techniki można łączyć, np. wartości kolorów wierzchołków przechowywane dla siatek o dużej szczegółowości, podczas gdy mapy światła są używane tylko w przypadku grubszej geometrii.
Mapowanie nieciągłości
W przypadku mapowania nieciągłości scena może być dalej dzielona i przycinana wzdłuż głównych zmian światła i ciemności, aby lepiej zdefiniować cienie.
Zobacz też
- Pieczenie (grafika komputerowa)
- Mapa środowiska
- Okluzja otoczenia w przestrzeni ekranu
- Shader
- Mapowanie tekstur
Bibliografia
- ^ Abrasz, Michael. „Model oświetlenia Quake'a: buforowanie powierzchni” . www.bluesnews.com . Źródło 2015-09-07 .
- ^ Channa, Keszaw (21 lipca 2003). "flipcode - Light Mapping - Teoria i implementacja" . www.flipcode.com . Źródło 2015-09-07 .
- ^ „Biała księga atlasowania tekstur” (PDF) . nvidia.pl . nVIDIA . 2004-07-07 . Źródło 2015-09-07 .
- ^ Jason Mitchell, Gary McTaggart, Chris Green, Cieniowanie w silniku źródłowym Valve . ( PDF ) Źródło 07.06.2019.
- ^ 16 listopada 2003. Dynamiczne Lightmapy w OpenGL . Joshbeam.com Źródło 07 lipca 2014.