В данный момент я занимаюсь проверкой моей теории о возможности эффективного обратного (дифференцируемого) рендеринга SDF-сеток с помощью построения SDF-дерева (или SDF-пирамиды, если быть точнее).
Суть моей теории заключается в том, что рендеринг и оптимизацию SDF можно осуществлять оперируя только неполным множеством значений SDF-сетки, а именно набором множеств нулевого уровня исходной сетки и её аппроксимаций. Это должно уменьшить требование к памяти и скорость алгоритмов обратного рендеринга SDF.
Для проверки этой теории я решил написать простую программу-рендерер на языке C. Основной вопрос, который я хочу решить этим экспериментом состоит в следующем: достаточно ли упомянутого набора данных для корректной трассировки лучей.
У эксперимента уже есть одно прямое решение: осуществлять трассировку можно
методом обхода воксельной сетки до множества нулевого уровня, переключаясь в последствии на трассировку SDF, однако я этим решением не удовлетворён, кроме того, я не уверен в том, что его возможно дифференцировать. Потому я пытаюсь сделать кое-что более интересное!
***
Некоторые упоминаемые определения:
Обратный рендеринг — метод получения параметров сцены (формы геометрии, положения объектов, свойств источников освещения, камеры и т.д.) по изображению. В прямом рендеринге из сцены мы получаем картинку, здесь наоборот. Как это делать — вопрос не простой.
SDF, Signed distance function, функция расстояния со знаком — это функция, значение которой есть минимальное расстояние до некоторой геометрической формы (границы некоторого множества). Такой функцией можно представлять трёхмерную (двумерную или скольки-угодно мерную) геометрию, чем активно пользуются
любители пописать шейдеры. SDF-сетка представлять собой дискретизацию этой функции.
Множество нулевого уровня, Zero-level set — множество точек, в которых значение функции равно нулю. Частный случай
множества уровня. В случае применения к SDF-сетке — это множество ячеек сетки наиболее близких к нулевому значению SDF, множество ячеек, описывающих контур геометрии объекта.