Освещение. Если рассматривать луч света, как электромагнитную волну, то он характеризуется двумя параметрами – длиной волны l

Если рассматривать луч света, как электромагнитную волну, то он характеризуется двумя параметрами – длиной волны l, и амплитудой I. Произвольный луч можно рассматривать как сумму волн с различной длиной, каждая из них вносит свой вклад I(l). Эта функция называется спектральной характеристикой луча света. В общем луч одного и того же цвета может состоять из различных волн. Обычно рассматривают луч света, как состоящий из трех базовых компонент R,G,B. При распространении света следует обрабатывать два случая – распространение в однородной среде и взаимодействие с границей раздела двух сред.

В однородной среде свет распространяется прямолинейно с постоянной скоростью. Отношение этой скорости к скорости света в вакууме определяется коэффициентом преломления среды h(l). При этом свет затухает с коэффициентом , где d – расстояние, пройденное светом в среде, b - коэффициент затухания. На практике, пользуются более простой формулой , где a,b – некоторые константы.

При переходе границы двух сред происходит отражение и преломление света. Угол отражения a равен углу падения. Отсюда легко можно получить отраженный вектор.

R=-L+a+b

a=b=L+c

c=(cosa)N=(-L·N)N

R=-L+2(L-(L·N)N)=L-2(L·N)N

Преломление происходит согласно закону hLsina=hTsinq.

Можно использовать один коэффициент , тогда sinq=hsina.

,

(1)

=С, , если представить вектор T=aL+bN, тогда .

если наложить условие нормировки на T, тогда |T|=1

(2)

Если теперь сложить (1) и (2)

=>

Теперь из уравнения (2) можно вычислить b.

,

Это законы для идеального отражения и преломления, когда поверхность идеально гладкая. Обычно поверхность имеет неровности, и часть света отражается во всех направлениях. Такой освещение отражение диффузным и интенсивность отраженного луча рассчитывается по законы Ламберта Id=Il*kd(l)*cosa, где Il – яркость света, упавшего на поверхность, kd(l) – коэффициент диффузного отражения поверхности. Этот коэффициент зависит от цвета поверхности, т.е. белый свет отражаясь от синей поверхности становится синим. Если свет задается тремя компонентами, то обычно эти коэффициенты рассчитывают из цвета поверхности (R,G,B) и некоторого общего коэффициента диффузного отражения kd. kd(lR)=kd*R, kd(lG)=kd*G, kd(lB)=kd*B.

В направлениях, близких к направлению отраженного вектора, добавляется блик. Он рассчитывается по эмпирической формуле Is=Il*ks*cosng, параметр n дает фокусировку блика, g - угол между направлением на наблюдателя и отраженным лучем. Цвет блика не зависит от цвета поверхности, т.е. белый свет дает белый блик на синей поверхности. Кроме того, к этим двум цветам добавляется некоторый рассеянный свет Ia*ka(l), где Ia – яркость рассеянного света, ka(l) – коэффициент отражения рассеянного света. Обычно ka(l)=kd(l).

Общая формула яркости света I’.

I’= Id+Is+Ia =Il*kd(l)*cosa+ Il*ks*cosng+ Ia*ka(l)

I’=Il*(kd(l)*cosa+ ks*cosng)+ Ia*ka(g)=(kd(l)*cosa+ ks*cosng)+ Ia*ka(l)

Эту схему можно легко применить в алгоритме трассировки лучей. Первым делом находится ближайшее пересечение луча, проходящего через некоторый пиксел экрана. Затем, из этой точки выпускаются еще несколько лучей. Как правило, это лучи в направлении источников света, а также отраженные и преломленные лучи. Для этих лучей также ищется пересечение и из этих точек снова испускаются лучи. Процесс прекращается, если достигнут источник света. После этого происходит расчет яркости во всех токах пересечения в обратном порядке (обратная трассировка), и яркость в начальной точке записывается в пиксел.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: