Co to jest cień OpenGL®?
Otwarta Biblioteka Graphics Library® (OpenGL®) to wizualna przybliżenie w trójwymiarowej (3D) scenie OpenGL® o tym, jak cień zostałby rzucony w prawdziwym życiu w podobnych warunkach oświetlenia. Shadows to złożona funkcja wizualna do wdrożenia w OpenGL®, głównie dlatego, że nie ma wrodzonego wsparcia dla rzucania cieni w scenie. Zamiast tego istnieje wiele technik, które można użyć do tworzenia cieni z obiektów i geometrii w scenie przy użyciu różnych narzędzi, takich jak różne dostępne bufory, shaders, a w niektórych przypadkach rozszerzenia, które dają dostęp do specjalnych funkcji na niektórych kartach graficznych. W większości przypadków jakość, dokładność i szybkość renderowania OpenGL® Shadow są bezpośrednio związane z mocą przetwarzania i pamięcią sprzętu graficznego obecnego w komputerze lub urządzeniu. Niektóre z bardziej popularnych metod wdrażania cienia OpenGL® obejmują objętości cieni, mapowanie cieni i śledzenie promieni.
Tworzenie aplikacji, która ma wsparcie OpenGL® Shadow, wymaga wiedzy matematycznej i głębokiego zrozumienia działania OpenGL®. OpenGL® jest w dużej mierze wykorzystywany 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 prędkości, ale także należy dokładnie zmierzyć pod kątem ich zużycia zasobów i wszelkich zakłóceń, które mogłyby być spowodowane w rurociągu graficznym używanym do wydawania. Z tych powodów najbardziej podstawowa metoda tworzenia cienia, zwanego śledzeniem promieni, często jest niepraktyczna dla pełnych scen 3D, ponieważ może to potrwać bardzo długo.
Śledzenie promienia zasadniczo podąża za wyimaginowaną linią lub promieniem, od płaszczyzny widokowej lub pozycji aparatu przez scenę do powierzchni obiektu, a następnie oblicza kolor powierzchni na podstawie położenia jednego lub więcej źródeł światła i innych czynników. Podczas procesu rasteryzacji, gdzieScena 3D jest przyciągana do dwuwymiarowej (2D) powierzchni, aby mogła być wyświetlana, proces śledzenia promieni musi być wykonywany na każdym rysowanym pikselu, a zwłaszcza z teksturami lub innymi właściwościami powierzchni, może być konieczne ocena tych samych pikseli kilkakrotnie. Oznacza to śledzenie promieni w czasie rzeczywistym, chociaż dokładnie renderowałoby cienie, zwykle nie jest praktyczne.
Kolejna metoda, której można użyć do utworzenia cienia OpenGL®, jest znana jako mapowanie cieni. Ta metoda wykorzystuje bufor 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 od prawidłowego kąta oglądania, sprawdzając, czy każdy piksel mieści się w określonym zakresie odległości w buforze, co wskazuje, czy piksel jest oświetlony, czy zacieniony. Korzystanie z mapowania cienia może być intensywnie pamięci, a sceny, które mają więcej niż jedno źródło światła, może obejmować mAking wielu map z wielu kątów.
Objętości cienia są sposobem na stworzenie cienia OpenGL®, który jest dokładniejszy niż niektóre inne metody, ale przedstawia własne problemy. Objętość cienia jest zasadniczo niewidocznym kawałkiem geometrii w scenie, która rozszerza się z oświetlonej powierzchni obiektu z dala od źródła światła. Tom ten można sprawdzić z innymi obiektami, aby sprawdzić, czy wpadają one w cień powierzchni, z którego pochodzi objętość. Ta procedura może być bardzo złożona i ostatecznie tworzyć artefakty wizualne po zoptymalizowaniu pod kątem prędkości.