1.2.Закон Ламберта (диффузного отражения)
Если есть некоторая поверхность и в некоторую точку этой поверхности, у которой есть нормаль, направлен луч от источника света. Для наблюдателя, находящегося в любой точке, яркость точки, которую он видит, будет выражаться следующим образом. , где V - яркость (для ч/б); E – альбедо (коэффициент отражения) поверхности., I –освещённость точки,I0 –фоновая освещенность (рассеянный свет), q -угол между нормалью () и вектором, направленным на источник света (), .
Рис. 1
Данный метод не учитывает отражения света, поэтому место положения наблюдателя не играет роли. При помощи этого метода лучше всего моделируется матовые поверхности.
Рассмотренный ранее закон Ламберта можно записать в удобной форме.
,
где e – доля рассеянного света (рекомендуется ).
Рассматриваются два вида источников света:
а) точечный источник света:
Рис. 2
б) параллельный пучок света: от удаленного источника
Рис.3
1.2.Закон Фонга (закон зеркального отражения)
Рис.4
нормаль к поверхности в точке (x,y,z);
падающий луч от источника S;
отраженный луч света;
направление на наблюдателя Р (xP,yP,zP);
q – угол падения и отражения;
g – угол между отраженным лучом и направлением на наблюдателя.
формула для определения зеркальной составляющей V,
где n – степень зеркальности поверхности, . Чем больше n тем больше зеркальные свойства поверхности. Вектора нормированные и лежат в одной плоскости (см. закон отражения света)
Пусть I = const, тогда
e – доля рассеянного света,
eФ – доля отраженного света, ;
Рис. 5
Если угол g > 90° , то не надо учитывать зеркальную составляющую.
1.3.Лунная модель
Рис. 6
– формула Гуро
VД – диффузная составляющая света. Если L = 0 , получается закон Ламберта. L >0.
По сравнению с методом Ламберта эта модель уменьшает яркость точек, на которые мы смотрим под углом 90°, и увеличивает яркость тех точек, на которые мы смотрим вскользь.
2. Применение законов освещения при синтезе объекта изображения.
2.1.Объект с четко выраженными гранями.
2.1.1. метод закраски – flat
Основная идея: каждая грань закрашивается одним цветом.
Рис. 7
Рассчитывается яркость в одной точке (например, в центре тяжести для выпуклых многоугольников) грани (по Ламберту) и производится заливка грани полученным цветом.
2.1.2. Метод закраски Гуро
Основная идея: заливка осуществляется с учетом линейной интерполяции яркости, вычисляется яркость только для вершин многоугольника.
Рис. 8
Недостаток метода то, что если источник света проецирутся в плоскость многоугольника, то, используя этот метод заливки, будет получен результат рис.8 (1), хотя должно быть рис.8 (2).
2.1.3. Закраска по Фонгу
Основная идея: для каждой точки изображения устанавливаются пространственные координаты, исходя из которых, считаем g и получаем яркость для точки.
Недостаток метода – большая сложность вычислений.
2.1.4. Моделирование освещения методом наложения текстуры.
Можно упростить вычисления, сведя метод Фонга к процедуре нанесения текстуры.
Рис. 9
Рис. 10
Основная идея: в памяти рассчитывается текстура рис. 9, затем заливка объектов осуществляется с использованием полученной текстуры.
· Рассчет вспомогательной текстуры.
Для каждой точки текстуры рассчитывается яркость по формуле
Пусть под яркость отведен 1 байт, т.е. – VMAX = 255.
Максимальная яркость будет в точке максимально приближенной к источнику света, т.е.
Если соответсявующим образом просматривать h, то получится яркость соответствующей точки в вспомогательной текстуре.
· Рассчет координатных точек для произвольного треугольника.
Рис. 11
В мировой системе координат задан произвольный треугольник рис. 11, необходимо провести его заливку с учетом освещенности.
Для этого строится система координат (x’,y’z’) с началом в точке О(x0,y0,z0), таким образом, что ось OZ проходит через источник света S и параллельна нормали , а OX и OY лежат в плоскости треугольника.
Рис. 12
, где M – матрица преобразования.
Найдем такую матрицу М, чтобы точки 1,2,3,S проецировались в точки с координатами которые озображены на рис. 12.
– ненормированный вектор нормали
Пронормируем этот вектор: ; N(NX,NY,NZ)
Операясь на это выражение, вычисляем матрицу М:
1)
данная формула используется когда составляющая нормали NX = min;
2)
данная формула используется когда составляющая нормали NY = min;
3)
данная формула используется когда составляющая нормали NZ = min;
Для окончательного пересчета координат вершин треугольника будем пользоваться М умноженной на ; где М=М1, М2, М3.
Мf – матрица Фонга. Таким образом координаты в текстурном поле :
Последняя строка используется для контроля вычислений.
Схема закраски фигуры с учетом освещенности с использованием нанесения текстур.
1) Вычисляем h для каждой точки текстуры и записываем полученные результаты в таблицу, которую храним как текстурное поле.
Рис. 14
На рис. 14 показан примерный диапазон и характер изменения h.
2) Высчитываем нормаль к поверхности треугольника
;
3) Пересчитываем координаты в текстурные, используя Мf
;
4) Рассчитываем яркость каждой точки.
Если учитывать рассеянный свет, то , где e - доля рассеянного света.
2.2. Объект имеет гладкую форму.
2.2.1. Аналог алгоритма Гуро
Рис. 15
Яркость рассчитывается в каждой вершине, а яркость на гранях и ребрах получается линейной интерполяцией. В качестве нормали при расчетах яркости в одной вершине используется средняя нормаль , где n – число прилегающих к этой вершине граней. – вектора площади, перпендикулярные соответсвующей грани и равные ее площади, таким образом учитывается то, что грани могут быть разного размера, а следовательно по-разному влиять на среднее значение нормали.
Рассчитанная таким методом яркость вершины используется для всех прилегающих к ней ребер, а следовательно со всех сторон вершины яркость одинакова и перепада яркости на ребрах не будет.
2.2.2. Аналог алгоритма Фонга
Основная идея: рассчитываются средние нормали, и производится интерполяция нормалей, т.е. линейная интерполяция по каждой координате (x,y,z).
Рис. 16
Недостаток метода – если поверхность неровная, то возможны неточности рис.17
Рис.17