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

Материал из Алговики
Перейти к навигации Перейти к поиску
Строка 61: Строка 61:
  
 
Если <math>t_{min} < \infty</math>, то нужно найти выходящее излучение (цвет) из точки пересечения в камеру. Выходящее излучение зависит от свойств материала объекта, прямого (излучение, исходящее от источников света) и непрямого (отраженный свет) излучений, входящих в точку пересечения.
 
Если <math>t_{min} < \infty</math>, то нужно найти выходящее излучение (цвет) из точки пересечения в камеру. Выходящее излучение зависит от свойств материала объекта, прямого (излучение, исходящее от источников света) и непрямого (отраженный свет) излучений, входящих в точку пересечения.
 +
 +
=== Вычисление прямого излучения ===
 +
 +
<math>h_{min}(x,y,z) = \overline{p}+t_{min} \cdot \overline{d}</math>.
 +
 +
<math>L_{is} = \sum_i L(S_i, h_{min})</math> - прямое входящее излучение.
 +
 +
<math>L(S_i, h_{min})</math> - излучение источника света <math>S_i</math>, приходящее в точку <math>h_{min}</math>.
 +
 +
Суммирование ведется по <math>i</math> таким, что <math>S_i</math> "виден" из точки <math>h_{min}</math>, в противном случае какой-то объект загораживает источник света, и в точку <math>h_{min}</math> будет падать тень от этого объекта.
 +
 +
=== Вычисление непрямого излучения ===
  
 
== Вычислительное ядро алгоритма ==
 
== Вычислительное ядро алгоритма ==

Версия 19:55, 17 ноября 2016

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

Содержание

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

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

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

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

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

[math]scene = \{objects, lights, camera\}[/math] - сцена, которая будет визуализирована алгоритмом, где

[math]objects[/math] - множество объектов (например сфера, плоскость, треугольник, составной объект и т. п.).

[math]lights[/math] - множество источников света (точечные источники, направленные источники, светящиеся объекты)

[math]camera[/math] - камера наблюдения ("виртуальный глаз").

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

Источники света задаются по-разному, в зависимости от способа распространения света от источника. Например, точечные источники света задаются положением в пространстве и интенсивностью, направленные - интенсивностью и вектором направления.

Камера задается положением в пространстве и ортонормированным базисом [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].

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

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

Пусть [math]p(i, j)[/math], где [math]i=\overline{0,h-1}, \quad 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] и переведем луч в глобальную систему координат.

1.2.3 Пересечение луча с объектами сцены

Все точки луча [math]ray(\overline{p}, \overline{d})[/math] можно представить в виде:

[math]h(x,y,z)=\overline{p}+t \cdot \overline{d}, \quad t \in [0;\infty) [/math].

Луч пересекает объект [math]O_i[/math] тогда и только тогда, когда [math]t_i = \inf\{t \gt 0 \, | \quad \overline{p}+t \cdot \overline{d} \in O_i\} \, \lt \infty[/math]

Если луч пересекает объект [math]O_i[/math], то [math]h_i(x,y,z) = \overline{p}+t_i \cdot \overline{d}[/math] - их первое пересечение, [math]t_i[/math] - расстояние от начала луча до точки пересечения.


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

Найдем [math]T = \{t_i\}[/math] - параметры пересечения с объектами (см. предыдущий пункт).

[math]t_{min} = \min \{t_i\}, \quad O_{min} = \{O_i | t_i = t_{min}\}[/math]

Если [math]t_{min} = \infty[/math], то луч не пересекает ни один объект и нужно покрасить соответствующий пиксел в черный цвет (цвет фона).

Если [math]t_{min} \lt \infty[/math], то нужно найти выходящее излучение (цвет) из точки пересечения в камеру. Выходящее излучение зависит от свойств материала объекта, прямого (излучение, исходящее от источников света) и непрямого (отраженный свет) излучений, входящих в точку пересечения.

1.2.5 Вычисление прямого излучения

[math]h_{min}(x,y,z) = \overline{p}+t_{min} \cdot \overline{d}[/math].

[math]L_{is} = \sum_i L(S_i, h_{min})[/math] - прямое входящее излучение.

[math]L(S_i, h_{min})[/math] - излучение источника света [math]S_i[/math], приходящее в точку [math]h_{min}[/math].

Суммирование ведется по [math]i[/math] таким, что [math]S_i[/math] "виден" из точки [math]h_{min}[/math], в противном случае какой-то объект загораживает источник света, и в точку [math]h_{min}[/math] будет падать тень от этого объекта.

1.2.6 Вычисление непрямого излучения

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

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

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

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

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 Литература