Визуализация
Изображения без невидимых линий и поверхностей в большинстве случаев передают форму объекта достаточно хорошо. Однако для некоторых приложений желательно иметь возможность строить более реалистичные изображения. Особенно важную роль реалистичность играет в «виртуальной реальности» — относительно новой технологии, позволяющей имитировать на компьютере реальные ситуации. Например, вы можете занести в компьютер сведения о внутреннем и внешнем виде проектируемого здания, а затем пройтись по нему и вокруг него, чтобы прочувствовать, как оно будет выглядеть на самом деле. Это средство может оказаться очень полезным для принятия решения о вложении денег в постройку здания.
Для имитации реальной сцены нужно воспроизвести эффекты, создаваемые светом, падающим на поверхности объектов. Этот процесс называется визуализацией или тонированием {rendering). Вообще говоря, все, что мы видим, — это отражение света от поверхностей, а по этому отраженному свету мы определяем форму, текстуру и цвет объекта. В усовершенствованных графических библиотеках обычно имеются некоторые средства визуализации. Для их применения достаточно задать фасетированную модель объекта, условия освещенности и свойства поверхностей (например, блестящие или тусклые). Однако для правильного использования технологий визуализации необходимо иметь представление об их основах. Даже задать правильные значения параметров функций визуализации без достаточно хорошего знания техники визуализации непросто. Поэтому в настоящем разделе мы коротко опишем две основные технологии визуализации: затушевывание (shading) и трассировку лучей (ray tracing). Подробное описание технологий визуализации можно найти в большинстве книг по компьютерной графике.
Затушевывание
Процедура затушевывания аналогична удалению невидимых поверхностей с той разницей, что пикселы одной поверхности окрашиваются разными цветами в соответствии с цветом и интенсивностью отраженного света в точке, проектируемой на этот пиксел. Таким образом, основной задачей становится расчет цвета и интенсивности света, отраженного от какой-либо точки объекта. Начнем с расчета интенсивности.
Поверхность объекта может быть освещена светом, исходящим непосредственно от источников, то есть прямым светом (direct illumination), а также светом, отраженным от других поверхностей, дающим окружающее освещение (ambient illumination). Свет, отраженный данной точкой объекта, получается сложением отраженных лучей двух типов (рис. 3.21).
Рисунок 3.21 - Прямое и окружающее освещение
Отраженный от множества поверхностей сцены свет может считаться приходящим с бесчисленного множества направлений, поэтому отражение окружающего освещения считается равномерно распределенным во всех направлениях. Поэтому интенсивность отражения Ra записывается по формуле:
Ra=KdIa (3.5)
Здесь 1a — интенсивность окружающего освещения, a Kd — коэффициент отражения поверхности. У белых поверхностей коэффициент отражения близок к единице, а у черных — к нулю. Наблюдатель будет воспринимать одну и ту же интенсивность отраженного окружающего освещения вне зависимости от своего положения, поскольку это освещение образуется благодаря отражению от всех поверхностей и распределяется равномерно по всем направлениям.
Для описания прямого освещения достаточно рассмотреть лишь точечные источники света, поскольку линейные и поверхностные источники могут быть рассмотрены как совокупность точечных. Отражение света от точечного источника рассматривается как комбинация двух видов отражения: диффузного и зеркального.
Диффузное отражение (diffuse reflection) состоит в том, что поверхность поглощает свет, а затем переизлучает его равномерно во всех направлениях (рис. 3.22). Интенсивность диффузного отражения (как и отражения окружающего освещения) не зависит от положения наблюдателя. Особенности структуры поверхности, такие как текстура и цвет, становятся видимыми именно благодаря диффузному отражению. Для грубых поверхностей отражение является преимущественно диффузным, а не зеркальным.
Зеркальное отражение (specular reflection) — это прямое отражение света поверхностью. Данный тип отражения характерен для блестящих поверхностей, таких как зеркала. Блестящие поверхности отражают почти весь падающий свет и потому обладают повышенной яркостью (рис. 3.23). Интенсивность зеркального отражения воспринимается по-разному в зависимости от положения наблюдателя относительно сцены.
Рисунок 3.22 - Диффузное отражение Рисунок 3.23 - Зеркальное отражение
Опишем процедуру расчета интенсивностей диффузного и зеркального отражения. Когда мы сделаем это, интенсивность отражения света от точечного источника можно будет приближенно описать как сумму отражений указанных двух типов. Интенсивность диффузного отражения прямо пропорциональна косинусу угла падения. Углом падения в данной точке называется угол между вектором нормали к поверхности и вектором, направленным из точки к источнику света (рис. 3.24).
Рисунок 3.24 - Определение угла падения
Это соотношение называется законом косинусов Ламберта. Его легко проверить, представив падающий пучок в виде конечного числа параллельных линий, находящихся на одинаковом расстоянии друг от друга (рис. 3.25).
Рисунок 3.25 - Иллюстрация к закону Ламберта
Обратите внимание, что количество лучей, падающих на поверхность, уменьшается с ее наклоном. Отсюда следует, что интенсивность отраженного света с наклоном поверхности также будет падать.
