Научная статья на тему 'Рекурсивный алгоритм трассировки лучей с приоритетным стеком'

Рекурсивный алгоритм трассировки лучей с приоритетным стеком Текст научной статьи по специальности «Математика»

CC BY
362
29
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ТРАССИРОВКА ЛУЧЕЙ / СТЕК / ПРИОРИТЕТ / АЛГОРИТМ / РЕКУРСИЯ / RAYTRACING / STACK / PRIORITY / ALGORITHM / RECURSION

Аннотация научной статьи по математике, автор научной работы — Никулин Евгений Александрович

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

RECURSIVE RAYTRACING ALGORITHM WITH PRIORITY STACK

Describes an improved reverse raytracing method which utilises a stack-organized memory containing objects pierced by reflected and refracted rays regarding object intersection area processing priority.

Текст научной работы на тему «Рекурсивный алгоритм трассировки лучей с приоритетным стеком»

ИНФОРМАТИКА И СИСТЕМЫ УПРАВЛЕНИЯ

УДК 681.3.513

Е.А. Никулин

РЕКУРСИВНЫЙ АЛГОРИТМ ТРАССИРОВКИ ЛУЧЕЙ С ПРИОРИТЕТНЫМ СТЕКОМ

Нижегородский государственный технический университет им. Р.Е. Алексеева

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

Ключевые слова: трассировка лучей, стек, приоритет, алгоритм, рекурсия.

Настоящая работа продолжает статью [1], в которой рассматриваются вопросы компьютерного моделирования сцен с простыми и сложными оптическими эффектами визуализации, тени, отражения и преломления методом трассировки лучей (МТЛ). Во избежание повторений здесь излагается оригинальный материал с необходимыми ссылками на формулы и рисунки предыдущей работы.

Высокая реалистичность МТЛ достигается генерированием иерархии геометрических лучей, имитирующих распространение природных световых лучей в пространстве сцены. В процесс трассировки вполне органично вписывается идея рекурсии, согласно которой на некотором уровне rec алгоритм вызывает сам себя со значением rec + 1 при каждом ветвлении падающего луча в точке его пересечения с ближайшим объектом сцены. При достижении тупиковой вершины дерева, соответствующей прохождению луча мимо всех объектов либо исчерпанию числа рекурсий, ветвление прекращается и происходит выход на предыдущий уровень рекурсии с возвратом либо черного цвета (при rec = 0 - цвета фона), либо освещенности конечной поверхности.

Цвета, приходящие в узлы ветвления и, в конце концов, в корневую вершину дерева, суммируются до насыщения по каждой из трех цветовых компонент: r, g и b. Полученный цветовой вектор с = [r g b] определяет окраску экранного пиксела в окне вывода сцены. Совокупность таких пикселов составляет синтезированное изображение.

Рекурсивный алгоритм трассировки лучей должен решать следующие задачи:

• выводить результаты моделирования на проективную плоскость регулируемых размеров в желаемом ракурсе обзора сцены и работать с обоими типами наблюдателя - как дальним, так и ближним;

• оперировать с моделями различных геометрических объектов - плоских фигур, полиэдров и криволинейных поверхностей - и ориентировать их в пространстве сцены желаемым образом;

• находить точки пересечения лучей с ближайшими поверхностями, анализировать их свойства, определять необходимость и выполнять дальнейшее ветвление дерева трассировки до заданной глубины рекурсии раздельно для отраженного и преломленного лучей;

• обрабатывать сцены как с обособленными, так и с пересекающимися и вложенными друг в друга объектами;

• аккумулировать в каждой вершине дерева суммарную (фоновую, направленную от

© Никулин Е.А., 2012.

неэкранированных источников света и пришедшую с отраженным и преломленным лучами) освещенность соответствующей точки ближайшей к наблюдателю поверхности с учетом затухания интенсивности лучей в зависимости от пройденного ими расстояния.

Рассмотрим последовательно способы решения перечисленных задач.

1. Совместим проективную плоскость с фронтальной плоскостью ху мировой системы координат (МСК) и зададим габариты прямоугольного проективного окна - ширину 2Х и высоту 27, кратные размеру его рецептора Л (рис. 1). В процессе генерирования первичных лучей р + Vt координаты центров рецепторов р = [х у 0] пробегают значения

х = {-X, -X + Л, ..., X}, у = {-7, - 7 + Л, ..., 7}. (1)

Тип близости наблюдателя зададим переменной пвагБ е {0, 1}, определяющей формулу вычисления вектора направления проецирующего луча

V = пеагЗ • р - 8 (2)

и перспективные свойства изображения сцены:

• при пваг8 = 0 строится параллельная проекция с вектором V = -8, постоянным для всех рецепторов;

• при пваг8 = 1 строится центральная проекция с векторами лучей V = р - 8, исходящими из точки 8.

Пересчет мировых координат в экранные координаты точки рэ = [хэ уэ 0] производится с помощью масштабного коэффициента (пиксельной длины единичного отрезка) и экранных координат левого верхнего угла окна вывода рлв = [хл ув 0]:

Рис. 1. Проективная плоскость

Рэ = рМ(|Дз, -|э, 0) + [X Y 0]| + Рл

3)

где М(а, Ь, с) — матрица масштабирования по осям координат с коэффициентами а, Ь и с [2].

В МТЛ на каждом сканирующем первичном луче ищется точка q поверхности ближайшего к наблюдателю объекта сцены. В цвет ее суммарной освещенности и окрашивается пиксел рэ. В системе координат сцены (СКС) хсусгс это точка qс. Желаемое положение СКС достигается ее геометрическими преобразованиями в МСК. Например, два вращения вокруг осей у и х на углы фу и фх и перенос на вектор В преобразуют точку qс следующим образом:

q = qсRy(фy)Rx(фx) + В, I

4)

где Кю(ф) — матрица вращения на угол ф вокруг координатной оси ш [2].

На рис. 2 показаны разноракурсные изображения одной и той же сцены.

б) в)

Рис. 2. Сцена в разных ракурсах:

а - при ф = 0° и фх = 25°; б - при фу = -30° и фх = 45°; в - при фу = 180°, фх = 0° и B = [0 -гс 0] (гс -радиус сферы; г - при фу = 0°, фх = 150° и B = [0 гс 0]

2. Желаемое расположение в пространстве сцены отдельного объекта, заданного в своей объектной системе координат (ОСК) х^у^с, достигается геометрическими преобразо-

ваниями в СКС: масштабированием с коэффициентами mx, my, mz, вращениями на углы уу, ух, и переносом на вектор А:

Яс = qоM(mx,my,mz)Ry(уy)Rx(Уx)Rz(Vx) + А. (5)

Таким образом, последовательность преобразований (5) ^ (4) ^ (3) позволяет изобразить освещенность объектной точки qо в экранном пикселе рэ.

Геометрия объектов, составляющих сцену на рис. 2, задается следующими моделями:

• поверхность сферы с радиусом г и центром в точке о (рис. 3, а) описывается в СКС неявным уравнениему^) = 0 с функциейу^) = ^ - о) ° ^ - о) - г и имеет нормаль N = q - о;

• полиэдр треугольной призмы (рис. 3, б) задается в ОСК, согласно [2], списком шести вершин Q = ^ 1, q 2, ..., q 6} и группой списков пяти граней О = {О 1, 02, ..., 05}, где

ql = [-1 -1 0], q2 = [1 -1 1], qз = [1 -1 -1], q4 = [-1 1 0], q5 = [1 1 1],

q6 = [1 1 -1];

в1 = {1,2,5,4,1}, 02 = {2,3,6,5,2}, О3 = {3,1,4,6,3}, 04 = {1,3,2,1}, О5 = {4,5,6,4}.

Геометрические преобразования (5) применяются ко всем точкам списка Q. Вектор нормали 1-й грани полиэдра находится по [2], как векторное произведение N = уг- х wг■ векторов сторон грани V, )2 -^ и у, = ^ )г;

• нормированная секция клетчатой доски определена в ОСК четырьмя вершинами q1 = [-1 0 -1], q2 = [-1 0 1], q3 = [1 0 1], q4 = [1 0 -1] и двумя числами клеток по сторонам кх и ^ (рис. 3,е). Расширение доски по длине и ширине осуществляется соединением секций друг с другом боковыми сторонами. Желаемые размеры прямоугольной доски

= 2схтх и ^ = 2czmz задаются числами секций сх, ^ и масштабными коэффициентами тх, т^ а ориентация в сцене устанавливается углами вращений ух, уу, и вектором переноса А преобразования (5). Вектор нормали к плоскости доски вычисляется как векторное произведение N = V х w векторов сторон V = q2 - q1 и w = q3 - q2.

Р

Р

42

44

Чэ

а)

б)

в)

Рис. 3. Примеры объектов

3. Большая часть вычислений в МТЛ приходится на расчет пересечений световых лучей с поверхностями объектов, поэтому тщательной проработке этого вопроса уделяется самое пристальное внимание.

Прямая p + Vt, несущая обрабатываемый луч, может выступать в трех модификациях с соответствующим интервалом изменения параметра t:

• mod = 0 — прямая первичного (при rec = 0) луча, идущего от дальнего (при nearS = 0) наблюдателя (см. [1], рис. 1,а), с неограниченным в обе стороны параметром -да < t < да;

• mod = 1 — односторонне ограниченный параметром t > -1 первичный луч, идущий от ближнего наблюдателя (см. [1], рис. 1, б). В той же модификации с параметром t > 0 генерируются все лучи на уровнях рекурсии rec > 0;

• mod = 2 — двусторонне ограниченный неравенством 0 < t < 1 отрезок теневого зонда [3] между началом луча и точкой L расположения источника света (см. [1], рис. 4, а).

Все эти варианты должны быть заложены в функциях расчета пересечения прямой p + Vt с объектами сцены. В ее формальном шаблоне

cros*(par,pp,V,mod,t, q,N), (6)

символ * заканчивает имена функций, разработанных для конкретных геометрических объектов. Входными аргументами являются список параметров объекта par и атрибуты прямой — точка р, вектор направления V и модификатор mod. Функция возвращает через имя признак пересечения cros* е {0, 1}, а при непустом результате cros* = 1 — выходные аргументы: параметр луча t, точку пересечения q = р + Vt и нормированный вектор нормали N(q).

Примером (6) может служить функция, основанная на решении квадратного уравнения at + 2bt + c = 0, полученного подстановкой точки прямой q + Vt в неявное уравнение сферы (q - o) о (q - o) - r2 = 0 [2].

& crosS({r,o},p,V,mod,t,q,N)

{a = VoV, b = Vo(p - o), c = (p - o)o(p - o) - r ; d = b1 - ac; если d > 0, то Vi = 1,2

{t =(-1)' 4d - b , q = p + vt, n = (q - o) / r; a

// коэф-ты квадрат. уравнения // дискриминант // есть пересечение

// элементы пересечения

}

s = {mod = 0}v{mod = 1}A{-(-,rec) < t}v{mod = 2}л{0 < t < 1}; если s Ф 0, то возврат 1;

// ближайшая точка // нет пересечения

возврат 0;

} О

Аналогично устроены функции расчета пересечения прямой со всеми по6 объектами сцены: cros2 с плоскостью, cros3 с треугольником, crosP с полигоном, crosH с полиэдром ... Имена этих функций составляют список cros={crosi,...,crosn }. При добавлении в сцену

нового k-го объекта в структуру данных добавляются новый список параметров park и ссылки на функцию crosk. При удалении какого-либо объекта из сцены его параметры и ссылка на соответствующую функцию также удаляются из структуры данных.

Следующая функция перебирает объекты сцены и находит из них первый, пересекаемый по ходу луча p + Vt.

& cros_ray(par,prmin,p,V,mod,t,q,N) {t = да, m = 0; // нет пересечения

Vi=1, поб // перебор объектов

{ s=crosi (par ,p,V, mod, t ',q ',N '); // параметры пересечения

если s A^t'<t}A{pri >prmin }, то m = i, t=t', q=q', N=N '; // ближайшая точка

} возврат m; // номер ближайшего объекта

} О

В отсутствие пересечений луч ушел в пустоту, функция возвращает cros_ray = 0 и выходной аргумент t = да. Иначе возвращаются номер объекта m е [1, по6], ближайшего к началу луча и соответствующие ему аргументы — конечный параметр луча t < да, точка пересечения q и в ней нормированный вектор нормали N.

Важнейшим визуальным аспектом алгоритма трассировки является анализ свойств поверхности в точке q, хранящихся в списке параметров parm и определяющих дальнейшую судьбу луча. Кроме геометрических параметров, список включает и оптические параметры:

• собственный цвет поверхности e или список цветов E={ei,...,en } многоцветного объекта, например, клетчатой доски (см. рис. 3, в) или полиэдра с разноцветными гранями;

• коэффициент диффузного отражения фонового освещения kф;

• коэффициенты диффузного kaci и направленного отражений точечного источника, составляющие общий коэффициент отражения k^ = kRо + kM;

• коэффициенты диффузного кдп и направленного кнп преломлений точечного источника, составляющие общий коэффициент преломления кпре = кдп + кнп;

• показатели диффузного рассеяния v и резкости бликов д;

• показатель преломления материала n;

• показатель экспоненциального затухания интенсивности света X по закону Бугера

5(d) = exp(-Xd) < 1. (7)

Кроме геометрических и оптических свойств объектов, моделирующая программа должна располагать списком par0 параметров окружающей среды, в которой находится наблюдатель и возникают первичные лучи. Он содержит:

• собственный цвет среды e0 = [1 1 1];

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

• интенсивность фонового освещения 1ф;

• число источников света пи, их интенсивности Ij ^I и точки расположения Lj ^Ln .

Для управления лампами введем флаг lamp, отключающий все источники нулем, включающий их при lamp ^ 0, а при при lamp > 1 выводящий изображения источников на экран;

• коэффициенты к0, к1, к2 ослабления интенсивности точечных источников от расстояния d по обратноквадратичной зависимости K(d) = 1 / (к0 + к1d + fad );

• показатель преломления n0 (у воздуха пвозд ~ 1,003, у воды пвод ~ 1,33);

• показатель X0 затухания света по закону Бугера (7).

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

• при выполнении условий {котр > 0} л {rec < готр} по [2] рассчитывается направление отраженного луча M=V—2vN, где v=Vо N, и запускается его трассировка на уровне рекурсии rec + 1 в оптической среде падающего луча;

• при выполнении условий {£пре >0}л{гес<r }л{ип VхN <1} по обоснованному в [2] методу вычисляется направление преломленного луча

R=Пп V+(д/Пп2 +(l—Пп2 ) V/ V2 — Пп | vN (8)

и производится его трассировка на уровне гес + 1 в той среде, в которой он оказался. Раздельное ограничение рекурсий позволяет как выборочно отключить построение отражений и/или преломлений, задав значения готр = 0 и/или гпре = 0, так и исследовать процесс наслоения оптических эффектов путем последовательного увеличения значений готр и гпре.

4. Вторым аргументом функции сго5_гау является минимальный приоритет ргт\п > 0 объектов, отбираемых для расчета пересечения с лучом. Суть и новизна в том, что сцена может содержать прозрачные пересекающиеся объекты, трассировка лучей в которых сталкивается с выбором показателя преломления области пространства, занятой обоими телами. Иногда (погруженные в жидкость инородные прозрачные тела, воздушные пузырьки в стекле и т. п.) интуитивно понятно, какая среда вытесняет собой другую. Но в сборных конструкциях, например, в ювелирных изделиях, выбор замещающей среды производится не из физических, а из технологических соображений путем изменения формы деталей. В компьютерном моделировании также нетрудно геометрически частично либо полностью вдвинуть прозрачные объекты друг в друга. Как же тогда без решения сложной задачи логического конструирования выбрать материал и показатель преломления области пересечения?

Решение этой проблемы состоит в присвоении поб объектам сцены приоритетов рг1 > 0 V/=1,поб по следующему правилу: из пары объектов с соотношением приоритетов рга >ргъ

объект а замещает своим материалом пересекаемую область объекта Ъ. Все потенциально пересекающиеся объекты должны иметь разные приоритеты. Внешней среде, вытесняемой всеми объектами, присваивается наименьший приоритет рг0 = 0.

Для хранения истории распространения луча введем приоритетный стек трассировки (ПСТ) pst с вершиной а = psti, хранящей номер текущей среды луча. Дальнейший ход лучей, выходящих из точки q, определяется соотношением приоритетов а-й среды распространения падающего луча p + Vt и номера m пересеченного им объекта:

• при prm < pra падающий луч пересекает поверхность менее приоритетного объекта и продолжает свой путь в прежнем направлении V без добавления каких-либо освещенностей. В результате часть m-го объекта, погруженная в среду а, становится невидимой;

• при prm > pra генерируются отраженный q + Mt и преломленный q + Rt лучи, а к осве-щенностям, доставленным этими лучами, добавляются освещенности фоновым и точечными источниками света.

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

• начальное состояние pst = {0} соответствует зарождению первичного луча во внешней среде с показателем преломления n0;

• прохождение луча в среде m-го объекта с приоритетом prm < pra изменяет ПСТ следующим образом:

0 на входе в объект (вход определяется по отсутствию числа m во всем списке pst) его

номер вставляется между вершиной стека а и его правым остатком pst, полученным левым сдвигом списка pst:

m £ pst ^ pst={а,т, pst} ;

0 на выходе луча из объекта его номер m удаляется из стека:

m е pst ^ pst = pst — m;

• трассировка луча, отраженного от поверхности m-го объекта с приоритетом prm > prа, производится с неизменным ПСТ;

• трассировка луча, преломленного на поверхности m-го объекта с приоритетом prm > prа, изменяет приоритетный стек следующим образом:

0 на входе в объект его номер добавляется в начало стека:

m £ pst ^ pst = {m,pst};

0 на выходе преломленного луча номер объекта удаляется из стека:

m е pst ^ pst = pst — m.

Значения вершины стека а до и х после его изменения используются для расчета относительного показателя преломления на поверхности раздела двух сред:

пп = ^ / nx. (9)

Подробные схемы хода лучей в пересекающихся разноприоритетных объектах и результаты компьютерного моделирования МТЛ с ПСТ приведены в [1, рис. 14-17].

5. Последняя из решаемых задач состоит в расчете освещенности точки q всеми возможными источниками света и передаче ее интенсивности в точку p назад по лучу p + Vt (рис. 4). Номер ближашего пересеченного лучом объекта

m = cros_ray(par,1,p,V,mod,t,q,N) е [1, по6] возвращает функция cros_ray с приоритетом prmin = 1, запускающим поиск пересечений луча со всеми объектами сцены, и модификатором mod = rec v nearS.

При m = 0 луч не пересек ни одного объекта и ушел в пустоту. Тогда на начальном уровне рекурсии rec = 0 при значении флага lamp < 2 пиксел экрана p3, найденный в (3), закрашивается фоновым цветом 1ф. Однако, если задан флаг lamp > 2 и

Рис. 4. Освещенность точки

ближайшей на пути луча оказалась точка источника Ьг-, удовлетворяющая условию (3) из [1], то пиксел рэ закрашивается цветом I (см. [1], рис. 5). Возврат числа т = 0 на уровнях рекурсии гес > 0 означает достижение тупиковой вершины дерева трассировки, не добавляющей в точку р никакой освещенности.

При гес > 0 и т Ф 0 функция сгау_гау возвращает параметр t, точку q пересечения падающего луча р + Vt с т-м объектом и вектор нормали N в этой точке. Запомнив вершину приоритетного стека а = pst1, переходим при ргт > рга к накоплению освещенности

cq котртСМ + kOTpmCR + кфтСф + "^(клотСдог + кнотСног +кдптСдпг +кнпmCнпi)к(

г=1

г )к( Ui| )5иг, (10)

пришедшей в точку q по каналам отражения, преломления и прямого освещения:

• освещенность см возвращается по отраженному лучу М с уровня рекурсии гес + 1 при условии {котрт > 0} л {гес < готр} активности эффекта отражения т-го объекта;

• освещенность ^ возвращается по преломленному лучу R с уровня рекурсии гес + 1 при условии {кпрет > 0} л {гес < гпре} активности эффекта преломления т-го объекта. Для вычисления вектора луча по (8) нужно обновить стек, взять из его вершины номер преломленной среды х = р^1, найти по (9) относительный показатель преломления пп и убедиться в выпол-

V х N

нении условия пп

<1 существования преломленного луча;

• прямая освещенность точки q описывается усовершенствованной здесь моделью закраски Фонга [2, 3] и включает:

0

отражение фонового освещения 1ф в среде о

N ° V

Có emIoeo

0

возвращаемое функцией fo(em,I^ • ea,N,V,vm); диффузное отражение точечного источника (Li, I}

cqÍ -i

N ° V

N ° U,

0

возвращаемое функцией ^(ет,1г^,У,иг;ут) с падающим лучом и, = q - Ь,; направленное отражение точечного источника

С но, = I/ V ° Щ )Гт ,

возвращаемое функцией по(1г,Мг,У,цт) с отраженным лучом М, = и,- - 2и/ N, и, = и,- ° N;

диффузное преломление точечного источника сдш = ^(ет,1г,^У,иг-,ут); направленное преломление точечного источника снп = по(1г^г^,цт) с преломленным лучом

йЧ + Uп"2 +(l-n-2)Uí/uí\2 -n-1 | UíN.

0 0

R г = п

Все компоненты прямой освещенности, кроме фоновой, вычисляются при активном флаге lamp > 0 и прямой видимости точки L¿ из точки q, т. е. в отсутствие пересечений отрезка qLi с любым объектом, чей приоритет не меньше приоритета среды распространения луча q - Ut Возложим проверку этого события на тест прямой видимости точки L из точки q в k-й среде:

vid (q,L,k)=cros _ ray(par, prk ,q,L - q,2,t ',q',N'). (11)

В отсутствие пересечений отрезка qL тест возвращает нулевое значение, сигнализирующее, что источник L не загорожен от точки q, никаким объектом, имеющим приоритет, не меньший prk. Наоборот, при vid ^ 0 прямой луч источника не попадает в точку q и в ней будет наблюдаться пониженная освещенность, т. е. тень. Таким образом, с помощью функции (11) реализуется глобальная модель освещенности.

V

m

V

m

Отраженные компоненты сдог- и сног- существуют при наличии у m-го объекта отражательных свойств и расположении всего отрезка qL; в той же среде g, где находится точка p:

[котрт > 0} л {vUi > 0} л {v/d(q,L„G) = 0}. (12)

Преломленные компоненты сдш- и снш- вычисляются при наличии у т -го объекта преломляющих свойств, расположении всего отрезка qL; в преломленной среде х и условии существования преломленного луча R;:

{¿прем >0}лК <0\л{у1ё(q,Li,х)=0}л{«-1 ЦXN|<l}. (13)

В (12) и (13) использован индикатор vu: =(vоn)u: °n) ориентации векторов V и U относительно касательной плоскости в точке q. Он положителен для источников L;, видимых из точки p отраженными, и отрицателен для источников, видимых преломленными.

Для повышения гибкости управления потерями энергии лучей при их распространении в оптических средах введем в алгоритм следующие элементы:

• флаг затухания zat е {0, 1}, позволяющий переключать эффект затухания света;

• функцию относительного затухания интенсивности луча

5(V,X) = if(zat: exp(-X|V|), 1),

совпадающую при zat = 1 с законом рассеяния Бугера (7) и возвращающую единицу при zat = 0. С ее помощью составим коэффициент относительного затухания падающего луча V от точки его испускания до точки q:

5V = if(rec: 5(q - p,XG), if(nearS: 5(q - S,X0), 1)).

Разберем порядок его вычисления:

• на нулевом уровне рекурсии rec = 0 первичный луч проходит во внешней среде с показателем затухания Хо. В сцене с ближним наблюдателем (nearS = 1) относительное затухание 5V = 5(q - S,X0) определяется расстоянием между точками S и q. Удаление наблюдателя в бесконечность приводит к полному затуханию энергии луча и теоретическому значению 5V = 0. Во избежание сплошной темноты примем в этом случае субъективное решение 5V = 1, т. е. отсутствие затухания первичных лучей в сцене с дальним наблюдателем;

• на последующих уровнях рекурсии затухание вторичного луча, проходящего от точки p до точки q, определяется длиной вектора q - p и показателем затухания в g-й среде XG.

Множитель 5V < 1 используется при zat = 1 для уменьшения двух величин:

• суммарной освещенности (10) точки q, доходящей до точки p:

Cp = Cq • sv.

Визуально это создает эффект воздушной перспективы (см. [1], рис. 6);

• длины вектора направления луча по формуле

V = V • sv,

что позволяет завершить его трассировку по условию затухания |V| < dmin, где dmin -заданный порог затухания энергии луча, например, dmin = 0.1. Для придания порогу относительного характера нужно нормировать все векторы направлений первичных лучей.

Учет рассеяния световой энергии луча точечного источника с вектором направления моделируется с помощью коэффициента 8Ц =5(U, Да)<1, который при zat = 1 уменьшает

интенсивность луча I; на пути длиной |U;| в среде g. При zat = 0 эффект затухания отключен.

Настало, наконец, время скомпоновать отдельные разработанные в [1] и данной статье элементы алгоритма в единую рекурсивную функцию ray(rec,p,V,pst) обратной трассировки луча p + Vt на уровне рекурсии rec с приоритетным стеком трассировки pst (рис. 5).

гау(гес,р,У,ртО

mod=гес V пеагБ т=сго8 _ гау (par,1,p,V,mod ) т=I, с=03, а=pst1, 5V =1

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

(^Возврат 1ф

т

-0-

Возврат сь

>Р -0

т=Ц, с =Щиеаг# 8(Ь-8 Д0),1)1

-> /=1...и

еиё

М=и - 2^, 5Г =8(иДа^

с = с + аО(ет Д, ,U,N,V,Vm )^дот5и С = С + По(1, ,и,М,^Ц т >нот 8

и

d=п ~2+(1-п "2)| и/ и

и=п_1и+У1 -п_1 8Г =8(и,Лх)8V

с = с + ао(ет1 ,U,N, V,Vт )Кпт8и

с = с + По(1, т )Кпт8и

pst=1Г(те pst: р^—1т,{а,т, pst}) с=с+гау (гес^^, pst )8-у

-> к

отрт

гес

отр

М=У-2уМ

С^+ГЯу^^^М^фотрт^

к0

прек

pst = ¡Г(те pst: pst—m,{m, pst})

Х = Pst1, п = па/п

X

И=nV+(л/^ - п^ с = с + гаУ (гес + 1,q,R, Pst Крет^

т' фт V

>0

■ Возврат с •«

0

Рис. 5. Блок-схема функции трассировки лучей

Вызов функции в форме c = ray(0,p,V,{0}) производится в циклах (1) сканирования рецепторов проективной плоскости p = [x y 0] (см. рис. 1). Для каждого из них по (2) вычисляется и нормируется вектор направления первичного обратного луча V=nearS p—S, задаются начальные значения уровня рекурсии rec = 0 и приоритетного стека трассировки pst = {0}. Возвращенный функцией вектор цвета окраски рецептора c = [cr cg cb] подвергается покомпонентному ограничению cra = min{cra, 1} Vro e {r, g, b}, преобразованию в вектор [r g b] желаемой {и,-,«^«ь}-разрядной цветовой палитры и выводу в экранный пиксел (3).

Исчерпывающие иллюстрации работы описанного здесь рекурсивного метода трассировки лучей приведены в [1].

Обозначения

|V| — длина вектора V.

V=V/|V| — нормированный вектор V единичной длины.

V о W — скалярное произведение векторов V и W.

V х W — векторное произведение векторов V и W.

V • W — поэлементное произведение векторов V и W.

X = max{x, 0} — неотрицательное усечение числа x.

Библиографический список

1. Никулин, Е.А. Компьютерное моделирование оптических эффектов // Труды Нижегород. гос. техн. ун-та им. Р.Е.Алексеева; НГТУ. — Н. Новгород. 2011.

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

3. Роджерс, Д. Алгоритмические основы машинной графики / Д. Роджерс. - М.: Мир. 1989. — 512 с.

Дата поступления в редакцию 20 .01.2011

E.A. Nikulin

RECURSIVE RAYTRACING ALGORITHM WITH PRIORITY STACK

Nizhny Novgorod State Technical University n.a. R.Y. Alexeev

Describes an improved reverse raytracing method which utilises a stack-organized memory containing objects pierced by reflected and refracted rays regarding object intersection area processing priority.

Key words: raytracing, stack, priority, algorithm, recursion.

i Надоели баннеры? Вы всегда можете отключить рекламу.