Участник:Vlamakarenko/Трассировка лучей: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 24: Строка 24:
Источники света задаются по-разному, в зависимости от способа распространения света от источника. Например, точечные источники света задаются положением в пространстве и интенсивностью, направленные - интенсивностью и вектором направления.
Источники света задаются по-разному, в зависимости от способа распространения света от источника. Например, точечные источники света задаются положением в пространстве и интенсивностью, направленные - интенсивностью и вектором направления.


Камера задается положением в пространстве и ортонормированным базисом <math>(\overline{u}_c, \overline{v}_c, \overline{w}_c)</math> (локальная система координат). <math>\overline{u}_c</math> направлен вправо относительно наблюдателя, <math>\overline{v}_c</math> - вверх, <math>\overline{w}_c</math> - на наблюдателя. Таким образом, <math>(\overline{u}_c, \overline{v}_c, \overline{w}_c)</math> - правая тройка векторов. Вектор направления камеры в своей системы координат: (0, 0, -1).  
Камера задается положением в пространстве и ортонормированным базисом <math>(\overline{u}_c, \overline{v}_c, \overline{w}_c)</math> (локальная система координат). <math>\overline{u}_c</math> направлен вправо относительно наблюдателя, <math>\overline{v}_c</math> - вверх, <math>\overline{w}_c</math> - на наблюдателя. Таким образом, <math>(\overline{u}_c, \overline{v}_c, \overline{w}_c)</math> - правая тройка векторов. Вектор направления камеры в своей системе координат: <math>(0, 0, -1)</math>.  


Перед камерой на расстоянии <math>d</math> поставим пиксельную сетку <math>w \times h</math> с размером пикселя <math>s \times s</math> так, чтобы камера была направлена в центр сетки.
=== Генерация луча ===
 
Перед камерой на расстоянии <math>d</math> поставим пиксельную сетку <math>w \times h</math> с размером пикселя <math>s \times s</math> так, чтобы камера была направлена в центр сетки. Итоговое изображение будет получено из этой сетки покраской пикселей в нужный цвет.
 
Пусть <math>p(i, j)</math>, где  <math>i=\overline{0,h-1}, \,\,\, j=\overline{0,w-1}</math> - пиксел <math>i</math>-ой строки снизу <math>j</math>-го столбца слева. Проведем луч из камеры к центру пикселя в локальной системе координат камеры. Начало луча в точке <math>\overline{pos}=(0,0,0)</math>.
Найдем вектор направления <math>\overline{dir}</math>:
 
<math>\overline{dir}.x = s (j -\frac{w}{2} + \frac{1}{2}) </math>
 
<math>\overline{dir}.y = s (i -\frac{h}{2} + \frac{1}{2}) </math>
 
<math>\overline{dir}.z = d</math>
 
Нормируем вектор <math>\overline{dir}</math> и переведем луч в глобальную систему координат.
 
=== Вычисление цвета пикселя ===
 
Найдем пересечения луча с объектами сцены. Если луч не пересечет ни один объект, то покрасим пиксел в черный цвет (можно использовать сферическое изображение в качестве фона и покрасить пиксел должным образом). В противном случае найдем близжайшую точку и обозначим ее через <math>h(x,y,z)</math>


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


== Вычислительное ядро алгоритма ==
== Вычислительное ядро алгоритма ==

Версия от 14:52, 17 ноября 2016

авторы: В.А.Макаренко, Р.А.Габдуллин

Свойства и структура алгоритма

Общее описание алгоритма

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

Математическое описание алгоритма

Входные данные

[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] - правая тройка векторов. Вектор направления камеры в своей системе координат: [math]\displaystyle{ (0, 0, -1) }[/math].

Генерация луча

Перед камерой на расстоянии [math]\displaystyle{ d }[/math] поставим пиксельную сетку [math]\displaystyle{ w \times h }[/math] с размером пикселя [math]\displaystyle{ s \times s }[/math] так, чтобы камера была направлена в центр сетки. Итоговое изображение будет получено из этой сетки покраской пикселей в нужный цвет.

Пусть [math]\displaystyle{ p(i, j) }[/math], где [math]\displaystyle{ i=\overline{0,h-1}, \,\,\, j=\overline{0,w-1} }[/math] - пиксел [math]\displaystyle{ i }[/math]-ой строки снизу [math]\displaystyle{ j }[/math]-го столбца слева. Проведем луч из камеры к центру пикселя в локальной системе координат камеры. Начало луча в точке [math]\displaystyle{ \overline{pos}=(0,0,0) }[/math]. Найдем вектор направления [math]\displaystyle{ \overline{dir} }[/math]:

[math]\displaystyle{ \overline{dir}.x = s (j -\frac{w}{2} + \frac{1}{2}) }[/math]

[math]\displaystyle{ \overline{dir}.y = s (i -\frac{h}{2} + \frac{1}{2}) }[/math]

[math]\displaystyle{ \overline{dir}.z = d }[/math]

Нормируем вектор [math]\displaystyle{ \overline{dir} }[/math] и переведем луч в глобальную систему координат.

Вычисление цвета пикселя

Найдем пересечения луча с объектами сцены. Если луч не пересечет ни один объект, то покрасим пиксел в черный цвет (можно использовать сферическое изображение в качестве фона и покрасить пиксел должным образом). В противном случае найдем близжайшую точку и обозначим ее через [math]\displaystyle{ h(x,y,z) }[/math]


Вычислительное ядро алгоритма

Основные вычисления связаны с:

1) поиском пересечения луча с объектами сцены

2) расчетом теней от каждого источника света (требуется определить, "виден" ли источник света из точки пересечения с объектом).

Макроструктура алгоритма

Схема реализации последовательного алгоритма

Последовательная сложность алгоритма

Информационный граф

Ресурс параллелизма алгоритма

Входные и выходные данные алгоритма

Свойства алгоритма

Программная реализация алгоритма

Особенности реализации последовательного алгоритма

Локальность данных и вычислений

Возможные способы и особенности параллельной реализации алгоритма

Масштабируемость алгоритма и его реализации

Динамические характеристики и эффективность реализации алгоритма

Выводы для классов архитектур

Существующие реализации алгоритма

Литература