Ray marching — это класс методов рендеринга для 3D-компьютерной графики , где лучи проходят итеративно, эффективно разделяя каждый луч на более мелкие сегменты луча, выбирая некоторую функцию на каждом шаге. Например, при объемном сканировании лучей функция будет получать доступ к точкам данных из 3D-скана. При трассировке сферы функция оценивает расстояние до следующего шага. Ray marching также используется в физических симуляциях в качестве альтернативы трассировке лучей , где решаются аналитические решения траекторий световых или звуковых волн. Ray marching для компьютерной графики часто использует преимущества SDF для определения максимального безопасного размера шага, хотя это менее распространено в физических симуляциях, аналогичный метод адаптивного шага может быть достигнут с помощью адаптивных методов Рунге-Кутты .
При трассировке сферы [ 1] или прохождении лучей с помощью сферы точка пересечения аппроксимируется между лучом и поверхностью, определяемой функцией расстояния со знаком (SDF). SDF оценивается для каждой итерации, чтобы иметь возможность делать как можно большие шаги, не пропуская ни одной части поверхности. Порог используется для отмены дальнейшей итерации, когда достигнута точка, достаточно близкая к поверхности. Поскольку мощное аппаратное обеспечение GPU стало более доступным, этот метод был популяризирован демосценой и Иниго Килесом, [ требуется ссылка ] соавтором Shadertoy .
Для простых сцен с базовыми 3D-формами ray marching не имеет особых преимуществ по сравнению с трассировкой лучей (которая находит пересечения без прохождения через пространство). Сильные стороны ray marching SDF, например, при морфинге форм, аппроксимации мягких теней, повторении геометрии и алгоритмически определенных сценах.
Для многих примитивных 3D-форм существуют функции расстояния со знаком. [2] Их можно комбинировать с использованием математических операций, таких как modulo и booleans, для формирования более сложных поверхностей. Например, взятие модуля входных координат SDF разбивает его объем на все пространство, а взятие максимального из двух SDF дает поверхность пересечения их объемов. Поскольку SDF можно определить для многих фракталов, трассировка сферы часто используется для рендеринга 3D-фракталов. [3]
Аналогичная технология прокладки лучей с помощью сферы, использование кубов и расстояния такси может быть использовано для визуализации объемов вокселей.
В объемном маршировании лучей каждый луч трассируется, так что цвет и/или плотность могут быть отобраны вдоль луча, а затем объединены в конечный цвет пикселя. Это часто используется, например, при рендеринге облаков или 3D-медицинском сканировании.
При рендеринге эффектов экранного пространства , таких как отражение в экранном пространстве (SSR) и тени в экранном пространстве, лучи трассируются с использованием G-буферов , где данные глубины и нормали поверхности хранятся для каждого 2D-пикселя.
В статье Кена Перлина «Гипертекстура» [4] 1989 года содержится ранний пример метода лучевого марширования.