Авторы: H. Hansson-Söderlund, T. Akenine-Möller
Аннотация: Мы представляем простые методы вычисления жестких ограничивающих рамок, выровненных по оси, для вокселов и для блоков вокселов в средстве визуализации функции расстояния со знаком, основанном на трассировке лучей. Наши результаты показывают общее сокращение времени кадра на 20-31% при трассировке траектории в реальном времени.
Ключевые слова: трассировка лучей, объемные модели, SDF, ограничивающие рамки, воксели, кирпичи, оптимизация производительности.
Функции расстояния со знаком (SDF) могут использоваться для моделирования впечатляющих сцен с простыми геометрическими объектами в качестве строительных блоков и использованием над ними операторов, таких как объединение, пересечение, плавное вычитание и плавное объединение. В нескольких играх широко использовались SDF, например, Claybook и Dreams, но SDF также используются в игровых движках, таких как Unreal Engine, для ускорения рендеринга. В этой короткой статье мы сосредоточимся на ускорении трассировки лучей сетки SDF, которая состоит из набора вокселов с трехлинейно интерполированной поверхностью в каждом.
В одном вокселе со знаковыми значениями расстояния 2×2×2, sijk с i, j, k ∈ {0,1}, стандартное уравнение для трилинейной интерполяции имеет вид:
где x, y, z ∈ [0,1]. Обратите внимание, что поверхность f(x, y, z) = 0, которая является полиномом третьего порядка, внутри вокселя чаще всего является желаемой, как видно на рисунке 2.
В недавнем методе трассировки лучей SDF-сеток экстенты вокселей использовались в качестве границы для одного вокселя или блока вокселей, например, в структурах данных sparse voxel set (SVS) и sparse brick set (SBS) соответственно. Уменьшение размера ограничивающего объема (BV) является важной оптимизацией производительности, поскольку количество лучей, которые могут его пересекать, примерно пропорционально площади поверхности BV. Мы представляем два улучшения по сравнению с предыдущей работой.
Первый - это новый метод вычисления ограниченной рамки, выровненной по оси (AABB), только вокруг экстентов поверхности внутри вокселя (см. Рисунок 1). Второй способ заключается в вычислении плотного прямоугольника вокруг поверхности внутри кирпича, где кирпич представляет собой группу, например, из 7³ вокселов. Наши результаты показывают значительное повышение производительности.
Поскольку поверхность в уравнении 1 расположена в [0,1]³, мы стремимся вычислить жесткую ограничивающую рамку, определяемую bmin ∈ [0,1]³ и bmax ∈ [0,1]³, такую, что bmini ≤ bmaxi, где i ∈ {x, y, z}. Масштабирование и перемещение могут быть применены для последующей установки размера и положения, например, путем преобразования пересекающегося луча. Обратите внимание, что поверхность внутри вокселя существует, только если хотя бы один sijk ≥ 0 и один sijk ≤ 0.
Мы начнем с описания того, как вычислить точку пересечения между трехлинейно интерполированной поверхностью внутри вокселя и ребром вокселя. Поскольку поверхность возвращается к линейной интерполяции по одной переменной вдоль каждого ребра, вдоль ребра может быть не более одного пересечения. Если трехмерная точка в начале ребра вокселя равна p0 с расстоянием со знаком s0, а конец ребра равен p1 с расстоянием со знаком s1, то поверхность пересекает ребро в:
если s0·s1 ≤ 0, т.е. они имеют разные знаки или хотя бы один из них равен нулю. Чтобы избежать делений на ноль, когда s0 = s1, мы сначала выполняем тщательную инициализацию bmin и bmax и не оцениваем уравнение 2, когда s0 = s1. Это включает случай, когда s0 = 0 и s1 = 0, что указывает на наличие поверхности вдоль всего ребра, и, как следствие, это ребро должно быть включено в рамку.
Для инициализации прямоугольника отметим, что если любое из четырех обозначенных расстояний на четырехугольной грани равно нулю, то соответствующая координата ограничивающей рамки должна быть равна 0 или 1. Для x-координаты жесткой ограничивающей рамки мы эффективно выражаем это как:
где Z(t) равно 1, если t равно нулю, а в противном случае равно 0, и | является двоичным ИЛИ. Обратите внимание, что если bminx = 1 и bmaxx = 0, то это указывает на недопустимый флажок. Аналогичные вычисления выполняются для y- и z-координат.
Когда инициализация bmin и bmax выполнена, их можно использовать в сочетании с точками пересечения ребер для вычисления строгой, выровненной по оси ограничивающей рамки (AABB) только вокруг поверхности внутри вокселя. Это поле можно найти как наименьший AABB вокруг инициализированных bmin и bmax, и все существующие точки пересечения ребер (Уравнение 2) между поверхностью (Уравнение 1) и 12 ребрами вокселя. Далее следует набросок доказательства этого утверждения.
Для начала давайте сосредоточимся на кривой, которая генерируется на определенной грани вокселя, например, z = 0. Кривая на этой грани определяется как:
Некоторые примеры показаны на рисунке 3. Обратите внимание, что можно переписать уравнение 4 для f(x, y) = 0, потому что мы включаем 0 в это сравнение, поскольку f(x, y, z) = 0 указывает, что (x, y, z) лежит на поверхности:
Как видно на рисунке 3, эта кривая часто делится на две части. Однако, когда s110 - s010 - s100 + s000 = 0, он возвращается к одной прямой линии.
Дифференцирование уравнения 4 показывает, что и ∂f/∂x, и ∂f/∂y являются линейными по y и x. Это означает, что кривая f(x, y) монотонна, но она может быть разрывной (если только это не прямая линия), поскольку знаменатель в уравнении 5 является линейной функцией по x, и знаменатель будет равен 0 для x = (s000 - s010)/k.
Мы утверждаем, что плотная двумерная ограничивающая рамка (AABB) кривой, выровненная по оси, на грани вокселя является наименьшей AABB вокруг точек пересечения кривой и четырех ребер вокселя. В случае с прямой линией это определенно так. Если только один изогнутый сегмент находится внутри единичного квадрата, то эта часть кривой должна быть ограничена точками пересечения кривой с краями вокселя, поскольку кривая монотонна. Два изогнутых сегмента внутри единичного квадрата могут возникать только в том случае, если два противоположных угла имеют одинаковые знаки для обозначенных ими расстояний, в то время как два других угла имеют противоположные знаки по сравнению с этими первыми расстояниями. В этом случае наиболее плотным AABB на этой грани вокселя является вся грань вокселя.
Поскольку любой двумерный срез вокселя, выровненный по оси, имеет такое поведение и поскольку кривые монотонны, из этого следует, что плотный трехмерный AABB вокруг поверхности внутри вокселя может быть найден как наименьший AABB вокруг точек пересечения поверхности и краев вокселя. На этом наш набросок доказательства завершается.
В структуре данных sparse brick set (SBS) использовались AABB вокруг каждого "кирпича" вокселов, и вокруг этих AABB была построена иерархия ограничивающих объемов (BVH). Блок вокселов может быть, например, размером 7×7×7 вокселов. Ранее использовалась ограничивающая рамка вокруг всего блока, что было упущением, поскольку простым улучшением было бы вычислить наименьший AABB вокруг непустых вокселов. Мы еще больше улучшаем это, предлагая вычислить жесткие ограничивающие рамки для каждого непустого вокселя в блоке, используя метод из раздела 2. Последняя кирпичная коробка - это самый маленький AABB вокруг всех этих плотных воксельных коробок. Это показано на рисунке 4.
Мы реализовали наш алгоритм в фреймворке рендеринга Falcor и сравнили с методами Ханссона Седерлунда и др. В частности, мы сравниваем со структурами данных sparse voxel set (SVS) и sparse brick set (SBS), где мы добавили наш метод. В структуре данных SVS AABB вычисляется вокруг каждого вокселя, а BVH строится вокруг всех таких AABB. В структуре данных SBS хранится только один AABB вокруг каждого блока вокселов (в нашем случае кирпич равен 7³ вокселям). Затем BVH строится вокруг всех кирпичных AABB и трассируется лучами с помощью графического процессора.
Мы собрали результаты как для NVIDIA RTX 3090, так и для RTX 4090. Перед измерением рендеринг производился на полной скорости в течение 180 секунд, чтобы прогреть графический процессор и избежать временной высокочастотной синхронизации. Камера была анимирована, и измерения производились на протяжении 4,500 кадров с разрешением 1920 × 1080 пикселей. Все значения времени указаны в миллисекундах и включают трассировку пути, накопление выборок и отображение тона.
Сцены, которые мы использовали для оценки, показаны на рисунке 5, где разрешение сетки составляло 5123 для каждого объекта. Наша оценка производительности проводилась с использованием только корневого решателя Marmitt et al. [MKWF04] и используя только интерполированные непрерывные нормали и быстрое тестирование теневых лучей [HEAM22]. Ожидается, что другие результаты работы Ханссона Седерлунда и др. сохранят те же соотношения и, следовательно, будут опущены. Основные результаты расчета сроков приведены в таблице 1.
| RTX 3090 / RTX 4090 | Гоблинские головы | Дама |
|---|---|---|
| SVS [HEAM22] | 12,7 / 5,8 | 25,0 / 9,5 |
| SVS (наши) | 10,1 / 4,6 | 17,2 / 6,8 |
| Снижение | 20,3% / 19,7% | 31,2% / 28,0% |
| SBS [HEAM22] | 21,7 / 10,0 | 37,3 / 16,4 |
| SBS (наша) | 17,4 / 8,0 | 26,7 / 11,9 |
| Сокращение | 19,9% / 20,0% | 28,5% / 27,3% |
На RTX 3090 общее сокращение времени кадра составило 20-31% для SVS и 20-28% для RTX 4090. Для SBS снижение составило 20-29% для RTX 3090 и 20-27% для RTX 4090. По нашему мнению, для такой небольшой модификации улучшение производительности довольно существенное. Основные результаты, приведенные выше для SBS, были получены с использованием метода с наименьшими AABB, которые мы могли вычислить, т. е. С использованием метода, изображенного синей пунктирной линией на рисунке 4. Мы не сообщаем полных результатов для метода с зеленой рамкой на рисунке 4, а вместо этого лишь отмечаем, что он был примерно на 3% медленнее, чем предлагаемый метод с использованием наименьших значений AABB.
Мы представили методы вычисления жестких ограничивающих рамок для поверхности внутри вокселя, определяемой трехлинейной интерполяцией подписанных расстояний в углах вокселя. Кроме того, аналогичный метод был представлен для кирпичей, то есть небольших блоков вокселей. При усреднении по двум графическим процессорам и трем сценам наш метод SVS позволил сократить общее время кадра на 26%. Для SBS этот показатель составил 25%.
Для будущей работы добавление карты занятости в SBS может обеспечить дополнительное сокращение времени рендеринга. Карта занятости хранит один бит, указывающий, есть ли поверхность в соответствующем вокселе. Доступ к этой карте осуществляется первым, и дополнительные данные вокселя считываются только в том случае, если бит карты занятости равен единице.
Благодарность: Спасибо Брайану Кэрису за информацию о первой части расчета brick box.