Экономические науки/2. Вычислительная техника и программирование

Сламкулова М.Б., Абдикулова Е.Е.

Таразский гогсударственный университет, Казахстан

Математические и физические предпосылки предлагаемого алгоритма обратной трассировки лучей

Согласно модели Уиттеда цвет некоторой точки объекта определяется суммарной интенсивностью

I(l)=Ka*Ia(l)C(l) + Kd*Id(l)*C(l) +Ks*Is(l) + Kr*Ir(l) +Kt*It(l)                (1)

где l – длина волны, C(l) – заданный исходный цвет точки объекта, Ka, Kd, Ks, Kr и Kt – коэффициенты, учитывающие свойства конкретного объекта параметрами фоновой интенсивности, диффузного рассеивания, зеркальности, отражения и прозрачности.

Ia – интенсивность фоновой подсветки,

Id – интенсивность, учитываемая для диффузного рассеивания,

Is – интенсивность, учитываемая для зеркальности,

Ir – интенсивность излучения, пришедшая по отраженному лучу,

It – интенсивность излучения, пришедшая по преломленному лучу.

Интенсивность фоновой подсветки (Ia) для некоторого объекта обычно константа. Запишем формулы для остальных интенсивностей.

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

Для вычисления коэффициента при интенсивности отраженного луча используется следующая формула:

r = 0.5(cos α - Ncos β)2 /(cos α + Ncos β)2 + 0.5(Ncos αcos β)2  /(Ncos α+ cos β)2                                                      (2)

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

Коэффициент при интенсивности преломленного луча вычисляется по формуле:

t = 1 – r                                                            (3)

Схема рассчета интенсивности. Параметры, задающие свойства тел

В связи с недостатками модели Уиттеда в этой программе предлагается следующая система вычисления интенсивности света в точке.

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

Интенсивность фоновой подсветки (IA) задается некоторой константой.

Интенсивность диффузно отраженного света (ID) вычисляется по классическому «закону косинуса».

ID = IL cos α                                                   (4)

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

В случае освещения сцены несколькими источниками Id вычисляется для каждого из них и затем суммируются.

IDi =Σ ILi cos αi                                                                           (5)

Интенсивность блика от источника (IS) вычисляется в соответствии с моделью Фонга.

S = IL cosp β                                                   (6)

где IL – интенсивность источника света (0<=IL<=1), β – угол между отраженным лучом от источника света и направлением на точку, в которой расположена камера (центр проекции), p – некоторая степень от 1 до 200 –влияет на размытость блика. При маленьких значениях p блик более размытый.

Вычисление нормалей

В алгоритме трассировки нормали к объектам необходимы для вычисления отраженного и преломленного лучей, а также для определения освещенности согласно модели Фонга.

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

Вычисление нормали к полигону (Треугольнику).

Вычисление нормали к треугольнику сводится к операции векторного умножения. Пусть задан треугольник ABC координатами трех своих вершин: XA, YA, ZA, XB, YB, ZB, XC, YC, ZC.

Вычислим координаты двух векторов, например AB и AC:

XAB = XBXA, YAB = XBXA, ZAB = XBXA,                                           (7)

XAC = XC – XA,  YAC = XC – XA, ZAC = XC – XA

Координаты вектора нормали будут вычисляться по формулам:

Xn = YABZAC - YACZAB, Yn = XABZAC - XACZAB, Zn = XABYAC - XACYAB           (8)

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

Вычисление нормали к поверхности второго порядка.

Поверхность второго порядка задается в общем случае уравнением вида:

Q(x,y,z) = a1x2 + a2y2 + a3z2 + b1yz + b2xz + b3xy + c1x +c2y +c3z + d =0 (29)

Но мы будем использовать другую форму записи. Так уравнение сферы будет выглядеть следующим образом:

(x-x0)2 + (y-y0)2 + (z-z0)2 = 1                                   (9)

где x0, y0, z0 – координаты центра сферы.

Для вычисления координат вектора нормали необходимо вычислить частные производные по x, y, z.

Координаты вектора нормали сферы:

Xn = 2(x-x0),  Yn = 2(y-y0) ,  Zn = 2(z-z0).                                                    (10)

Направление вектора не изменится, если все его координаты разделить на 2:

Xn = (x-x0),

Yn = (y-y0),                                                 (11)

Zn = (z-z0)

Нормаль для поверхности второго порядка придется вычислять непосредственно в теле трассировки, так как в разных точках фигуры нормали разные.

 

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

 

1             Авдеева С.М., Куров А.В. Алгоритмы трехмерной машинной графики: учебное пособие. – М.: Издательство МГТУ им. Н.Э.Баумана, 1996. – 60 с., ил.

2             Никулин Е. А. Компьютерная геометрия и алгоритмы машинной графики. СПб.: БХВ-Петербург, 2003. – 560с.: ил.

3             Авдеева С.М., Куров А.В. Алгоритмы трехмерной машинной графики: Учебное пособие. – М.: Изд-во МГТУ им. Н.Э. Баумана, 1996. – 60 с.: ил.

4             Иванов         В.П., Батраков А.С. Синтез изображений объектов сложной формы методом трассирования лучей // Программирование.-1989.2.-С. 70-75.