Co to jest cień OpenGL®?

Cień Open Graphics Library® (OpenGL®) to wizualne przybliżenie w trójwymiarowej (3D) scenie OpenGL® tego, jak cień byłby rzucany w rzeczywistości w podobnych warunkach oświetleniowych. Cienie to złożona funkcja wizualna, którą można zaimplementować w OpenGL®, głównie dlatego, że nie ma wbudowanej obsługi rzucania cieni w scenie. Zamiast tego istnieje wiele technik, których można użyć do tworzenia cieni z obiektów i geometrii w scenie za pomocą różnych narzędzi, takich jak różne dostępne bufory, shadery i, w niektórych przypadkach, rozszerzenia, które dają dostęp do specjalnych funkcji na niektórych grafikach karty. W większości przypadków jakość, dokładność i szybkość renderowania cieni OpenGL® jest bezpośrednio związana z mocą przetwarzania i pamięcią sprzętu graficznego obecnego w komputerze lub urządzeniu. Niektóre z bardziej popularnych metod implementacji cieni OpenGL® obejmują objętości cieni, mapowanie cieni i śledzenie promieni.

Stworzenie aplikacji, która obsługuje cienie OpenGL®, wymaga wiedzy matematycznej i głębokiego zrozumienia, jak działa OpenGL®. OpenGL® jest w dużej mierze używany do tworzenia scen 3D, które są dynamiczne i renderowane w czasie rzeczywistym, więc algorytmy używane do tworzenia cieni muszą być nie tylko zoptymalizowane pod kątem szybkości, ale także muszą być dokładnie mierzone pod kątem zużycia zasobów i wszelkich zakłóceń, które może być spowodowane w potoku graficznym używanym do renderowania. Z tych powodów najbardziej podstawowa metoda tworzenia cienia, zwana ray tracingiem, często jest niepraktyczna dla scen w pełnym 3D, ponieważ może zająć bardzo dużo czasu.

Śledzenie promieni zasadniczo podąża za wyimaginowaną linią lub promieniem od płaszczyzny obserwacji lub pozycji kamery przez scenę do powierzchni obiektu, a następnie oblicza kolor powierzchni na podstawie położenia jednego lub większej liczby źródeł światła i innych czynników. Podczas procesu rasteryzacji, w którym scena 3D jest rysowana na dwuwymiarowej (2D) powierzchni, aby można ją było wyświetlić, proces ray tracingu musi być wykonany na każdym rysowanym pikselu, a zwłaszcza w przypadku tekstur lub innych właściwości powierzchni, może zajść potrzeba kilkukrotnej oceny tych samych pikseli. Oznacza to, że ray tracing w czasie rzeczywistym, chociaż dokładnie renderowałby cienie, zwykle nie jest praktyczny.

Inną metodą, której można użyć do utworzenia cienia OpenGL®, jest mapowanie cieni. Ta metoda używa bufora głębokości lub szablonu do renderowania sceny pod kątem źródła światła jako serii odległości od źródła światła do powierzchni różnych obiektów w scenie. Scena jest następnie renderowana po raz drugi z właściwego kąta widzenia, sprawdzając, czy każdy piksel znajduje się w określonym zakresie odległości w buforze, wskazując, czy piksel jest oświetlony, czy zacieniony. Korzystanie z mapowania cieni może wymagać dużej ilości pamięci, a w przypadku scen, które mają więcej niż jedno źródło światła, może wiązać się z tworzeniem wielu map pod różnymi kątami.

Woluminy cienia to sposób na utworzenie cienia OpenGL®, który jest dokładniejszy niż niektóre inne metody, ale stwarza własne problemy. Objętość cienia jest zasadniczo niewidocznym fragmentem geometrii w scenie, który rozciąga się od oświetlonej powierzchni obiektu z dala od źródła światła. Objętość tę można porównać z innymi obiektami, aby sprawdzić, czy wpadają one w cień powierzchni, z której pochodzi objętość. Ta procedura może być bardzo złożona i ostatecznie tworzyć wizualne artefakty po zoptymalizowaniu pod kątem szybkości.