Участник:Vlamakarenko/Трассировка лучей
авторы: В.А.Макаренко, Р.А.Габдуллин
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Трассировка лучей - это технология визуализации трехмерных сцен путем отслеживания обратной траектории лучей света (от наблюдателя к источнику). Достоинствами данного метода являются реалистичность итоговых изображений, возможность визуализации гладких объектов без аппроксимации полигональными поверхностями, простота реализации отражений, преломлений, взятия в фокус, реалистичного освещения; возможность параллельной обработки лучей.
1.2 Математическое описание алгоритма
1.2.1 Входные данные
scene = \{objects, lights, camera\} - сцена, которая будет визуализирована алгоритмом, где
objects - множество объектов (например сфера, плоскость, треугольник, составной объект и т. п.).
lights - множество источников света (точечные источники, направленные источники, светящиеся объекты)
camera - камера наблюдения ("виртуальный глаз").
Объекты задаются произвольным образом так, чтобы можно было найти пересечение луча с этим объектом (например, для сферы достаточно задать положение в пространстве и радиус, а для плоскости - точку, принадлежащую ей и нормаль). Также, для каждого объекта необходимо задать материал - информацию о его отражающих, преломляющих, поглощающих свойствах.
Источники света задаются по-разному, в зависимости от способа распространения света от источника. Например, точечные источники света задаются положением в пространстве и интенсивностью, направленные - интенсивностью и вектором направления.
Камера задается положением в пространстве и ортонормированным базисом (\overline{u}_c, \overline{v}_c, \overline{w}_c) (локальная система координат). \overline{u}_c направлен вправо относительно наблюдателя, \overline{v}_c - вверх, \overline{w}_c - на наблюдателя. Таким образом, (\overline{u}_c, \overline{v}_c, \overline{w}_c) - правая тройка векторов. Вектор направления камеры в своей системе координат: (0, 0, -1).
1.2.2 Генерация луча
Перед камерой на расстоянии d поставим пиксельную сетку w \times h с размером пикселя s \times s так, чтобы камера была направлена в центр сетки. Итоговое изображение будет получено из этой сетки покраской пикселей в нужный цвет.
Пусть p(i, j), где i=\overline{0,h-1}, \quad j=\overline{0,w-1} - пиксел i-ой строки снизу j-го столбца слева. Проведем луч из камеры к центру пикселя в локальной системе координат камеры. Начало луча в точке \overline{pos}=(0,0,0). Найдем вектор направления \overline{dir}:
\overline{dir}.x = s (j -\frac{w}{2} + \frac{1}{2})
\overline{dir}.y = s (i -\frac{h}{2} + \frac{1}{2})
\overline{dir}.z = d
Нормируем вектор \overline{dir} и переведем луч в глобальную систему координат.
1.2.3 Пересечение луча с объектами сцены
Все точки луча ray(\overline{p}, \overline{d}) можно представить в виде:
h(x,y,z)=\overline{p}+t \cdot \overline{d}, \quad t \in [0;\infty) .
Луч пересекает объект O_i тогда и только тогда, когда t_i = \inf\{t \gt 0 \, | \quad \overline{p}+t \cdot \overline{d} \in O_i\} \, \lt \infty
Если луч пересекает объект O_i, то h_i(x,y,z) = \overline{p}+t_i \cdot \overline{d} - их первое пересечение, t_i - расстояние от начала луча до точки пересечения.
1.2.4 Вычисление цвета в точке пересечения
Найдем T = \{t_i\} - параметры пересечения с объектами (см. предыдущий пункт).
t_{min} = \min \{t_i\}, \quad O_{min} = \{O_i | t_i = t_{min}\}
Если t_{min} = \infty, то луч не пересекает ни один объект и нужно покрасить соответствующий пиксел в черный цвет (цвет фона).
Если t_{min} \lt \infty, то нужно найти выходящее излучение (цвет) из точки пересечения в камеру. Выходящее излучение зависит от свойств материала объекта, прямого (излучение, исходящее от источников света) и непрямого (отраженный свет) излучений, входящих в точку пересечения; угла между нормалью к поверхности в точке пересечения и направлением луча.
1.2.5 Вычисление прямого излучения
h_{min}(x,y,z) = \overline{p}+t_{min} \cdot \overline{d}.
L_{is} = \sum_i L(S_i, h_{min}) - прямое входящее излучение.
L(S_i, h_{min}) - излучение источника света S_i, приходящее в точку h_{min}.
Суммирование ведется по i таким, что S_i "виден" из точки h_{min}, в противном случае какой-то объект загораживает источник света, и в точку h_{min} будет падать тень от этого объекта.
1.2.6 Вычисление непрямого излучения
Рассмотрим упрощенную модель непрямого излучения. Пусть материал объекта O_{min} обладает способностью отражать свет.
Тогда нужно найти излучение, приходящее со стороны отраженного луча:
ray(\overline{h}_{min}, \overline{w}_i) - отраженный луч.
\overline{w}_i = \overline{d} -2\cdot (\overline{n}, \overline{d})\cdot \overline{n}.
L\{ray(\overline{h}_{min}, \overline{w}_i)\} - излучение приходящее со стороны отраженного луча. Оно находится тем же самым алгоритмом, что и цвет пикселя (рекурсивно).
1.3 Вычислительное ядро алгоритма
Основные вычисления связаны с:
1) поиском пересечения луча с объектами сцены.
2) расчетом излучения от каждого источника света (требуется определить, "виден" ли источник света из точки пересечения с объектом).