Трассировка конуса [1] и трассировка лучей являются производными от алгоритма трассировки лучей, который заменяет лучи без толщины толстыми.
Принципы
Это делается по двум причинам:
С точки зрения физики легкого транспорта
Энергия, достигающая пикселя, исходит от всего телесного угла, под которым глаза видят пиксель в сцене, а не от его центрального образца. Это дает ключевое понятие пиксельного следа на поверхности или в пространстве текстуры , которое является обратной проекцией пикселя на сцене.
Приведенное выше описание соответствует упрощенной оптике камеры-обскуры, классически используемой в компьютерной графике . Обратите внимание, что этот подход также может представлять камеру на основе объектива и, следовательно, эффекты глубины резкости , используя конус, поперечное сечение которого уменьшается от размера объектива до нуля в фокальной плоскости , а затем увеличивается.
Более того, реальная оптическая система не фокусируется на точных точках из-за дифракции и дефектов. Это можно смоделировать как функцию рассеяния точки (PSF), взвешенную в пределах телесного угла, превышающего пиксель.
С точки зрения обработки сигналов
Изображения с трассировкой лучей страдают сильным наложением спектров, поскольку «проецируемый геометрический сигнал» имеет очень высокие частоты, превышающие максимальную частоту Найквиста-Шеннона, которая может быть представлена с использованием частоты дискретизации пикселей, поэтому входной сигнал должен быть отфильтрован нижними частотами , т. Е. интегрированы по телесному углу вокруг центра пикселя.
Обратите внимание, что вопреки интуиции фильтр не должен быть следом пикселя, поскольку прямоугольный фильтр имеет плохие спектральные свойства. И наоборот, идеальная функция sinc непрактична, поскольку имеет бесконечную поддержку и, возможно, отрицательные значения. Gaussian или Lanczos фильтр считаются хорошими компромиссы.
Компьютерные графические модели
В ранних работах Cone и Beam использовались различные упрощения: в первом рассматривается круговое сечение и пересечение рассматривается с различными возможными формами. Второй обрабатывает точный пирамидальный луч через пиксель и вдоль сложного пути, но он работает только для многогранных форм.
Конусная трассировка решает определенные проблемы, связанные с выборкой и наложением имен, которые могут мешать традиционной трассировке лучей. Однако трассировка конуса сама по себе создает множество проблем. Например, простое пересечение конуса с геометрией сцены приводит к огромному разнообразию возможных результатов. По этой причине отслеживание конуса осталось в основном непопулярным. В последние годы из-за увеличения скорости компьютеров алгоритмы Монте-Карло , такие как распределенная трассировка лучей, т. Е. Стохастическая явная интеграция пикселя, стали использоваться гораздо чаще, чем конусная трассировка, поскольку результаты являются точными при условии использования достаточного количества выборок. Но сходимость настолько медленная, что даже в контексте автономного рендеринга требуется огромное количество времени, чтобы избежать шума .
Дифференциальная трассировка конуса с учетом дифференциальной угловой окрестности вокруг луча позволяет избежать сложностей, связанных с точным пересечением геометрии, но требует представления LOD геометрии и внешнего вида объектов. MIPmapping - это приближение к этому, ограниченное интеграцией текстуры поверхности в отпечаток конуса. Дифференциальная трассировка лучей [2] распространяется на текстурированные поверхности, просматриваемые через сложные траектории конусов, отраженных или преломленных изогнутыми поверхностями.
Методы Raymarching по знаковым полям расстояний (SDF), естественно, позволяют легко использовать конусообразную трассировку без дополнительных затрат на трассировку, а также ускоряют трассировку и улучшают качество.
Рекомендации
- ^ Amanatides, Джон (1984). «Трассировка лучей с помощью конусов». ACM SIGGRAPH Компьютерная графика . 18 (3): 129. CiteSeerX 10.1.1.129.582 . DOI : 10.1145 / 964965.808589 .
- ^ Хоман Игехи. «Отслеживание различий в лучах». http://www.graphics.stanford.edu/papers/trd/