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

Материал из Алговики
Перейти к навигации Перейти к поиску
Строка 41: Строка 41:
 
Нормируем вектор <math>\overline{dir}</math> и переведем луч в глобальную систему координат.
 
Нормируем вектор <math>\overline{dir}</math> и переведем луч в глобальную систему координат.
  
=== Вычисление цвета пикселя ===
+
=== Пересечение луча с объектами сцены ===
  
Найдем пересечения луча с объектами сцены. Если луч не пересечет ни один объект, то покрасим пиксел в черный цвет (можно использовать сферическое изображение в качестве фона и покрасить пиксел должным образом). В противном случае найдем близжайшую точку и обозначим ее через <math>h(x,y,z)</math>
+
Найдем пересечения луча с объектами сцены.
 +
 
 +
Луч <math>ray(\overline{p}, \overline{d})</math> пересечет объект <math>objects[i]</math> в точке <math>h(x,y,z)=\overline{p}+t_i \cdot \overline{d}</math>
  
  

Версия 18:04, 17 ноября 2016

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

Содержание

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}, \,\,\, 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}) пересечет объект objects[i] в точке h(x,y,z)=\overline{p}+t_i \cdot \overline{d}


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