теория, алгоритмы, примеры на С++ и OpenGL  

Мы vkontakte.ru


Rambler's Top100 Rambler's Top100
Каталог@Mail.ru - каталог ресурсов интернет

Друзья

Словарь синонимов русского языка

Закон Ламберта. Модель отражения Фонга. Модель отражения Блинна-Фонга

Модель отражения Фонга является довольно популярной и широкоиспользуемой в компьютерной графике, несмотря на то, что существуют более точные физические модели. Она была предложена в статье Ву Тонг Фонга (Bui Tuong Phong) в 1975 году.

Пусть заданы точечный источник света, расположенный в некоторой точке, поверхность, которая будет освещаться и наблюдатель. Будем считать, что наблюдатель точечный. Каждая точка поверхности имеет свои координаты и в ней определена нормаль к поверхности. Её освещенность складывается из трех компонент: фоновое освещение (ambient), рассеянный свет (diffuse) и бликовая составляющая (specular). Свойства источника определяют мощность излучения для каждой из этих компонент, а свойства материала поверхности определяют её способность воспринимать каждый вид освещения.

Фоновая составляющая + Рассеянная составляющая + Зеркальная составляющая = Суммарное освещение
Фоновая составляющая
 
Рассеянная составляющая
 
Зеркальная составляющая
 
Суммарное освещение

Для удобства все векторы, описанные ниже, берутся единичными. В этом случае косинус угла между ними совпадает со скалярным произведением.

1.   Фоновое освещение это постоянная в каждой точке величина надбавки к освещению. Вычисляется фоновая составляющая освещения как:

I_a = k_a i_a, где

I_a - фоновая составляющая освещенности в точке,

k_aсвойство материала воспринимать фоновое освещение,

I_aмощность фонового освещения.

Из формулы выше видно, что фоновая составляющая освещенности не зависит от пространственных координат освещаемой точки и источника. Поэтому при моделировании освещения, в большинстве случае, не имеет смысла брать более одного фонового источника света. Часто просто задается некое глобальное фоновое освещение всей сцены.

2.    Рассеянный свет при попадании на поверхность рассеивается равномерно во все стороны. При расчете такого освещения учитывается только ориентация поверхности (нормаль) и направление на источник света. Рассеянная составляющая рассчитывается по закону косинусов (закон Ламберта):

ИЗОБРАЖЕНИЕ: Расчет рассеянного отражения

I_d=k_d {\cos{(\vec{L},\vec{N})}}i_d=k_d(\vec{L}\cdot\vec{N})i_d, где

I_d рассеянная составляющая освещенности в точке,

k_dсвойство материала воспринимать рассеянное освещение,

i_dмощность рассеянного освещения,

\vec{L} – направление из точки на источник,

\vec{N} - вектор нормали в точке.

3.   Зеркальный свет при попадании на поверхность подчиняется следующему закону: “Падающий и отраженный лучи лежат в одной плоскости с нормалью к отражающей поверхности в точке падения, и эта нормаль делит угол между лучами на две равные части”. Т.о. отраженная составляющая освещенности в точке зависит от того, насколько близки направления на наблюдателя и отраженного луча. Это можно выразить следующей формулой:

ИЗОБРАЖЕНИЕ: Расчет зекрального отражения

Прим. В общем случае вектора \vec{V}, \vec{L} и \vec{N} не лежат в одной плоскости.

I_s=k_s {\cos^{\alpha}{(\vec{R},\vec{V})}}i_s=k_s(\vec{R}\cdot\vec{V})^{\alpha}i_s , где

I_sзеркальная составляющая освещенности в точке,

k_sкоэффициент зеркального отражения,

i_dмощность зеркального освещения,

\vec{R} – направление отраженного луча,

\vec{V} - направление на наблюдателя,

\alpha - коэффициент блеска, свойство материала.

Именно зеркальное отражение представляет наибольший интерес, но в то же время его расчет требует больших вычислительных затрат. При фиксированном положении поверхности относительно источников света фоновая и рассеянные составляющие освещения могут быть просчитаны единожды для всей сцены, т.к. их значение не зависит от направления взгляда. С зеркальной составляющей этот фокус не сработает и придется пересчитывать её каждый раз, когда взгляд меняет свое направление.

Во всех вычислениях выше, для рассеянной и зеркальной компонен, если скалярное произведение в правой части меньше нуля, то соответствующая компонента освещенности полагается равной нулю.

Вычисление угла между отраженным лучом и направлением на наблюдателя

Угол между отраженным лучом и направлением на наблюдателя можно рассчитать по следующей формуле:

\vec{R} + \vec{L} = 2(\vec{N}\cdot\vec{L})\vec{N}
\vec{R} = 2(\vec{N}\cdot\vec{L})\vec{N} - \vec{L}

ИЗОБРАЖЕНИЕ: Вычисление угла между отраженным лучом и направлением на наблюдателя

Получается это следующим образом. Проекции векторов \vec{R} и \vec{L} на вектор нормали совпадают и равны \vec{N}\cdot\vec{L}, следовательно, проекция вектора \vec{R} + \vec{V} на вектор нормали равна 2(\vec{N}\cdot\vec{L}). Т.к. вектор нормали делит угол, между падающим и отраженным лучами на две равные части, то вектор \vec{R} + \vec{V} коллинеарен вектору \vec{N}. Отсюда получаем формулу, написанную выше.

Скалярное произведение \vec{R} \cdot \vec{V} рассчитывается по формуле:

\vec{R}\cdot\vec{V}=2(\vec{N}\cdot\vec{L})(\vec{N}\cdot\vec{V})-(\vec{L}\cdot\vec{V})

Упрощенный расчет зеркальной компоненты освещенности. Модель Блинна-Фонга

Для расчета отраженной компоненты требуется выполнить довольно громоздкие вычисления. Существует модель Блинна-Фонга, представляющая собой модель Фонга с упрощенным расчетом зеркального отражения. Вычислим в каждой точке вектор полупути \vec{H} (halfway vector):

\vec{H}=\frac{\vec{L}+\vec{V}}{|\vec{L}+\vec{V}|}=(\vec{L}+\vec{V})_{norm}

который показывает ориентацию площадки, на которой будет максимальное отражение. Тогда величину (\vec{R}\cdot\vec{V})^\alpha можно заменить величиной (\vec{H}\cdot\vec{N})^\beta.

При этом α <> β и, в общем случае, соотношение между ними зависит от пространственной связи векторов \vec{V}, \vec{L} и \vec{N}. Вектор \vec{H} называется вектором полупути, т.к. если все три вектора \vec{V}, \vec{L} и \vec{N} лежат в одной плоскости, то угол между \vec{H} и \vec{N} составляет половину угла между \vec{R} и \vec{V}.

Модель отражения Блинна-Фонга никогда в точности не совпадает с моделью Фонга, однако можно подобрать соответствующие значения α и β, для которых распределения зеркальной составляющей по поверхности для обеих моделей будут очень близкими. Вместе с тем, в ряде случаев модель Блинна-Фонга требует значительно меньше вычислений, например в случае направленного бесконечно-удаленного источника.

Учет цвета

Если используется цветовая модель RGB, то все расчеты, представленные выше проделываются для каждой компоненты R, G и B по отдельности. Если при этом освещать поверхность синим рассеянным светом (0.0, 0.0, 1.0), а она воспринимает только красный рассеянный (1.0, 0.0, 0.0), то рассеянная составляющая освещенности во всех точках этой поверхности будет равна (0.0, 0.0, 0.0).

Итоги

Эта модель не учитывает способности материала излучать свет (emission), затухания света с расстоянием и не описывает модель такого источника света, как прожектор. Это описывается в следующей статье "Свойства источника света и материала. Типы источников света. Суммарное освещение".