В традиционной компьютерной графике трёхмерные объекты обычно описываются с помощью дискретных сеток из треугольников. Однако существует альтернативный подход, основанный на непрерывных математических моделях. В его основе лежат функции, определённые в трёхмерном пространстве, и методы численного анализа. К таким подходам относятся Signed Distance Functions (SDF) и алгоритм Ray Marching. Эти методы активно используются в шейдерах, WebGL и, в частности, в симуляциях на базе THREE.js.
Signed Distance Function — это способ задать геометрический объект как функцию от трёх переменных. Каждой точке пространства сопоставляется расстояние до поверхности объекта, причём знак этого расстояния указывает, находится ли точка внутри или вне фигуры.
Пусть в евклидовом пространстве $\mathbb{R}^3$ задано тело $\Omega$ с границей $\partial \Omega$. Тогда Signed Distance Function определяется следующим образом:
$$ f(\mathbf{p}) = \begin{cases} -\operatorname{dist}(\mathbf{p}, \partial \Omega), & \mathbf{p} \in \Omega, \\ 0, & \mathbf{p} \in \partial \Omega, \\ +\operatorname{dist}(\mathbf{p}, \partial \Omega), & \mathbf{p} \notin \Omega. \end{cases} $$
Здесь расстояние вычисляется в стандартной евклидовой метрике:
$$ \operatorname{dist}(\mathbf{p}, A) = \inf_{\mathbf{q} \in A} \|\mathbf{p} - \mathbf{q}\|, \quad \|\mathbf{x}\| = \sqrt{x^2 + y^2 + z^2}. $$
Таким образом, SDF является функцией вида
$$ f : \mathbb{R}^3 \to \mathbb{R}, $$
что напрямую связывает её с разделами математического анализа, посвящёнными функциям нескольких переменных, метрикам и нормам.
Простейший пример SDF — сфера радиуса $R$ с центром в точке $\mathbf{c}$:
$$ f(\mathbf{p}) = \|\mathbf{p} - \mathbf{c}\| - R $$
Значение функции равно нулю на поверхности сферы, отрицательно внутри и положительно снаружи. Аналогичным образом можно задать плоскости, параллелепипеды и более сложные фигуры.
Важным свойством Signed Distance Function является её непрерывность, а в окрестности поверхности — дифференцируемость. Это позволяет использовать аппарат дифференциального исчисления. В частности, градиент функции
$$ \nabla f(x,y,z) = \left( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}, \frac{\partial f}{\partial z} \right) $$
на поверхности объекта направлен по нормали к ней. Это свойство активно используется в компьютерной графике для расчёта освещения и отражений. Таким образом, градиент, изучаемый в математическом анализе, получает наглядное геометрическое и практическое применение.
Ray Marching — это численный метод визуализации поверхностей, заданных неявно с помощью Signed Distance Function. В отличие от классической трассировки лучей, где требуется аналитически находить точки пересечения луча с геометрическими примитивами, Ray Marching строится как итеративный процесс приближения к поверхности.
Луч, исходящий из камеры, задаётся параметрически: