Объёмные лучи (KQa~budy lrcn)
Объёмные лучи — программная методика (техника) в трёхмерной компьютерной графике, предназначенная для создания эффекта трёхмерных лучей света, проходящих через окружение трёхмерной сцены.[1] В реальном мире эффект трёхмерных лучей представлен так называемым оптическим эффектом Тиндаля, когда лучи света проходят через облако газа, дыма, пыли, аэрозоля или пара в затёмненном пространстве. При прохождении света через такую среду лучи света «подсвечивают» частички пыли или жидкости, которые распылены в воздухе, в результате чего можно увидеть эффект «объёмных лучей». Ещё одним проявлением подобного оптического эффекта являются сумеречные и противосумеречные лучи. Программная методика объёмных лучей предназначена для моделирования всех вышеописанных оптических эффектов в трёхмерной среде. Она широко используется в кинематографе и трёхмерном моделировании и рендеринге, а также в интерактивных приложениях компьютерной графики, включая компьютерные игры.
Принцип работы
[править | править код]Объемное освещение требует наличия двух компонентов: теневой карты (англ. shadow map) освещаемого пространства и буфер глубины. Начиная с самой близкой к виртуальной камере плоскости, вся сцена трассируется и значения выборок (семплов) записываются в буфер ввода. Для каждого семпла проводится определение: освещается ли он светом из нужного источника света или нет; для этого используются данные из теневой карты. В итоге только освещенные семплы влияют на окончательный цвет пикселя.[2]
Для функционирования в режиме реального времени вышеописанная методика требует оптимизации. Одним из возможных оптимизационных подходов является рендеринг освещаемого объёма в намного меньшем разрешении чем то, которое используется в изначальном графическом контексте. Вследствие такого подхода создаются нежелательные эффекты алиасинга, которые могут быть устранены посредством применения фильтра размытия (англ. blur).[2]
Ещё одной оптимизационной методикой является рендеринг «неточных» эффектов. Этот алгоритм размывает светящиеся объекты в стороне от центра основного источника света. Как правило, прозрачность постепенно сокращается с каждым проходом размытия, особенно в более светящихся сценах. Следует иметь в виду, что для работы этого алгоритма необходимо присутствие на экране источника света.[3]
Примеры
[править | править код]-
Фотография: Пример сумеречных лучей, возникающие во время заката при отражении от верхней части облака
-
Фотография: Пример эффекта Тиндаля, когда солнечные лучи проходят через туман.
-
Компьютерная графика: лесная местность в анимационном фильме Big Buck Bunny, отчётливо видны объёмные лучи.
-
Компьютерная графика: Объемные лучи в игре S.T.A.L.K.E.R.: Чистое небо
Примечания
[править | править код]- ↑ David "Spunk" Grampa, Dan "Tweak Monkey" Kennedy. 3D Dictionary Volumetric Lighting (англ.). Tweak3D.net (13 декабря 2002). Дата обращения: 23 января 2010. Архивировано 15 апреля 2012 года.
- ↑ 1 2 jim coe. Volumetric Lighting in Vue 5 (англ.). Art Head Start (15 апреля 2006). Дата обращения: 23 января 2010. Архивировано из оригинала 15 апреля 2012 года.
- ↑ Dario Corno. Lesson: 36 (англ.). GameDev.net. Дата обращения: 23 января 2010. Архивировано из оригинала 15 апреля 2012 года.
Ссылки
[править | править код]- Kenny Mitchell (Electronic Arts). Chapter 13. Volumetric Light Scattering as a Post-Process (англ.). GPU Gems 3 (2008). Дата обращения: 22 ноября 2010. Архивировано из оригинала 15 апреля 2012 года.
- Лев Симонов «LEVel». Саншафты в outdoor сценах (англ.). UralDev (15 января 2008). Дата обращения: 3 апреля 2010. Архивировано 15 апреля 2012 года.