Цифровое моделирование на C# - страница 9




рис. 2.7


Лучи-прожекторы параллельны друг другу (рис. 2.7)


рис. 2.8


Точечный источник излучает свет во все стороны (рис. 2.8)


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


рис. 2.9

Модель Фонга

Одной из наиболее часто используемых моделей освещения является модель освещения Фонга. Она состоит из трех составляющих: фоновой (ambient, англ.), диффузной (diffuse, англ.) и зеркальной (specular, англ.). Цвет в конкретной выбранной точке треугольника зависит от этих трех составляющих освещения. Далее разберем каждую составляющую в отдельности.

Фоновая составляющая

Пусть X – исходный цвет треугольника, а A – константа, лежащая между 0 и 1, которая характеризует фоновое освещение. Тогда фоновая составляющая F равна:


F = A ⋅ X


Тот факт, что константа A лежит между 0 и 1, означает, что исходное значение цвета X будет уменьшено. Вообще, значение параметра А для всех объектов, не излучающих свет самостоятельно, как то всевозможные лампочки или флуоресцентные материалы, равно 0. Значение фоновой составляющей не зависит от наличия источников света и характеризует самостоятельное свечение объекта.

Диффузная составляющая

Диффузное освещение имитирует воздействие на объект направленного источника света. Это наиболее визуально значимый компонент модели освещения. Чем меньше угол между нормалью (нормалью называется ненулевой вектор перпендикулярный плоскости треугольника) к треугольнику и вектором, направленным на источник света, тем большую яркость ему придает диффузная составляющая.


рис. 2.10


Расчет диффузной составляющей происходит согласно формуле ниже:


D = d ⋅ X ⋅ (1 + cos (α)) / 2


D – диффузная составляющая.

d – значимость источника света. Этот параметр можно интерпретировать как яркость этого источника относительно других. Сумма значений d для всех источников должна быть равна 1.

X – исходный цвет поверхности треугольника.

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


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

Зеркальная составляющая

Зеркальная составляющая имитирует яркое пятно света (блик), которое появляется на блестящих объектах. Расчет зеркальных бликов, как и в случае диффузного освещения, основан на векторе направления источника света и нормали к поверхности объекта, но помимо этого в вычислениях учитывается позиция наблюдателя, то есть направление, в котором наблюдатель смотрит на фрагмент.


рис. 2.11


(1) – вектор, исходящий из вершины треугольника и направленный на источник света.

(2) – вектор нормали к плоскости треугольника.

(3) – отраженный от поверхности луч света.

(4) – вектор, исходящий из вершины треугольника и направленный на наблюдателя.

α – угол между вектором нормали и вектором, направленным на источник света.

β – угол между отраженным от поверхности треугольника лучом света и вектором, направленным на наблюдателя.