Трассировка лучей (графика)

редактировать

Метод рендеринга Эта рекурсивная трассировка лучей отражающих цветных сфер на белой поверхности демонстрирует эффекты неглубоких глубина резкости, источники света «площадь» и диффузное взаимное отражение.

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

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

Трассировка пути - это форма трассировки лучей, которая может создавать мягкие тени, глубину резкости, размытие движения, каустику, Ambient occlusion и непрямое освещение. Трассировка пути - это метод несмещенного рендеринга, но для получения высококачественных эталонных изображений без зашумленных артефактов необходимо трассировать большое количество лучей.

Содержание
  • 1 История
  • 2 Обзор алгоритма
    • 2.1 Расчет лучей для прямоугольного окна просмотра
  • 3 Подробное описание компьютерного алгоритма трассировки лучей и его происхождения
    • 3.1 Что происходит в (упрощенной) природе
    • 3.2 Алгоритм построения лучей
    • 3.3 Алгоритм рекурсивной трассировки лучей
    • 3.4 Преимущества перед другими методами рендеринга
    • 3.5 Недостатки
    • 3.6 Обратное направление обхода сцены лучами
    • 3.7 Пример
  • 4 Адаптивный контроль глубины
  • 5 Граничные объемы
  • 6 Интерактивная трассировка лучей
  • 7 Вычислительная сложность
  • 8 См. Также
  • 9 Ссылки
  • 10 Внешние ссылки
История
Эта гравюра на дереве Альбрехт Дюрер из 1525 года показывает использование двери Дюрера. Это изображение Альбрехта Дюрера из 1532 года показывает человека, использующего сетку для создания изображения. Считается, что немецкий художник эпохи Возрождения первым описал эту технику.

Идея трассировки лучей зародилась еще в 16 веке, когда ее описал Альбрехт Дюрер, которому приписывают изобретение. В Четыре книги по измерениям он описал устройство, называемое дверью Дюрера, с использованием нити, прикрепленной к концу стилуса, которую помощник перемещает по контурам объекта для рисования. Нить проходит через дверную коробку, а затем через крючок на стене. Нить образует луч, а крючок действует как центр проекции и соответствует положению камеры при трассировке лучей.

В 1976 году Скотт Рот создал анимацию флип-книжка в Бобе Спрауле. курс компьютерной графики Калифорнийского технологического института с использованием трассировки лучей с помощью простой модели камеры-обскуры. Здесь показаны отсканированные страницы.

Книжка-обложка: ранняя трассировка лучей

Компьютерная программа Скотта отметила точку края в местоположении пикселя, если луч пересекал ограниченную плоскость, отличную от плоскости его соседей. Конечно, луч мог пересекать несколько плоскостей в пространстве, но только ближайшая к камере точка поверхности была отмечена как видимая. Края неровные, потому что только грубое разрешение было практичным с вычислительной мощностью используемого DEC PDP-10 с разделением времени. «Терминал» был дисплеем Tektronix в трубке для хранения текста и графики. К дисплею был прикреплен принтер, который создавал изображение дисплея на [катящейся] термобумаге. [Хотя нормаль к поверхности могла быть вычислена на каждом пересечении луча и поверхности для рендеринга в градациях серого, пиксели дисплея были только двоичными: зелеными или черными.] В то время как в General Motors Research Labs с 1978 по 1980 год Скотт Рот расширил рамки, введение термина ray casting в контексте компьютерной графики и твердотельного моделирования. Для каждого пикселя изображения в сцену отбрасывается луч, идентифицируется видимая поверхность, вычисляется нормаль к поверхности в видимой точке и вычисляется интенсивность видимого света. Для моделирования теней, преломляющей прозрачности и общей зеркальности (например, зеркал) были брошены дополнительные лучи.

Первым фильмом, в котором использовалась трассировка лучей, был Compleat Angler (1979), снятый инженером Bell Labs Тернером Уиттедом. До 2013 года крупномасштабное глобальное освещение имитировалось дополнительным освещением для основных фильмов. Фильм Pixar 2013 года Университет монстров 2013 года был первым анимационным фильмом, в котором трассировка лучей использовалась для всего освещения и затенения.

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

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

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

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

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

Таким образом, при трассировке лучей сокращенно предполагается, что данный луч пересекает рамку вида. После максимального количества отражений или после прохождения луча на определенное расстояние без пересечения луч прекращает движение и значение пикселя обновляется.

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

На входе мы имеем (при вычислении мы используем вектор нормализацию и векторное произведение ):

  • E ∈ R 3 { \ displaystyle E \ in \ mathbb {R ^ {3}}}{\ displaystyle E \ in \ mathbb {R ^ {3}}} положение глаз
  • T ∈ R 3 {\ displaystyle T \ in \ mathbb {R ^ {3}}}{\ displaystyle T \ in \ mathbb {R ^ {3}}} целевая позиция
  • θ ∈ [0, π] {\ displaystyle \ theta \ in [0, \ pi]}{\ displaystyle \ theta \ in [0, \ pi]} поле зрения - для человека мы можем принять ≈ π / 2 рад = 90 ∘ {\ Displaystyle \ приблизительно \ пи / 2 {\ текст {рад}} = 90 ^ {\ circ}}{\ displaystyle \ приблизительно \ pi / 2 {\ text {rad}} = 90 ^ {\ circ}}
  • m, k ∈ N {\ displaystyle m, k \ in \ mathbb {N}}{\ displaystyle m, k \ in \ mathbb {N}} количество квадратных пикселей в вертикальном и горизонтальном направлении области просмотра
  • i, j ∈ N, 1 ≤ i ≤ k ∧ 1 ≤ j ≤ m {\ displaystyle i, j \ in \ mathbb {N}, 1 \ Leq i \ Leq k \ land 1 \ leq j \ leq m}{\ displaystyle i, j \ in \ mathbb {N}, 1 \ leq i \ leq k \ land 1 \ leq j \ leq m} количество фактических пикселей
  • v → ∈ R 3 {\ displaystyle {\ vec {v}} \ in \ mathbb { R ^ {3}}}{\ displaystyle {\ vec {v}} \ in \ mathbb {R ^ {3}}} вертикальный вектор, который указывает, где находится вверх и вниз, обычно v → = [0, 1, 0] {\ displaystyle {\ vec {v}} = [0, 1,0]}{\ displaystyle {\ vec {v}} = [0,1,0]} (на картинке не видно) - roll компонент, который определяет поворот области просмотра вокруг точки C (где осью вращения является секция ET)

Пиксели схемы видового экрана, глаз E и цель T, viewp ортцентр C

Идея состоит в том, чтобы найти положение центра каждого пикселя области просмотра P ij {\ displaystyle P_ {ij}}P_ {ij} , который позволяет нам найти линию, идущую от глаза E {\ displaystyle E}E через этот пиксель, и, наконец, получить луч, описанный точкой E {\ displaystyle E}E и вектор R → ij = P ij - E {\ displaystyle {\ vec {R}} _ {ij} = P_ {ij} -E}{\ displaystyle {\ vec {R}} _ {ij} = P_ {ij} -E} (или его нормализация r → ij {\ displaystyle {\ vec {r}} _ {ij}}{\ displaystyle {\ vec {r}} _ {ij}} ). Сначала нам нужно найти координаты нижнего левого пикселя области просмотра P 1 m {\ displaystyle P_ {1m}}{\ displaystyle P_ {1m}} и найти следующий пиксель, сдвинувшись вдоль направлений, параллельных области просмотра (векторы b → n {\ displaystyle {\ vec {b}} _ {n}}{\ displaystyle {\ vec {b}} _ {n}} i v → n {\ displaystyle {\ vec {v}} _ {n}}{\ displaystyle {\ vec { v}} _ {n}} ), умноженное на размер пикселя. Ниже мы вводим формулы, которые включают расстояние d {\ displaystyle d}d между глазом и окном просмотра. Однако это значение будет уменьшено во время нормализации лучей r → ij {\ displaystyle {\ vec {r}} _ {ij}}{\ displaystyle {\ vec {r}} _ {ij}} (так что вы можете также принять, что d = 1 {\ displaystyle d = 1}d = 1 и удалите его из вычислений).

Предварительные вычисления: давайте найдем и нормализуем вектор t → {\ displaystyle {\ vec {t}}}{\ displaystyle {\ vec {t}}} и векторы b →, v → {\ displaystyle {\ vec {b}}, {\ vec {v}}}{\ displaystyle {\ vec {b}}, {\ vec {v}}} , которые параллельны окну просмотра (все изображено на картинке выше)

t → = T - E, b → = v → × t → {\ displaystyle {\ vec {t}} = TE, \ qquad {\ vec {b}} = {\ vec {v}} \ times {\ vec {t}}}{\ displaystyle {\ vec {t}} = TE, \ qquad {\ vec {b}} = {\ vec {v}} \ times {\ vec {t} }}
t → n = t → | | t → | |, b → n = b → | | b → | |, v → n = t → n × b → n {\ displaystyle {\ vec {t}} _ {n} = {\ frac {\ vec {t}} {|| {\ vec {t}} ||} }, \ qquad {\ vec {b}} _ {n} = {\ frac {\ vec {b}} {|| {\ vec {b}} ||}}, \ qquad {\ vec {v}} _ {n} = {\ vec {t}} _ {n} \ times {\ vec {b}} _ {n}}{\ displaystyle {\ vec {t}} _ {n} = {\ frac {\ vec {t}} {|| {\ vec {t}} ||}}, \ qquad {\ vec {b}} _ {n} = {\ frac {\ vec {b}} {|| {\ vec { b}} ||}}, \ qquad {\ vec {v}} _ {n} = {\ vec {t}} _ {n} \ times {\ vec {b}} _ {n}}

обратите внимание, что центр области просмотра C = E + t → nd {\ displaystyle C = E + {\ vec {t}} _ {n} d}{\ displaystyle C = E + {\ vec {t}} _ {n} d} , затем мы вычисляем размеры области просмотра hx, hy {\ displaystyle h_ {x}, h_ {y}}{\ displaystyle h_ {x}, h_ {y}} разделить на 2, включая соотношение сторон m - 1 k - 1 {\ displaystyle {\ frac {m-1} {k-1}}}{\ dis playstyle {\ frac {m-1} {k-1}}}

gx = hx 2 = d загар ⁡ θ 2, gy = hy 2 = gxm - 1 к - 1 {\ displaystyle g_ {x} = {\ frac {h_ {x}} {2}} = d \ tan {\ frac {\ theta} { 2}}, \ qquad g_ {y} = {\ frac {h_ {y}} {2}} = g_ {x} {\ frac {m-1} {k-1}}}{\ displaystyle g_ {x} = {\ frac {h_ {x}} {2}} = d \ tan {\ frac {\ theta} {2}}, \ qquad g_ {y } = {\ frac {h_ {y}} {2}} = g_ {x} {\ frac {m-1} {k-1}}}

, а затем мы вычислить векторы смещения следующего пикселя qx, qy {\ displaystyle q_ {x}, q_ {y}}{\ displaystyle q_ {x}, q_ {y}} в направлениях, параллельных области просмотра (b →, v → {\ displaystyle {\ vec {b}}, {\ vec {v}}}{\ displaystyle {\ vec {b}}, {\ vec {v}}} ) и центр левого нижнего пикселя p 1 m {\ displaystyle p_ {1m}}{\ displaystyle p_ {1m}}

q → x = 2 gxk - 1 b → n, q → y = 2 тренажерный зал - 1 v → n, p → 1 m = t → nd - gxb → n - gyv → n {\ displaystyle {\ vec {q}} _ {x} = {\ frac {2g_ {x}} {k-1 }} {\ vec {b}} _ {n}, \ qquad {\ vec {q}} _ {y} = {\ frac {2g_ {y}} {m-1}} {\ vec {v}} _ {n}, \ qquad {\ vec {p}} _ {1m} = {\ vec {t}} _ {n} d-g_ {x} {\ vec {b}} _ {n} -g_ { y} {\ vec {v}} _ {n}}{\ displaystyle {\ vec {q}} _ {x} = {\ frac {2g_ {x}} {k-1}} {\ vec {b}} _ {n}, \ qquad {\ vec {q} } _ {y} = {\ frac {2g_ {y}} {m-1}} {\ vec {v}} _ {n}, \ qquad {\ vec {p}} _ {1m} = {\ vec {t}} _ {n} d-g_ {x} {\ vec {b}} _ {n} -g_ {y} {\ vec {v}} _ {n}}

Вычисления: примечание P ij = E + p → ij {\ displaystyle P_ {ij} = E + {\ vec {p}} _ {ij }}{\ displaystyle P_ {ij} = E + {\ vec {p}} _ {ij}} и луч R → ij = P ij - E = p → ij {\ displaystyle {\ vec {R}} _ {ij} = P_ {ij} -E = {\ vec {p}} _ {ij}}{\ displaystyle {\ vec {R}} _ {ij} = P_ {ij} -E = {\ vec {p}} _ {ij}} поэтому

p → ij = p → 1 m + q → x (i - 1) + q → y (j - 1) {\ displaystyle {\ vec {p}} _ {ij} = {\ vec {p}} _ {1m} + {\ vec {q}} _ {x} (i-1) + {\ vec {q}} _ {y} (j-1)}{\ displaystyle {\ vec {p}} _ {ij} = {\ vec {p}} _ {1m} + {\ vec {q}} _ { х} (я-1) + {\ vec {q}} _ {y} (j-1)}
r → ij = R → ij | | R → i j | | = p → i j | | p → i j | | {\ displaystyle {\ vec {r}} _ {ij} = {\ frac {{\ vec {R}} _ {ij}} {|| {\ vec {R}} _ {ij} ||}} = {\ frac {{\ vec {p}} _ {ij}} {|| {\ vec {p}} _ {ij} ||}}}{\ displaystyle {\ vec {r}} _ {ij} = {\ frac {{\ vec {R}} _ {ij}} {|| {\ vec {R}} _ {ij} ||}} = {\ frac {{\ vec {p}} _ {ij} } {|| {\ vec {p}} _ {ij} ||}}}

Приведенная выше формула была протестирована в этом проекте javascript (работает в браузере).

Подробное описание компьютерного алгоритма трассировки лучей и его происхождения

Что происходит в (упрощенной) природе

В природе источник света испускает луч света, который, в конце концов, распространяется, на поверхность, которая прерывает его продвижение. Этот «луч» можно представить себе как поток фотонов, движущихся по тому же пути. В идеальном вакууме этот луч будет прямой линией (без учета релятивистских эффектов ). С этим световым лучом может произойти любая комбинация четырех вещей: поглощение, отражение, преломление и флуоресценция. Поверхность может поглощать часть светового луча, что приводит к потере интенсивности отраженного и / или преломленного света. Он также может отражать весь или часть светового луча в одном или нескольких направлениях. Если поверхность имеет какие-либо свойства transparent или translucent, она преломляет часть светового луча в себя в другом направлении, поглощая при этом часть (или все) из спектра (и, возможно, с изменением цвета). Реже поверхность может поглощать некоторую часть света и флуоресцентно переизлучать свет более длинноволновым цветом в случайном направлении, хотя это бывает достаточно редко, поэтому его можно исключить из большинства приложений визуализации. Между поглощением, отражением, преломлением и флуоресценцией необходимо учитывать весь входящий свет, и не более того. Например, поверхность не может отражать 66% падающего светового луча и преломлять 50%, так как в сумме они составят 116%. Отсюда отраженные и / или преломленные лучи могут попадать на другие поверхности, где их поглощающие, преломляющие, отражающие и флуоресцентные свойства снова влияют на прохождение входящих лучей. Некоторые из этих лучей движутся таким образом, что попадают в наш глаз, заставляя нас видеть сцену и тем самым вносить свой вклад в окончательное визуализированное изображение.

Алгоритм трассировки лучей

[*** ЭТО НЕОБХОДИМО ПЕРЕПИСАТЬ НА ОСНОВЕ ИСТОРИИ *** Первый алгоритм трассировки лучей, используемый для рендеринга, был представлен в 1968 году. С тех пор этот алгоритм был называется "лучей ". Идея распределения лучей состоит в том, чтобы проследить лучи от глаза, по одному на пиксель, и найти ближайший объект, блокирующий путь этого луча. Представьте изображение как дверь-ширму, где каждый квадрат экрана является пикселем. Это и есть объект, который видит глаз через этот пиксель. Используя свойства материала и эффект источников света в сцене, этот алгоритм может определить затенение этого объекта. Делается упрощающее предположение, что если поверхность обращена к свету, свет достигнет этой поверхности и не будет блокироваться или находиться в тени. Затенение поверхности вычисляется с использованием традиционных моделей затенения 3D компьютерной графики. Одним из важных преимуществ преобразования лучей по сравнению с более старыми алгоритмами развертки была его способность легко работать с неплоскими поверхностями и твердыми телами, такими как конусы и сферы. Если математическая поверхность может быть пересечена лучом, она может быть визуализирована с помощью преобразования лучей. Сложные объекты можно создавать с помощью методов твердотельного моделирования и легко визуализировать.

Алгоритм рекурсивной трассировки лучей

Трассировка лучей может создавать фотореалистичные изображения. Помимо высокой степени реализма, трассировка лучей может имитировать эффекты камеры из-за глубина резкости и форма диафрагмы (в данном случае шестиугольник ). Число отражений или отскоков, которые может сделать «луч», и то, как на него влияет каждый Время, когда он встречается с поверхностью, контролируется настройками программного обеспечения. На этом изображении каждому лучу было разрешено отражаться до 16 раз. Таким образом, в этих сферах можно увидеть множественные «отражения отражений». (Изображение, созданное с помощью Кобальт.) Количество преломлений, которые может создать «луч», и то, как на него влияет каждый раз, когда он встречается с поверхностью, которая позволяет пропускать свет, регулируется настройками в Здесь каждый луч был настроен на преломление или отражение ("глубина") до 9 раз. Были использованы отражения Френеля, и каустики видны. (Изображение создано с помощью V-Ray.)

[*** ЭТО НЕОБХОДИМО ПЕРЕПИСАТЬ НА ОСНОВЕ ИСТОРИИ *** Следующим важным прорывом в исследованиях стал Тернер Уиттед в 1979 году. Предыдущие алгоритмы прослеживали лучи от глаза до сцены, пока они не попали в объект, но определил цвет луча без рекурсивного отслеживания других лучей. Уиттед продолжил процесс. Когда луч падает на поверхность, он может генерировать до трех новых типов лучей: отражение, преломление и тень. Луч отражения прослеживается в направлении зеркального отражения. Ближайший объект, который он пересекает, будет виден в отражении. Лучи преломления, проходящие через прозрачный материал, работают аналогично, с той лишь разницей, что преломляющий луч может входить в материал или выходить из него. К каждому источнику света направляется теневой луч. Если между поверхностью и источником света находится какой-либо непрозрачный объект, поверхность находится в тени и свет не освещает ее. Эта рекурсивная трассировка лучей добавила больше реализма изображениям с трассировкой лучей.

Преимущества перед другими методами рендеринга

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

Недостатки

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

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

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

Обратное направление прохождения сцены лучами

Процесс съемки лучей от глаза к источнику света для визуализации изображения иногда называют обратной трассировкой лучей, поскольку это противоположное направление фотоны действительно путешествуют. Однако в этой терминологии возникает путаница. Ранняя трассировка лучей всегда производилась от глаза, и ранние исследователи, например, использовали термин «обратная трассировка лучей» для обозначения съемки лучей от источников света и сбора результатов. Таким образом, легче отличить трассировку лучей по глазам от трассировки лучей по свету.

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

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

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

Изображение, показывающее рекурсивно генерируемые лучи от «глаз» (и через плоскость изображения) к источнику света после встречи с двумя.

Справа - изображение, показывающее простой пример пути лучей, рекурсивно генерируемых от камеры (или глаза) к источнику света используя вышеуказанный алгоритм. Рассеянная поверхность отражает свет во всех направлениях.

Сначала луч создается в точке взгляда и прослеживается через пиксель в сцену, где он попадает на диффузную поверхность. С этой поверхности алгоритм рекурсивно генерирует луч отражения, который прослеживается через сцену, где попадает на другую диффузную поверхность. Наконец, генерируется еще один луч отражения, который проходит через сцену, где он попадает на источник света и поглощается. Цвет пикселя теперь зависит от цветов первой и второй диффузных поверхностей и цвета света, излучаемого источником света. Например, если источник света излучал белый свет, а две диффузные поверхности были синими, то результирующий цвет пикселя будет синим.

Пример

В качестве демонстрации принципов, связанных с трассировкой лучей, рассмотрим, как найти пересечение между лучом и сферой. Это просто математика, лежащая в основе пересечения линии и сферы и последующего определения цвета вычисляемого пикселя. Конечно, есть гораздо больше общего процесса трассировки лучей, но это демонстрирует пример используемых алгоритмов.

В векторной записи, уравнение сферы с центром c {\ displaystyle \ mathbf {c}}\ mathbf {c} и радиусом r {\ displaystyle r}r равно

‖ x - c ‖ 2 = r 2. {\ displaystyle \ left \ Vert \ mathbf {x} - \ mathbf {c} \ right \ Vert ^ {2} = r ^ {2}.}\ left \ Vert \ mathbf {x} - \ mathbf {c} \ right \ Vert ^ {2} = r ^ {2}.

Любая точка луча, начинающаяся из точки s { \ displaystyle \ mathbf {s}}\ mathbf {s} с направлением d {\ displaystyle \ mathbf {d}}\ mathbf {d} (здесь d {\ displaystyle \ mathbf {d}}\ mathbf {d} является единичным вектором ) может быть записано как

x = s + td, {\ displaystyle \ mathbf {x} = \ mathbf {s} + t \ mathbf {d },}\ mathbf {x} = \ mathbf {s} + t \ mathbf {d},

где t {\ displaystyle t}t - это расстояние между x {\ displaystyle \ mathbf {x}}\ mathbf {x} и s. {\ Displaystyle \ mathbf {s}}\ mathbf {s} . В нашей задаче мы знаем c {\ displaystyle \ mathbf {c}}\ mathbf {c} , r {\ displaystyle r}r , s {\ displaystyle \ mathbf {s}}\ mathbf {s} (например, положение источника света) и d {\ displaystyle \ mathbf {d}}\ mathbf {d} , и нам нужно найти t {\ displaystyle t}t . Следовательно, мы заменяем x {\ displaystyle \ mathbf {x}}\ mathbf {x} :

‖ s + t d - c ‖ 2 = r 2. {\ displaystyle \ left \ Vert \ mathbf {s} + t \ mathbf {d} - \ mathbf {c} \ right \ Vert ^ {2} = r ^ {2}.}\ left \ Vert \ mathbf {s} + t \ mathbf {d} - \ mathbf {c} \ right \ Vert ^ {2} = r ^ {2}.

Пусть v = defs - c {\ displaystyle \ mathbf {v} \ {\ stackrel {\ mathrm {def}} {=}} \ \ mathbf {s} - \ mathbf {c}}\ mathbf {v} \ {\ stackrel {\ mathrm {def}} {=}} \ \ mathbf {s} - \ mathbf {c} для простоты; затем

‖ v + td ‖ 2 = r 2 {\ displaystyle \ left \ Vert \ mathbf {v} + t \ mathbf {d} \ right \ Vert ^ {2} = r ^ {2}}\ left \ Vert \ mathbf {v} + t \ mathbf {d} \ right \ Vert ^ {2} = r ^ {2}
v 2 + t 2 d 2 + 2 v ⋅ td = r 2 {\ displaystyle \ mathbf {v} ^ {2} + t ^ {2} \ mathbf {d} ^ {2} +2 \ mathbf {v} \ cdot t \ mathbf {d} = r ^ {2}}\ mathbf {v} ^ {2} + t ^ {2} \ mathbf {d} ^ {2} +2 \ mathbf {v} \ cdot t \ mathbf {d} = r ^ {2}
(d 2) t 2 + (2 v ⋅ d) t + (v 2 - r 2) = 0. {\ displaystyle (\ mathbf {d) } ^ {2}) t ^ {2} + (2 \ mathbf {v} \ cdot \ mathbf {d}) t + (\ mathbf {v} ^ {2} -r ^ {2}) = 0.}(\ mathbf {d} ^ {2}) t ^ {2} + (2 \ mathbf {v} \ cdot \ ma thbf {d}) t + (\ mathbf {v} ^ {2} -r ^ {2}) = 0.

Знание того, что d - единичный вектор, позволяет нам сделать это небольшое упрощение:

t 2 + (2 v ⋅ d) t + (v 2 - r 2) = 0. {\ displaystyle t ^ {2} + (2 \ mathbf {v} \ cdot \ mathbf {d}) t + (\ mathbf {v} ^ {2} -r ^ {2}) = 0.}t ^ {2 } + (2 \ mathbf {v} \ cdot \ mathbf {d}) t + (\ mathbf {v} ^ {2} -r ^ {2}) = 0.

Это квадратное уравнение имеет решения

t = - (2 v ⋅ d) ± (2 v ⋅ d) 2 - 4 (v 2 - r 2) 2 = - (v ⋅ d) ± (v ⋅ d) 2 - (v 2 - r 2). {\ displaystyle t = {\ frac {- (2 \ mathbf {v} \ cdot \ mathbf {d}) \ pm {\ sqrt {(2 \ mathbf {v} \ cdot \ mathbf {d}) ^ {2} -4 (\ mathbf {v} ^ {2} -r ^ {2})}}} {2}} = - (\ mathbf {v} \ cdot \ mathbf {d}) \ pm {\ sqrt {(\ mathbf {v} \ cdot \ mathbf {d}) ^ {2} - (\ mathbf {v} ^ {2} -r ^ {2})}}.}t = {\ frac {- (2 \ mathbf {v} \ cdot \ mathbf {d}) \ pm {\ sqrt {(2 \ mathbf {v} \ cdot \ mathbf {d}) ^ {2} -4 (\ mathbf {v} ^ {2} -r ^ {2})}}} {2}} = - (\ mathbf {v } \ cdot \ mathbf {d}) \ pm {\ sqrt {(\ mathbf {v} \ cdot \ mathbf {d}) ^ {2} - (\ mathbf {v} ^ {2} -r ^ {2})}}.

Два значения t { \ displaystyle t}t , найденные путем решения этого уравнения, являются двумя такими, что s + td {\ displaystyle \ mathbf {s} + t \ mathbf {d}}\ mathbf {s} + t \ mathbf { d} являются точки, где луч пересекает сферу.

Любое отрицательное значение лежит не на луче, а скорее на противоположной полупрямой (т. Е. Значение, начинающееся с s {\ displaystyle \ mathbf {s} }\ mathbf {s} с противоположным направлением).

Если величина под квадратным корнем (дискриминант ) отрицательна, то луч не пересекает сферу.

Предположим теперь, что есть по крайней мере положительное решение, и пусть t {\ displaystyle t}t будет минимальным. Вдобавок предположим, что сфера - это ближайший объект на нашей сцене, пересекающий наш луч, и что она сделана из отражающего материала. Нам нужно найти, в каком направлении отражается световой луч. Законы отражения гласят, что угол отражения равен и противоположен углу падения между падающим лучом и нормалью к сфере.

Нормаль к сфере просто

n = y - c ‖ y - c ‖, {\ displaystyle \ mathbf {n} = {\ frac {\ mathbf {y} - \ mathbf {c }} {\ left \ Vert \ mathbf {y} - \ mathbf {c} \ right \ Vert}},}\ mathbf {n} = {\ frac {\ mathbf {y} - \ mathbf {c}} {\ left \ Vert \ mathbf {y} - \ mathbf {c} \ право \ Vert}},

где y = s + td {\ displaystyle \ mathbf {y} = \ mathbf { s} + t \ mathbf {d}}\ mathbf {y} = \ mathbf {s} + т \ mathbf {d} - найденная ранее точка пересечения. Направление отражения можно определить по отражению из d {\ displaystyle \ mathbf {d}}\ mathbf {d} относительно n {\ displaystyle \ mathbf {n} }\ mathbf {n} , то есть

r = d - 2 (n ⋅ d) n. {\ displaystyle \ mathbf {r} = \ mathbf {d} -2 (\ mathbf {n} \ cdot \ mathbf {d}) \ mathbf {n}.}\ mathbf {r} = \ mathbf {d} -2 (\ mathbf {n} \ cdot \ mathbf {d}) \ mathbf {n}.

Таким образом, отраженный луч имеет уравнение

x = у + ур. {\ displaystyle \ mathbf {x} = \ mathbf {y} + u \ mathbf {r}. \,}\ mathbf {x} = \ mathbf {y} + u \ mathbf {r}. \,

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

Адаптивное управление глубиной

Адаптивное управление глубиной означает, что рендерер прекращает генерировать отраженные / прошедшие лучи, когда вычисленная интенсивность становится меньше определенного порога. Всегда должна быть установлена ​​максимальная глубина, иначе программа генерирует бесконечное количество лучей. Но не всегда нужно идти на максимальную глубину, если поверхности не обладают высокой отражающей способностью. Чтобы проверить это, трассировщик лучей должен вычислить и сохранить произведение глобальных коэффициентов и коэффициентов отражения по мере трассировки лучей.

Пример: пусть Kr = 0,5 для набора поверхностей. Тогда от первой поверхности максимальный вклад составляет 0,5, для отражения от второй: 0,5 × 0,5 = 0,25, третьей: 0,25 × 0,5 = 0,125, четвертой: 0,125 × 0,5 = 0,0625, пятой: 0,0625 × 0,5 = 0,03125. и т. д. Кроме того, мы можем реализовать коэффициент затухания на расстоянии, такой как 1 / D2, который также уменьшит вклад интенсивности.

Для проходящего луча мы могли бы сделать нечто подобное, но в этом случае расстояние, пройденное через объект, вызовет еще более быстрое уменьшение интенсивности. В качестве примера этого Холл и Гринберг обнаружили, что даже для очень отражающей сцены использование этого с максимальной глубиной 15 привело к средней глубине дерева лучей 1,7.

Граничные объемы

Включение групп объектов в наборы иерархических ограничивающих объемов уменьшает количество вычислений, необходимых для трассировки лучей. Луч сначала проверяется на пересечение с ограничивающим объемом, а затем, если есть пересечение, объем рекурсивно делится, пока луч не попадет в объект. Наилучший тип ограничивающего объема будет определяться формой нижележащего объекта или объектов. Например, если объекты длинные и тонкие, то сфера будет заключать в основном пустое пространство по сравнению с коробкой. С помощью прямоугольников также проще создавать иерархические ограничивающие объемы.

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

Кей и Каджиа приводят список требуемых свойств для иерархических ограничивающих объемов:

  • Поддеревья должны содержать объекты, которые находятся рядом друг с другом, и чем дальше по дереву, тем ближе должны быть объекты.
  • Объем каждого узла должен быть минимальным.
  • Сумма объемов всех ограничивающих объемов должна быть минимальной.
  • Больше внимания следует уделять узлам рядом с корнем, так как обрезка ветви рядом с корнем удалит больше потенциальных объектов, чем один ниже по дереву.
  • Время, затрачиваемое на построение иерархии, должно быть намного меньше времени, сэкономленного при ее использовании.
Интерактивная трассировка лучей

Первой реализацией интерактивного трассировщика лучей была компьютерная графическая система LINKS-1, созданная в 1982 году в инженерной школе Университета Осаки профессорами Омурой Коити, Сиракавой Исао и Каватой. Тору с 50 учениками. Это была массово-параллельная обработка компьютерная система с 514 микропроцессорами (257 Zilog Z8001 и 257 iAPX 86 's), используемый для рендеринга реалистичной 3D компьютерной графики с высокоскоростной трассировкой лучей. Согласно Общества обработки информации Японии : «Ядро рендеринга 3D-изображений - это вычисление яркости каждого пикселя, составляющего рендерную поверхность, с заданной точки обзора, источника света и объекта Система LINKS-1 была разработана для реализации методологии рендеринга изображений, в которой каждый пиксель может обрабатываться параллельно независимо с использованием трассировки лучей. Разработав новую методологию программного обеспечения специально для высокоскоростной рендеринга изображений, LINKS-1 смогла быстро рендерить очень реалистичные изображения ". Он был использован для создания раннего трехмерного планетария -подобного видео небес, сделанного полностью с помощью компьютерной графики. Видео было представлено в павильоне Fujitsu на Международной выставке 1985 года в Цукуба. «Это была вторая система, которая сделала это после Evans Sutherland Digistar в 1982 году. Сообщалось, что LINKS-1 был самым мощным компьютером в мире в 1984 году.

Самая ранняя публичная запись трассировки лучей в реальном времени с интерактивным рендерингом (т.е. чем кадр в секунду) был отмечен на конференции по компьютерной графике 2005 SIGGRAPH как инструменты REMRT / RT, разработанные в 1986 году Майком Мууссом для BRL-CAD система твердотельного моделирования. Первоначально опубликованный в 1987 г. на сайте USENIX, трассировщик лучей BRL-CAD был ранней реализацией параллельной сетевой распределенной системы трассировки лучей, которая обеспечивала производительность рендеринга несколько кадров в секунду. Такая производительность была достигнута. с помощью высокооптимизированного, но независимого от платформы движка трассировки лучей LIBRT в BRL-CAD и с помощью твердого неявного CSG Геометрия на нескольких параллельных машинах с общей памятью в общей сети. Трассировщик лучей BRL-CAD, включая инструменты REMRT / RT, по-прежнему доступен и развивается сегодня как программное обеспечение с открытым исходным кодом.

С тех пор были предприняты значительные усилия и исследования по внедрению лучей трассировка в реальном времени для различных целей на автономных настольных конфигурациях. Эти цели включают интерактивные приложения трехмерной графики, такие как демонстрационные сцены, компьютерные и видеоигры, а также рендеринг изображений. Некоторые программные 3D-движки реального времени, основанные на трассировке лучей, были разработаны любителями демонстрационными программистами с конца 1990-х годов.

В 1999 году команда из Университета Юты под руководством Стивена Паркера продемонстрировала интерактивную трассировку лучей вживую на Симпозиуме по интерактивной трехмерной графике 1999 года. Они отрендерили модель 35 миллионов сфер с разрешением 512 на 512 пикселей, работающую со скоростью примерно 15 кадров в секунду на 60 процессорах.

Проект OpenRT включал высокооптимизированное программное ядро ​​для трассировки лучей вместе с OpenGL -подобный API, чтобы предложить альтернативу текущему подходу на основе растеризации для интерактивной 3D-графики. Оборудование для трассировки лучей, такое как экспериментальный Ray Processing Unit, разработанный Свеном Вупом из Саарландского университета, было разработано для ускорения некоторых вычислительно-ресурсоемких операций трассировка лучей. 16 марта 2007 г. Саарский университет представил реализацию высокопроизводительного движка трассировки лучей, который позволял рендерить компьютерные игры с помощью трассировки лучей без интенсивного использования ресурсов.

12 июня 2008 г. Intel продемонстрировала специальная версия Enemy Territory: Quake Wars под названием Quake Wars: Ray Traced, использующая трассировку лучей для рендеринга, работающая в базовом разрешении HD (720p). ETQW работал со скоростью 14–29 кадров в секунду. Демонстрация прошла на 16-ядерной (4 сокета, 4 ядра) системе Xeon Tigerton, работающей на частоте 2,93 ГГц.

На SIGGRAPH 2009 Nvidia анонсировала OptiX, бесплатный API для работы в реальном времени. луч т гонки на графических процессорах Nvidia. API предоставляет семь программируемых точек входа в конвейере трассировки лучей, позволяя настраивать камеры, пересечения лучей с примитивом, шейдеры, затенение и т. Д. Эта гибкость обеспечивает двунаправленную трассировку пути, транспортировку света Метрополиса и многие другие алгоритмы рендеринга, которые невозможно реализовать с хвостовая рекурсия. Рендереры на основе OptiX используются в Autodesk Arnold, Adobe AfterEffects, Bunkspeed Shot, Autodesk Maya, 3ds max и многие другие рендеры.

Imagination Technologies предлагает бесплатный API под названием OpenRL, который ускоряет хвостовую рекурсивную алгоритмы рендеринга на основе трассировки лучей и вместе с их собственными алгоритмами трассировки лучей аппаратное обеспечение, работает с Autodesk Maya, чтобы предоставить то, что 3D World называет «трассировкой лучей в реальном времени для обычных художников».

В 2014 году была представлена ​​демонстрация Видеоигра PlayStation 4 The Tomorrow Children, разработанная Q-Games и SIE Japan Studio, продемонстрировала новые методы освещения разработан Q-Games, в частности, каскадная воксельная конусная трассировка лучей, которая имитирует освещение в реальном времени и использует более реалистичные отражения, а не экранное пространство отражения.

Nvidia предлагает аппаратное ускорение трассировки лучей в своих графических процессорах GeForce RTX и Quadro RTX, в настоящее время основанных на архитектуре Тьюринга. Аппаратное обеспечение Nvidia использует отдельный функциональный блок, публично называемый «ядром RT». Этот блок несколько сравним с текстурным блоком по размеру, задержке и интерфейсу с ядром процессора. Устройство включает в себя обход BVH, декомпрессию сжатого узла BVH, тестирование пересечения лучей-AABB и тестирование пересечения лучей и треугольников.

AMD предлагает интерактивную трассировку лучей поверх OpenCL на видеокартах Vega через Radeon ProRender. Сообщается, что компания планирует выпустить второе поколение графических процессоров Navi с аппаратным ускорением трассировки лучей в 2020 году.

Консоли следующего поколения, такие как PlayStation 5, Xbox Series X и Series S будут поддерживать выделенные аппаратные компоненты трассировки лучей в своих графических процессорах для эффектов трассировки лучей в реальном времени.

Вычислительная сложность

Разное Результаты сложности были доказаны для некоторых формулировок задачи трассировки лучей. В частности, если вариант решения задачи трассировки лучей определяется следующим образом - с учетом начального положения и направления светового луча и некоторой фиксированной точки, достигает ли луч в конечном итоге этой точки, тогда в упомянутой статье подтверждаются следующие результаты:

  • Трассировка лучей в трехмерных оптических системах с конечным набором отражающих или преломляющих объектов, представленных системой рациональных квадратичных неравенств, неразрешима.
  • Трассировка лучей в трехмерных оптических системах с конечным набором преломляющих объектов, представленных системой рациональные линейные неравенства неразрешимы.
  • Трассировка лучей в трехмерных оптических системах с конечным набором прямоугольных отражающих или преломляющих объектов неразрешима.
  • Трассировка лучей в трехмерных оптических системах с конечным набором отражающих или преломляющих объектов. частично отражающие объекты, представленные системой линейных неравенств, некоторые из которых могут быть иррациональными, неразрешимы.
  • Трассировка лучей в трехмерных оптических системах с конечным набором отражающих или частично отражающих Эффективные объекты, представленные системой рациональных линейных неравенств, являются PSPACE - жесткими.
  • Для любого измерения, равного или превышающего 2, трассировка лучей с конечным набором параллельных и перпендикулярных отражающих поверхностей рациональными линейными неравенствами находится в PSPACE.
См. также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-03 09:23:40
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте