В трехмерной компьютерной графике трассировка лучей — это метод моделирования распространения света для использования в самых разных алгоритмах рендеринга при создании цифровых изображений .
По спектру вычислительных затрат и визуальной точности методы рендеринга на основе трассировки лучей, такие как ray casting , рекурсивная трассировка лучей, трассировка распределенных лучей , фотонное отображение и трассировка пути , как правило, медленнее и обеспечивают более высокую точность, чем методы рендеринга сканирующей строки . [1] Таким образом, трассировка лучей была впервые развернута в приложениях, где относительно длительное время рендеринга было допустимо, например, неподвижные изображения CGI и визуальные эффекты для кино и телевидения (VFX), но она меньше подходила для приложений реального времени, таких как видеоигры , где скорость имеет решающее значение при рендеринге каждого кадра . [2]
Однако с 2019 года аппаратное ускорение трассировки лучей в реальном времени стало стандартом для новых коммерческих видеокарт, а графические API последовали этому примеру, что позволило разработчикам использовать гибридную трассировку лучей и рендеринг на основе растеризации в играх и других приложениях реального времени с меньшим влиянием на время рендеринга кадра.
Трассировка лучей способна имитировать различные оптические эффекты, [3] такие как отражение , преломление , мягкие тени , рассеивание , глубина резкости , размытость движения , каустика , окклюзия окружающей среды и явления дисперсии (такие как хроматическая аберрация ). Ее также можно использовать для отслеживания пути звуковых волн аналогично световым волнам, что делает ее жизнеспособным вариантом для более захватывающего звукового дизайна в видеоиграх путем визуализации реалистичной реверберации и эха . [4] Фактически, любое физическое явление волны или частицы с приблизительно линейным движением можно имитировать с помощью трассировки лучей .
Методы рендеринга на основе трассировки лучей, включающие выборку света по области, приводят к появлению артефактов шума на изображении , которые можно устранить путем трассировки очень большого количества лучей или с помощью методов шумоподавления .
Идея трассировки лучей появилась еще в XVI веке, когда ее описал Альбрехт Дюрер , которому приписывают ее изобретение. [5] Дюрер описал несколько методов проецирования трехмерных сцен на плоскость изображения. Некоторые из них проецируют выбранную геометрию на плоскость изображения, как это делается при растеризации сегодня. Другие определяют, какая геометрия видна вдоль заданного луча, как это делается при трассировке лучей. [6] [7]
Использование компьютера для трассировки лучей для создания затененных изображений было впервые осуществлено Артуром Аппелем в 1968 году. [8] Аппель использовал трассировку лучей для первичной видимости (определение ближайшей поверхности к камере в каждой точке изображения) путем трассировки луча через каждую точку, которая должна быть затенена в сцене, чтобы определить видимую поверхность. Ближайшая поверхность, пересекаемая лучом, была видимой. Этот нерекурсивный алгоритм рендеринга, основанный на трассировке лучей, сегодня называется « ray casting ». Затем его алгоритм трассировал вторичные лучи к источнику света от каждой затеняемой точки, чтобы определить, находится ли точка в тени или нет.
Позже, в 1971 году, Голдштейн и Нагель из MAGI (Mathematical Applications Group, Inc.) [9] опубликовали «3-D Visual Simulation», в которой трассировка лучей использовалась для создания затененных изображений твердых тел. В найденной точке пересечения лучей с поверхностью они вычисляли нормаль к поверхности и, зная положение источника света, вычисляли яркость пикселя на экране. В их публикации описывается короткий (30-секундный) фильм, «сделанный с использованием дисплейного оборудования Мэрилендского университета, оснащенного 16-миллиметровой камерой. Фильм показывал вертолет и простую огневую точку на уровне земли. Вертолет был запрограммирован на выполнение серии маневров, включая повороты, взлеты и посадки и т. д., пока в конечном итоге не будет сбит и не разобьется». Использовался компьютер CDC 6600. MAGI создала анимационное видео под названием MAGI/SynthaVision Sampler в 1974 году . [10]
Еще один ранний пример ray casting появился в 1976 году, когда Скотт Рот создал анимацию перекидной книги на курсе компьютерной графики Боба Спроулла в Калтехе . Отсканированные страницы показаны в виде видео справа. Компьютерная программа Рота отмечала краевую точку в пиксельной позиции, если луч пересекал ограниченную плоскость, отличную от своих соседей. Конечно, луч мог пересекать несколько плоскостей в пространстве, но только точка поверхности, ближайшая к камере, отмечалась как видимая. Платформой была DEC PDP-10 , дисплей Tektronix с запоминающей трубкой и принтер, который создавал изображение дисплея на рулонной термобумаге. Рот расширил структуру, ввел термин ray casting в контексте компьютерной графики и твердотельного моделирования , и в 1982 году опубликовал свою работу, находясь в GM Research Labs. [11]
Тернер Уиттед был первым, кто продемонстрировал рекурсивную трассировку лучей для зеркального отражения и для преломления через полупрозрачные объекты с углом, определяемым показателем преломления твердого тела, и использовал трассировку лучей для сглаживания . [12] Уиттед также продемонстрировал тени с трассировкой лучей. Он создал фильм с рекурсивной трассировкой лучей под названием The Compleat Angler [13] в 1979 году, будучи инженером в Bell Labs. Глубоко рекурсивный алгоритм трассировки лучей Уиттеда переосмыслил рендеринг, превратив его из вопроса определения видимости поверхности в вопрос переноса света. Его статья вдохновила на ряд последующих работ других, которые включали трассировку лучей распределения и, наконец, трассировку пути без смещения , которая обеспечивает структуру уравнения рендеринга , позволяющую компьютерным изображениям быть верными реальности.
В течение десятилетий глобальное освещение в крупных фильмах с использованием компьютерных изображений аппроксимировалось дополнительными источниками света. Рендеринг на основе трассировки лучей в конечном итоге изменил это, сделав возможным физически обоснованный перенос света. Ранние художественные фильмы, полностью визуализированные с использованием трассировки пути, включают « Дом-монстр» (2006), «Облачно, возможны осадки в виде фрикаделек» (2009), [14] и «Университет монстров» (2013). [15]
Оптическая трассировка лучей описывает метод создания визуальных изображений, созданных в трехмерных средах компьютерной графики, с большей фотореалистичностью, чем методы ray casting или scanline rendering . Он работает путем трассировки пути от воображаемого глаза через каждый пиксель на виртуальном экране и вычисления цвета видимого через него объекта.
Сцены в трассировке лучей описываются математически программистом или визуальным художником (обычно с использованием промежуточных инструментов). Сцены также могут включать данные из изображений и моделей, полученных с помощью таких средств, как цифровая фотография.
Обычно каждый луч должен быть проверен на пересечение с некоторым подмножеством всех объектов в сцене. После того, как ближайший объект будет идентифицирован, алгоритм оценит входящий свет в точке пересечения, проверит свойства материала объекта и объединит эту информацию для вычисления окончательного цвета пикселя. Некоторые алгоритмы освещения и отражающие или полупрозрачные материалы могут потребовать повторного отбрасывания большего количества лучей в сцену.
На первый взгляд может показаться нелогичным или «обратным» посылать лучи от камеры, а не в нее (как это делает реальный свет в реальности), но это на много порядков эффективнее. Поскольку подавляющее большинство световых лучей от данного источника света не попадают прямо в глаз наблюдателя, «прямое» моделирование может потенциально тратить огромное количество вычислений на пути света, которые никогда не регистрируются.
Таким образом, сокращение, принятое в трассировке лучей, заключается в предположении, что данный луч пересекает рамку вида. После максимального числа отражений или прохождения луча определенного расстояния без пересечения, луч прекращает движение, и значение пикселя обновляется.
На входе имеем (при расчетах используем векторную нормализацию и векторное произведение ):
Идея состоит в том, чтобы найти положение центра каждого пикселя области просмотра , что позволяет нам найти линию, проходящую от глаза через этот пиксель, и, наконец, получить луч, описанный точкой и вектором (или его нормализацией ). Сначала нам нужно найти координаты пикселя нижней левой области просмотра и найти следующий пиксель, выполнив сдвиг по направлениям, параллельным области просмотра (векторы i ), умноженным на размер пикселя. Ниже мы приводим формулы, которые включают расстояние между глазом и областью просмотра. Однако это значение будет уменьшено во время нормализации луча (так что вы можете принять это и удалить его из расчетов).
Предварительные вычисления: найдем и нормализуем вектор и векторы , которые параллельны окну просмотра (все изображены на рисунке выше)
обратите внимание, что область просмотра находится в центре , далее мы вычисляем размеры области просмотра, деленные на 2, включая обратное соотношение сторон
и затем мы вычисляем векторы сдвига следующего пикселя вдоль направлений, параллельных окну просмотра ( ), и левого нижнего центра пикселя
Расчеты: обратите внимание и луч так
В природе источник света испускает луч света, который в конечном итоге достигает поверхности, которая прерывает его движение. Можно представить этот «луч» как поток фотонов, движущихся по одному и тому же пути. В идеальном вакууме этот луч будет прямой линией (игнорируя релятивистские эффекты ). С этим световым лучом может произойти любая комбинация из четырех вещей: поглощение , отражение , преломление и флуоресценция . Поверхность может поглотить часть светового луча, что приведет к потере интенсивности отраженного и/или преломленного света. Она также может отразить весь или часть светового луча в одном или нескольких направлениях. Если поверхность обладает какими-либо прозрачными или полупрозрачными свойствами, она преломляет часть светового луча в себя в другом направлении, поглощая при этом часть (или весь) спектра ( и, возможно, изменяя цвет). Реже поверхность может поглощать некоторую часть света и флуоресцентно переизлучать свет с более длинной длиной волны в случайном направлении, хотя это случается достаточно редко, чтобы это можно было не учитывать в большинстве приложений рендеринга. Между поглощением, отражением, преломлением и флуоресценцией должен быть учтен весь входящий свет, и не более. Поверхность не может, например, отражать 66% входящего светового луча и преломлять 50%, поскольку эти два показателя в сумме составят 116%. Отсюда отраженные и/или преломленные лучи могут попадать на другие поверхности, где их поглощающие, преломляющие, отражающие и флуоресцентные свойства снова влияют на ход входящих лучей. Некоторые из этих лучей движутся таким образом, что попадают в наш глаз, заставляя нас видеть сцену и, таким образом, вносить вклад в окончательное визуализированное изображение.
Идея, лежащая в основе ray casting, предшественника рекурсивной трассировки лучей, заключается в трассировке лучей из глаза, по одному на пиксель, и поиске ближайшего объекта, блокирующего путь этого луча. Представьте себе изображение как экранную дверь, где каждый квадрат на экране является пикселем. Это объект, который глаз видит через этот пиксель. Используя свойства материала и эффект освещения в сцене, этот алгоритм может определить затенение этого объекта. Упрощающее предположение заключается в том, что если поверхность обращена к свету, свет достигнет этой поверхности и не будет заблокирован или в тени. Затенение поверхности вычисляется с использованием традиционных моделей затенения трехмерной компьютерной графики. Одним из важных преимуществ, предлагаемых ray casting по сравнению со старыми алгоритмами сканлайна, была его способность легко работать с неплоскими поверхностями и твердыми телами, такими как конусы и сферы . Если математическая поверхность может быть пересечена лучом, ее можно визуализировать с помощью ray casting. Сложные объекты могут быть созданы с использованием методов твердотельного моделирования и легко визуализироваться.
В методе объемного луча каждый луч трассируется так, чтобы цвет и/или плотность могли быть отобраны вдоль луча, а затем объединены в конечный цвет пикселя. Это часто используется, когда объекты не могут быть легко представлены явными поверхностями (такими как треугольники), например, при рендеринге облаков или 3D-медицинских сканов.
В SDF-прохождении лучей или трассировке сферы [16] каждый луч прослеживается в несколько шагов для аппроксимации точки пересечения между лучом и поверхностью, определяемой функцией расстояния со знаком (SDF). SDF оценивается для каждой итерации, чтобы иметь возможность делать как можно большие шаги, не пропуская ни одной части поверхности. Порог используется для отмены дальнейшей итерации при достижении точки, которая достаточно близка к поверхности. Этот метод часто используется для 3-D фрактальной визуализации. [17]
Более ранние алгоритмы отслеживали лучи от глаза в сцену до тех пор, пока они не попадут на объект, но определяли цвет луча без рекурсивного отслеживания большего количества лучей. Рекурсивная трассировка лучей продолжает процесс. Когда луч попадает на поверхность, могут быть отброшены дополнительные лучи из-за отражения, преломления и тени.: [18]
Эти рекурсивные лучи добавляют больше реализма изображениям, полученным с помощью трассировки лучей.
Популярность рендеринга на основе трассировки лучей обусловлена его основой в реалистичном моделировании переноса света , по сравнению с другими методами рендеринга, такими как растеризация , которые больше фокусируются на реалистичном моделировании геометрии. Такие эффекты, как отражения и тени , которые трудно моделировать с помощью других алгоритмов, являются естественным результатом алгоритма трассировки лучей. Вычислительная независимость каждого луча делает трассировку лучей поддающейся базовому уровню распараллеливания , [ 20] но расхождение траекторий лучей делает высокую утилизацию при параллелизме довольно труднодостижимой на практике. [21]
Серьёзным недостатком трассировки лучей является производительность (хотя теоретически она может быть быстрее традиционного рендеринга сканлайна в зависимости от сложности сцены и количества пикселей на экране). До конца 2010-х годов трассировка лучей в реальном времени обычно считалась невозможной на потребительском оборудовании для нетривиальных задач. Алгоритмы сканлайна и другие алгоритмы используют когерентность данных для распределения вычислений между пикселями, в то время как трассировка лучей обычно начинает процесс заново, обрабатывая каждый луч глаза отдельно. Однако это разделение даёт другие преимущества, такие как возможность стрелять большим количеством лучей по мере необходимости для выполнения пространственного сглаживания и улучшения качества изображения там, где это необходимо.
Рекурсивная трассировка лучей в стиле Уиттеда обрабатывает взаимное отражение и оптические эффекты, такие как преломление, но в целом не является фотореалистичной . Улучшенный реализм достигается, когда уравнение рендеринга полностью вычисляется, поскольку уравнение концептуально включает в себя каждый физический эффект светового потока. Однако это неосуществимо, учитывая требуемые вычислительные ресурсы и ограничения на точность геометрического и материального моделирования. Трассировка пути — это алгоритм для оценки уравнения рендеринга, который, таким образом, обеспечивает более высокую точность моделирования реального освещения.
Процесс испускания лучей из глаза к источнику света для визуализации изображения иногда называют обратной трассировкой лучей , поскольку это противоположное направление, в котором на самом деле движутся фотоны. Однако с этой терминологией есть путаница. Ранняя трассировка лучей всегда выполнялась из глаза, и ранние исследователи, такие как Джеймс Арво, использовали термин « обратная трассировка лучей» для обозначения испускания лучей из источников света и сбора результатов. Поэтому яснее различать трассировку лучей на основе глаза и трассировку лучей на основе света .
В то время как прямое освещение обычно лучше всего сэмплируется с помощью трассировки лучей на основе глаза, некоторые косвенные эффекты могут выиграть от лучей, генерируемых источниками света. Каустики — это яркие узоры, вызванные фокусировкой света с широкой отражающей области на узкую область (почти) диффузной поверхности. Алгоритм, который направляет лучи непосредственно от источников света на отражающие объекты, отслеживая их пути к глазу, лучше сэмплирует это явление. Эта интеграция лучей на основе глаза и света часто выражается как двунаправленная трассировка пути, в которой пути отслеживаются как от глаза, так и от источников света, а затем пути соединяются соединительным лучом через некоторое время. [22] [23]
Картирование фотонов — это еще один метод, который использует как световую, так и глазную трассировку лучей; на начальном этапе энергичные фотоны трассируются вдоль лучей от источника света, чтобы вычислить оценку потока излучения как функции трехмерного пространства (сама одноименная карта фотонов). На последующем этапе лучи трассируются от глаза в сцену, чтобы определить видимые поверхности, а карта фотонов используется для оценки освещенности в точках видимой поверхности. [24] [25] Преимущество картирования фотонов по сравнению с двунаправленной трассировкой пути заключается в возможности достижения значительного повторного использования фотонов, что сокращает вычисления за счет статистического смещения.
Дополнительная проблема возникает, когда свет должен проходить через очень узкое отверстие, чтобы осветить сцену (рассмотрите затемненную комнату с дверью, слегка приоткрытой, ведущей в ярко освещенную комнату), или сцену, в которой большинство точек не имеют прямой видимости ни к одному источнику света (например, с направленными на потолок светильниками или торшерами ). В таких случаях только очень небольшое подмножество путей будет переносить энергию; перенос света Metropolis — это метод, который начинается со случайного поиска пространства путей, и когда энергетические пути найдены, повторно использует эту информацию, исследуя близлежащее пространство лучей. [26]
Справа находится изображение, показывающее простой пример пути лучей, рекурсивно сгенерированных от камеры (или глаза) к источнику света с использованием вышеуказанного алгоритма. Диффузная поверхность отражает свет во всех направлениях.
Сначала луч создается в точке наблюдения и трассируется через пиксель в сцену, где он попадает на диффузную поверхность. С этой поверхности алгоритм рекурсивно генерирует луч отражения, который трассируется через сцену, где он попадает на другую диффузную поверхность. Наконец, генерируется еще один луч отражения и трассируется через сцену, где он попадает на источник света и поглощается. Цвет пикселя теперь зависит от цветов первой и второй диффузных поверхностей и цвета света, излучаемого источником света. Например, если источник света излучал белый свет, а две диффузные поверхности были синими, то результирующий цвет пикселя будет синим.
В качестве демонстрации принципов, задействованных в трассировке лучей, рассмотрим, как можно найти пересечение между лучом и сферой. Это всего лишь математика, стоящая за пересечением линии и сферы и последующим определением цвета вычисляемого пикселя. Конечно, общий процесс трассировки лучей гораздо шире, но это демонстрирует пример используемых алгоритмов.
В векторной записи уравнение сферы с центром и радиусом имеет вид
Любая точка на луче, начинающемся с точки с направлением (здесь — единичный вектор ), может быть записана как
где — это расстояние между и . В нашей задаче мы знаем , , (например, положение источника света) и , и нам нужно найти . Поэтому мы заменяем :
Пусть для простоты; тогда
Знание того, что d — единичный вектор, позволяет нам сделать небольшое упрощение:
Это квадратное уравнение имеет решения
Два значения , найденные путем решения этого уравнения, — это два таких значения, которые являются точками пересечения луча со сферой.
Любое отрицательное значение не лежит на луче, а скорее на противоположной полупрямой (т.е. той, которая начинается с противоположного направления).
Если величина под квадратным корнем ( дискриминант ) отрицательна, то луч не пересекает сферу.
Предположим теперь, что существует по крайней мере положительное решение, и пусть будет минимальным. Кроме того, предположим, что сфера является ближайшим объектом на нашей сцене, пересекающим наш луч, и что она сделана из отражающего материала. Нам нужно найти, в каком направлении отражается луч света. Законы отражения гласят, что угол отражения равен и противоположен углу падения между падающим лучом и нормалью к сфере.
Нормаль к сфере просто
где точка пересечения найдена ранее. Направление отражения можно найти путем отражения относительно , то есть
Таким образом, отраженный луч имеет уравнение
Теперь нам нужно только вычислить пересечение последнего луча с нашим полем зрения , чтобы получить пиксель, в который попадет наш отраженный луч света. Наконец, этому пикселю присваивается соответствующий цвет, принимая во внимание, как цвет исходного источника света и цвет сферы комбинируются отражением.
Адаптивное управление глубиной означает, что рендерер прекращает генерировать отраженные/пропущенные лучи, когда вычисленная интенсивность становится меньше определенного порога. Всегда должна быть задана максимальная глубина, иначе программа будет генерировать бесконечное количество лучей. Но не всегда необходимо переходить на максимальную глубину, если поверхности не обладают высокой отражающей способностью. Чтобы проверить это, трассировщик лучей должен вычислить и сохранить произведение глобальных и отражательных коэффициентов по мере трассировки лучей.
Пример: пусть 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. [27]
Заключение групп объектов в наборы иерархий ограничивающих объемов (BVH) уменьшает объем вычислений, необходимых для трассировки лучей. Сначала отбрасываемый луч проверяется на пересечение с ограничивающим объемом , а затем, если пересечение есть, объем рекурсивно делится до тех пор, пока луч не попадет в объект. Лучший тип ограничивающего объема будет определяться формой базового объекта или объектов. Например, если объекты длинные и тонкие, то сфера будет закрывать в основном пустое пространство по сравнению с коробкой. Коробки также легче генерировать иерархические ограничивающие объемы.
Обратите внимание, что использование такой иерархической системы (при условии, что она сделана аккуратно) изменяет время вычисления пересечения с линейной зависимости от количества объектов на что-то среднее между линейной и логарифмической зависимостью. Это происходит потому, что в идеальном случае каждый тест пересечения делил бы возможности на два и приводил бы к структуре типа бинарного дерева. Методы пространственного подразделения, обсуждаемые ниже, пытаются достичь этого. Более того, эта структура ускорения делает вычисление трассировки лучей чувствительным к выходным данным . То есть сложность вычислений пересечения лучей зависит от количества объектов, которые фактически пересекают лучи, а не (только) от количества объектов в сцене.
Кей и Каджия приводят список желаемых свойств для иерархических ограничивающих объемов:
Первой реализацией интерактивного трассировщика лучей стала система компьютерной графики LINKS-1, созданная в 1982 году в Школе инженерии Университета Осаки профессорами Омура Коити, Сиракавой Исао и Каватой Тору с 50 студентами. [ требуется ссылка ] Это была вычислительная система с массивной параллельной обработкой данных с 514 микропроцессорами (257 Zilog Z8001 и 257 iAPX 86 ), использовавшаяся для трехмерной компьютерной графики с высокоскоростной трассировкой лучей. Согласно Японскому обществу обработки информации : «Основой трехмерного рендеринга изображений является расчет яркости каждого пикселя, образующего визуализированную поверхность, с заданной точки обзора, источника света и положения объекта. Система LINKS-1 была разработана для реализации методологии рендеринга изображений, в которой каждый пиксель может параллельно обрабатываться независимо с использованием трассировки лучей. Разработав новую программную методологию специально для высокоскоростного рендеринга изображений, LINKS-1 смогла быстро рендерить высокореалистичные изображения». Она использовалась для создания раннего трехмерного планетарного видео небес, полностью созданного с помощью компьютерной графики. Видео было представлено в павильоне Fujitsu на Международной выставке 1985 года в Цукубе ». [28] Это была вторая система, сделавшая это после Evans & Sutherland Digistar в 1982 году. Разработчики заявили, что LINKS-1 является самым мощным компьютером в мире в 1984 году. [29]
Следующий интерактивный трассировщик лучей, и первый, который был отмечен как «в реальном времени», был отмечен на конференции по компьютерной графике SIGGRAPH 2005 года как инструменты REMRT/RT, разработанные в 1986 году Майком Мууссом для системы твердотельного моделирования BRL-CAD . Первоначально опубликованный в 1987 году на USENIX , трассировщик лучей BRL-CAD был ранней реализацией параллельной сетевой распределенной системы трассировки лучей, которая достигала нескольких кадров в секунду в производительности рендеринга. [30] Эта производительность была достигнута с помощью высокооптимизированного, но независимого от платформы движка трассировки лучей LIBRT в BRL-CAD и с помощью использования твердотельной неявной геометрии CSG на нескольких параллельных машинах с общей памятью через стандартную сеть. Трассировщик лучей BRL-CAD, включая инструменты REMRT/RT, по-прежнему доступен и разрабатывается сегодня как программное обеспечение с открытым исходным кодом . [31]
С тех пор были предприняты значительные усилия и исследования по внедрению трассировки лучей в реальном времени для различных целей на автономных конфигурациях настольных компьютеров. Эти цели включают интерактивные 3-D графические приложения, такие как демосцены , компьютерные и видеоигры и рендеринг изображений. Некоторые программные 3-D движки реального времени, основанные на трассировке лучей, были разработаны программистами-любителями демо с конца 1990-х годов. [32]
В 1999 году команда из Университета Юты под руководством Стивена Паркера продемонстрировала интерактивную трассировку лучей вживую на Симпозиуме по интерактивной 3D-графике 1999 года. Они визуализировали модель из 35 миллионов сфер с разрешением 512 на 512 пикселей, работая примерно со скоростью 15 кадров в секунду на 60 процессорах. [33]
Проект Open RT включал в себя высокооптимизированное программное ядро для трассировки лучей вместе с API, подобным OpenGL , чтобы предложить альтернативу текущему подходу, основанному на растеризации, для интерактивной 3D-графики. Аппаратное обеспечение для трассировки лучей , такое как экспериментальный Ray Processing Unit, разработанный Свеном Вупом в Саарском университете , было разработано для ускорения некоторых вычислительно интенсивных операций трассировки лучей.
Идея о том, что видеоигры могут трассировать свою графику в реальном времени, привлекла внимание СМИ в конце 2000-х годов. В то время исследователь по имени Даниэль Поль под руководством профессора графики Филиппа Слусаллека и в сотрудничестве с Университетом Эрлангена и Саарландским университетом в Германии оснастил Quake III и Quake IV движком , который он сам запрограммировал, и который Саарландский университет затем продемонстрировал на выставке CeBIT 2007. [34] Intel , покровитель Саара, был настолько впечатлен, что нанял Поля и приступил к исследовательской программе, посвященной трассировке лучей в графике, которую он считал оправданием увеличения числа ядер своих процессоров. [35] : 99–100 [36] 12 июня 2008 года Intel продемонстрировала специальную версию Enemy Territory: Quake Wars под названием Quake Wars: Ray Traced , использующую трассировку лучей для рендеринга, работающую в базовом разрешении HD (720p). ETQW работал со скоростью 14–29 кадров в секунду на 16-ядерной (4 сокета, 4 ядра) системе Xeon Tigerton, работающей на частоте 2,93 ГГц. [37]
На SIGGRAPH 2009 Nvidia анонсировала OptiX , бесплатный API для трассировки лучей в реальном времени на графических процессорах Nvidia. API предоставляет семь программируемых точек входа в конвейере трассировки лучей, позволяя использовать пользовательские камеры, пересечения примитивов лучей, шейдеры, затенение и т. д. Эта гибкость позволяет использовать двунаправленную трассировку пути, перенос света Metropolis и многие другие алгоритмы рендеринга, которые невозможно реализовать с помощью хвостовой рекурсии. [38] Рендереры на основе OptiX используются в Autodesk Arnold, Adobe AfterEffects , Bunkspeed Shot, Autodesk Maya , 3ds max и многих других рендерерах.
В 2014 году в демоверсии видеоигры The Tomorrow Children для PlayStation 4 , разработанной Q-Games и Japan Studio , были продемонстрированы новые методы освещения, разработанные Q-Games, в частности каскадная воксельная трассировка конусных лучей, которая имитирует освещение в реальном времени и использует более реалистичные отражения, а не отражения в пространстве экрана . [39]
Nvidia представила свои графические процессоры GeForce RTX и Quadro RTX в сентябре 2018 года, основанные на архитектуре Turing , которая позволяет выполнять аппаратно-ускоренную трассировку лучей. Аппаратное обеспечение Nvidia использует отдельный функциональный блок, публично называемый «ядро RT». Этот блок в некоторой степени сопоставим с текстурным блоком по размеру, задержке и интерфейсу с ядром процессора. Блок включает обход BVH , декомпрессию сжатых узлов BVH, тестирование пересечения лучей AABB и тестирование пересечения лучей треугольников. [40] GeForce RTX в виде моделей 2080 и 2080 Ti стала первым ориентированным на потребителя брендом видеокарт, который может выполнять трассировку лучей в реальном времени, [41] а в ноябре 2018 года Battlefield V от Electronic Arts стала первой игрой, которая использовала преимущества своих возможностей трассировки лучей, которые она достигает с помощью нового API Microsoft, DirectX Raytracing . [42] AMD, которая уже предлагала интерактивную трассировку лучей поверх OpenCL через свой Radeon ProRender , [43] [44] представила в октябре 2020 года серию Radeon RX 6000 , свои графические процессоры Navi второго поколения с поддержкой аппаратно-ускоренной трассировки лучей на онлайн-мероприятии. [45] [46] [47] [48] [49] С тех пор появились последующие игры, которые визуализируют свою графику такими средствами, что было приписано улучшениям в аппаратном обеспечении и усилиям по обеспечению большего количества API и игровых движков, совместимых с этой технологией. [50] Современные домашние игровые консоли реализуют специальные аппаратные компоненты трассировки лучей в своих графических процессорах для эффектов трассировки лучей в реальном времени, которые начались с консолей девятого поколения PlayStation 5 , Xbox Series X и Series S. [ 51] [52 ] [53] [54] [55]
4 ноября 2021 года компания Imagination Technologies анонсировала свой графический процессор IMG CXT с аппаратным ускорением трассировки лучей. [56] [57] 18 января 2022 года компания Samsung анонсировала свой чипсет Exynos 2200 AP с аппаратным ускорением трассировки лучей. [58] 28 июня 2022 года компания Arm анонсировала свой Immortalis-G715 с аппаратным ускорением трассировки лучей. [59] 16 ноября 2022 года компания Qualcomm анонсировала свой процессор Snapdragon 8 Gen 2 с аппаратным ускорением трассировки лучей. [60] [61]
12 сентября 2023 года Apple представила аппаратно-ускоренную трассировку лучей в своих проектах чипов, начиная с чипа A17 Pro для моделей iPhone 15 Pro. [62] [63] Позже в том же году Apple выпустила семейство процессоров M3 с поддержкой аппаратной трассировки лучей. [64] В настоящее время эта технология доступна на iPhone, iPad и компьютерах Mac через API Metal . Apple сообщает о 4-кратном увеличении производительности по сравнению с предыдущей программной трассировкой лучей на телефоне [63] и о 2,5-кратном увеличении скорости по сравнению с чипами M3 и M1. [64] Аппаратная реализация включает ускорение обхода структуры и выделенные пересечения лучей и ящиков, а API поддерживает функции RayQuery (встроенная трассировка лучей), а также RayPipeline. [65]
Различные результаты по сложности были доказаны для определенных формулировок проблемы трассировки лучей. В частности, если версия решения проблемы трассировки лучей определяется следующим образом [66] – заданы начальное положение и направление светового луча и некоторая фиксированная точка, достигает ли луч в конечном итоге этой точки, то указанная статья доказывает следующие результаты:
{{cite web}}
: CS1 maint: numeric names: authors list (link){{cite web}}
: CS1 maint: multiple names: authors list (link)