Затушевывание

Процедура затушевывания аналогична удалению невидимых поверхностей с той разницей, что пикселы одной поверхности окрашиваются разными цветами в соответствии с цветом и интенсивностью отраженного света в точке, проектируе- мой Ra = KаIa на этот пиксел. Таким образом, основной задачей становится расчег цвета и интенсивности света, отраженного от какой-либо точки объекта. Начнем с расчета интенсивности.

Поверхность объекта может быть освещена светом, исходящим непосредственно от источников, то есть прямым светом (direct illumination), а также светом, отраженным от других поверхностей, дающим окружающее освещение (ambient illumination). Свет, отраженный данной точкой объекта, получается сложением отраженных лучей двух типов (рис. 3.28).

 

Затушевывание

Отраженный от множества поверхностей сцены свет может считаться приходящим с бесчисленного множества направлений, поэтому отражение окружающего освещения считается равномерно распределенным во всех направлениях. Поэтому интенсивность отражения Ra записывается по формуле:
 
Затушевывание
 
Здесь Ia — интенсивность окружающего освещения, а Кd — коэффициент отражения поверхности. У белых поверхностей коэффициент отражения близок к единице, а у черных — к нулю. Наблюдатель будет воспринимать одну и ту же интенсивность отраженного окружающего освещения вне зависимости от своего положения, поскольку это освещение образуется благодаря отражению от всех поверхностей и распределяется равномерно по всем направлениям.

Для описания прямого освещения достаточно рассмотреть лишь точечные источники света, поскольку линейные и поверхностные источники могут быть рассмотрены как совокупность точечных. Отражение света от точечного источника рассматривается как комбинация двух видов отражения: диффузного и зеркального.

Диффузное отражение (diffuse reflection) состоит в том, что поверхность поглощает свет, а затем переизлучает его равномерно во всех направлениях (рис. 3.29). Интенсивность диффузного отражения (как и отражения окружающего освещения) не зависит от положения наблюдателя. Особенности структуры поверхности, такие как текстура и цвет, становятся видимыми именно благодаря диффузному отражению. Для грубых поверхностей отражение является преимущественно диффузным, а не зеркальным.

Зеркальное отражение (specular reflection) — это прямое отражение света поверхностью. Данный тип отражения характерен для блестящих поверхностен, таких как зеркала. Блестящие поверхности отражают почти весь падающий свет и потому обладают повышенной яркостью (рис. 3.30). Интенсивность зеркального отражения воспринимается по-разному в зависимости от положения наблюдателя относительно сцены.

 

Затушевывание     Затушевывание

Опишем процедуру расчета интенсивностей диффузного и зеркального отражения. Когда мы сделаем это, интенсивность отражения света от точечного источника можно будет приближенно описать как сумму отражений указанных двух типов. Интенсивность диффузного отражения прямо пропорциональна косинусу угла падения. Углом падения в данной точке называется угол между вектором нормали к поверхности и вектором, направленным из точки к источнику света (рис. 3.31).
 
Затушевывание
 
Это соотношение называется законом косинусов Ламберта. Его легко проверить, представив падающий пучок в виде конечного числа параллельных линий, находящихся на одинаковом расстоянии друг от друга (рис. 3.32). Обратите внима- ние, что количество лучей, падающих на поверхность, уменьшается с ее наклоном. Отсюда следует, что интенсивность отраженного света с наклоном поверхности также будет падать.
 
 

Затушевывание

Математически закон косинусов Ламберта может быть выражен так. Интенсивность падающего света в интересующей нас точке 1Р считается обратно пропорциональной квадрату расстояния до источника света D1, поэтому для источника интенсивностью Ер она запишется так:
 

Затушевывание

Обычно предполагается, что все источники света установлены достаточно далеко от поверхностей, так что D1 может считаться одинаковым для всех точек. Тогда закон Ламберта запишется независимо от D1:
 
Затушевывание
 
Здесь Rd — интенсивность диффузного отражения, Kd — коэффициент отражения (см. формулу (3.17)), N - единичный вектор нормали к поверхности в интересующей нас точке, L — единичный вектор, направленный от точки к источнику света, а N ∙ L — косинус угла падения. Вектор L постоянен для всех точек, поскольку источник считается расположенным достаточно далеко.

Используя формулу (3.19), можно столкнуться со следующей проблемой: две параллельные плоскости, частично перекрывающиеся на экране, будут казаться наблюдателю неразличимыми. Лучше, если бы плоскость, расположенная ближе, казалась более яркой, то есть имела большее значение Rd. Такого эффекта можно достичь, изменив формулу (3.19):

Затушевывание
 

Здесь D — расстояние между интересующей нас точкой и точкой зрения наблюдателя, а постоянная D0 позволяет избежать деления на нуль.

Теперь займемся расчетом интенсивности зеркального отражения. Было сделано множество попыток точно промоделировать зеркальное отражение. Мы рассмотрим одну типичную модель, которая носит название модели Фонга (Phong model). Большая часть отраженного света попадает в небольшой конический объем вокруг оси, угол которой совпадает с углом падения, но находится по другую сторону от нормали к поверхности (рис. 3.33). Эта ось на рисунке обозначена единичным вектором R. Интенсивность воспринимаемого наблюдателем света будет спадать по мере удаления вектора зрения (единичный вектор V на рис. 3.33) от вектора R. Фонг предложил следующую формулу для описания этого эффекта:

Затушевывание

Здесь Ер, D и Do имеют тот же смысл, что и в формуле (3.20), a Ks — константа, аналогичная Kd в той же формуле. Ks называется коэффициентом зеркального отражения. Формулу (3.21) можно интерпретировать так: интенсивность света, воспринимаемого наблюдателем, вектор зрения которого отклоняется от оси R на угол ф, пропорциональна (cos φ)n. Таким образом, интенсивность отражения быстро спадает с удалением от угла отражения, если п много больше единицы, то есть отраженный свет распространяется плотным пучком вдоль оси R. Поэтому у блестящих поверхностей, например металлических, значение п должно быть большим. Например. для такой поверхности хорошо взять значение порядка 150. Тусклая поверхность, например бумага или ткань, характеризуется значением п, близким к единице.
 
Затушевывание

Теперь мы можем получить интенсивность отражения в данной точке сложив выражения (3.17), (3.20) и (3.21):

Затушевывание

Чтобы учесть цвет отраженного света, достаточно записать выражение (3.22) отдельно для каждого из основных цветов: красного, синего и зеленого. Таким образом, интенсивность отраженного света раскладывается на интенсивность красного (/r), зеленого (/g,) и синего (/b,). Источники света также описываются в трех цветах: /ar Iag Iab для окружающего освещения и Epr Еpg Epb, для прямого освещения. Коэффициент-отражения поверхности тоже записывается отдельно для каждого цвета: Кdr Kdg и Кdb. Например, поверхность красного цвета будет иметь значение Кdr =1, Kdg = 0, Kdb = 0. Тогда выражение (3.22) можно разложить на три равенства:

 
Затушевывание
 
Обратите внимание, что коэффициент зеркального отражения не раскладывается на отдельные цвета. Дело в том, что зеркальное отражение практически не влияет на цвет. Интенсивности, определяемые уравнениями (3.23), используются для задания интенсивностей электронных пушек на цветных мониторах стандарта RGB. Мы выяснили, как рассчитывается цвет и интенсивность отраженного света для одной точки объекта. Однако если нам нужно затушеванное изображение объекта, выражения (3.23) необходимо вычислить для всех точек объекта. Очевидно, что эта задача требует огромных вычислительных затрат для своего решения. Одним из способов сократить вычисления является представление поверхно- стей в виде наборов треугольных граней. В этом случае вектор нормали для каждой грани приходится вычислять только один раз. Кроме того, векторы L, R и V в пределах каждой грани могут считаться постоянными, если предполагается, что источники света и наблюдатель находятся далеко от объекта. Это предположение широко используется для упрощения вычислений. В итоге выражение (3.23) приходится вычислять только один раз для каждой грани. Упрощая вычисления, мы, однако, теряем плавность перехода между соседними треугольными гранями. Одним из решений этой проблемы является использование плавно меняющегося вектора нормали в пределах каждой грани. По методу Фонга вектор единичной нормали для грани вычисляется интерполяцией векторов нормали в вершинах этой грани. Вектор нормали в вершине вычисляется усреднением векторов нормали плоских граней, которым эта вершина принадлежит. Другое решение — вычислять интенсивность света для каждого пиксела путем интерполяции интенсивностей в вершинах грани. Это называется затушевыванием по методу Гуро ( Gouraud shading).
 

 

Смотрите также