Участник:Vlamakarenko/Трассировка лучей
Основные авторы описания: В.А.Макаренко, Р.А.Габдуллин
Свойства и структура алгоритма
Общее описание алгоритма
Трассировка лучей - это технология визуализации трехмерных сцен путем отслеживания обратной траектории лучей света (от наблюдателя к источнику). Достоинствами данного метода являются реалистичность итоговых изображений, возможность визуализации гладких объектов без аппроксимации полигональными поверхностями, простота реализации отражений, преломлений, взятия в фокус, реалистичного освещения; возможность параллельной обработки лучей.
Математическое описание алгоритма
Входные данные
[math]\displaystyle{ scene = \{objects, lights, camera\} }[/math] - сцена, которая будет визуализирована алгоритмом, где
[math]\displaystyle{ objects }[/math] - множество объектов (например сфера, плоскость, треугольник, составной объект и т. п.).
[math]\displaystyle{ lights }[/math] - множество источников света (точечные источники, направленные источники, светящиеся объекты)
[math]\displaystyle{ camera }[/math] - камера наблюдения ("виртуальный глаз").
Объекты задаются произвольным образом так, чтобы можно было найти пересечение луча с этим объектом (например, для сферы достаточно задать положение в пространстве и радиус, а для плоскости - точку, принадлежащую ей и нормаль). Также, для каждого объекта необходимо задать материал - информацию о его отражающих, преломляющих, поглощающих свойствах.
Источники света задаются по-разному, в зависимости от способа распространения света от источника. Например, точечные источники света задаются положением в пространстве и интенсивностью, направленные - интенсивностью и вектором направления.
Камера задается положением в пространстве и ортонормированным базисом [math]\displaystyle{ (\overline{u}_c, \overline{v}_c, \overline{w}_c) }[/math] (локальная система координат). [math]\displaystyle{ \overline{u}_c }[/math] направлен вправо относительно наблюдателя, [math]\displaystyle{ \overline{v}_c }[/math] - вверх, [math]\displaystyle{ \overline{w}_c }[/math] - на наблюдателя, таким образом, [math]\displaystyle{ (\overline{u}_c, \overline{v}_c, \overline{w}_c) }[/math] - правая тройка векторов. Вектор направления камеры в своей системы координат: (0, 0, -1).
Алгоритм трассировки лучей работает с камерой (наблюдателем), множеством объектов сцены и множеством источников освещения. Камера задается положением (точка в трехмерном пространстве) и ортонормированным базисом (локальная система координат). Поставим перед камерой полотно, разбитое на пиксели. Выпустим через каждый пиксел луч. Найдем первое пересечение луча с объектами сцены, расчитаем цвет объекта в точке пересечения (зависит от положения наблюдателя, положения источников света, материала объекта; возможно, понадобится выпустить новые лучи из точки пересечения, чтобы расчитать отражения, преломления, тени от других объектов) и присвоим его соответствующему пикселу.
Вычислительное ядро алгоритма
Основные вычисления связаны с:
1) поиском пересечения луча с объектами сцены
2) расчетом теней от каждого источника света (требуется определить, "виден" ли источник света из точки пересечения с объектом).