Окружающее затенение
Окружающее затенение (англ. ambient occlusion, AO) — модель затенения, используемая в трёхмерной графике и позволяющая добавить реалистичности изображению за счёт вычисления интенсивности света, доходящего до точки поверхности. В отличие от локальных методов, как например затенение по Фонгу, окружающее затенение является глобальным методом, то есть значение яркости каждой точки объекта зависит от других объектов сцены. В принципе, это достаточно отдалённо напоминает глобальное освещение.
Окружающее затенение чаще всего вычисляется путём построения лучей, исходящих из точки поверхности во всех направлениях, с последующей их проверкой на пересечение с другими объектами. Лучи, достигнувшие фона или «неба», увеличивают яркость поверхности, в то время как лучи, пересекающие другие объекты, не добавляют яркости. В результате точки, окружённые большим количеством геометрии, отрисовываются как более тёмные, а точки с малым количеством геометрии в видимой полусфере — светлыми.
Окружающее затенение относится к методам, основанным на доступности элемента поверхности для различных факторов, таких как грязь, свет и т. д. Он получил популярность благодаря относительной простоте и достаточно высокой эффективности. Часто окружающее затенение также называют «небесный свет» (англ. sky light).
Модель окружающего затенения способствует лучшему восприятию объёма изображаемых объектов, нежели модель прямого освещения[1].
Затенение в точке поверхности с нормалью может быть посчитано путём интегрирования функции видимости по полусфере :
где — значение функции видимости в точке , равное нулю, если луч из в направлении имеет пересечение с объектом, и равное единице в остальных случаях. На практике для взятия этого интеграла используются различные техники: возможно, одним из самых часто используемых является метод Монте-Карло. Другой метод (более полно использующий возможности аппаратного ускорения) — рендеринг сцены из точки с растеризацией геометрии чисто чёрным цветом на белом фоне. Усреднённое значение яркости полученного кадра и есть примерное значение функции в данной точке. Этот способ — пример собирательного метода (метод изнутри-наружу), в то время, как другие подходы (такие, как окружающее затенение на основе карты глубины — англ. depth-map ambient occlusion) используют рассеивание (метод снаружи-внутрь).
Кроме значения затенения часто вычисляют дополнительный вектор («отклонённая нормаль»), показывающий примерное направление к открытому (незатенённому) пространству. Этот вектор может быть использован для получения освещения из карты окружения. Однако бывают ситуации, когда вектор показывает отнюдь не в направлении максимального освещения.
См. также
[править | править код]Примечания
[править | править код]- ↑ «Depth discrimination from shading under diffuse lighting», M.S. Langer and H. H. Buelthoff, Perception. 29 (6) 649—660, 2000.
Ссылки
[править | править код]- Ambient Occlusion при создании гипсовых рендеров в 3DS Max
- Depth Map based Ambient Occlusion
- Ambient Occlusion
- Assorted notes about ambient occlusion
- Ambient Occlusion Fields — ambient occlusion в реальном времени с использованием кубических карт
- Fast Precomputed Ambient Occlusion for Proximity Shadows ambient occlusion в реальном времени с использованием объёмных текстур
- Dynamic Ambient Occlusion and Indirect Lighting a real time self ambient occlusion method from Nvidia’s GPU Gems 2 book
- ShadeVis an open source tool for computing ambient occlusion
- xNormal A free normal mapper/ambient occlusion baking application