SDFs are a surface representation used in...
Slisesix by Inigo Quilez
Demoscene
Dreams by Media Molecule
Video games
Modeling software
Taxonomy
Taxonomy
Taxonomy
Taxonomy
Taxonomy
Union
\(\min(f_1, f_2)\)
Intersection
\(\max(f_1, f_2)\)
Difference
\(\max(f_1, -f_2)\)
Union
\(\min(f_1, f_2) - \phi(\lvert f_1-f_2\rvert, k)\)
Intersection
\(\max(f_1, f_2) + \phi(\lvert f_1-f_2\rvert,k)\)
Difference
\(\max(f_1, -f_2) + \phi(\lvert f_1-f_2\rvert, k)\)
Union
\(\min(f_1, f_2) - \phi(\lvert f_1-f_2\rvert, k)\)
Intersection
\(\max(f_1, f_2) + \phi(\lvert f_1-f_2\rvert,k)\)
Difference
\(\max(f_1, -f_2) + \phi(\lvert f_1-f_2\rvert, k)\)
Smooth boolean operations maintain the 1-Lipschitz property: \[ \lVert \nabla f \rVert \le 1 \]
Compact representation
Intuitive modeling operations
No explicit topology
Slow to evaluate
Arbitrary tree topology |
Low overhead |
Compat. with prev. blending kernels |
|
---|---|---|---|
Dreams [MM15] | |||
Clayxels [Aaltonen18] | |||
MPR [Keeter20] | |||
Synchronized Tracing [Zanni24] |
|||
Ours |
Lipschitz Pruning
Lipschitz Pruning
Hierarchical scheme
\({\rm U{\small nion}}(f_1, f_2, k) = \min(f_1,f_2) - \underbrace{\phi(\lvert f_1-f_2 \rvert, k)}_{0 \text{ when } \lvert f_1-f_2 \rvert > k}\)
How to know if \(\lvert f_1-f_2 \rvert > k\) within the cell?
\({\rm U{\small nion}}(f_1, f_2, k) = \min(f_1,f_2) - \underbrace{\phi(\lvert f_1-f_2 \rvert, k)}_{0 \text{ when } \lvert f_1-f_2 \rvert > k}\)
How to know if \(\lvert f_1-f_2 \rvert > k\) within the cell? Use the Lipschitz bound!
\({\rm U{\small nion}}(f_1, f_2, k) = \min(f_1,f_2) - \underbrace{\phi(\lvert f_1-f_2 \rvert, k)}_{0 \text{ when } \lvert f_1-f_2 \rvert > k}\)
How to know if \(\lvert f_1-f_2 \rvert > k\) within the cell? Use the Lipschitz bound!
\({\rm U{\small nion}}(f_1, f_2, k) = \min(f_1,f_2) - \underbrace{\phi(\lvert f_1-f_2 \rvert, k)}_{0 \text{ when } \lvert f_1-f_2 \rvert > k}\)
How to know if \(\lvert f_1-f_2 \rvert > k\) within the cell? Use the Lipschitz bound!
Sufficient condition using \(\lVert \nabla f_1 \rVert, \lVert \nabla f_2 \rVert \le 1\): \[ \lvert f_1(\mathbf{p}) - f_2(\mathbf{p}) \rvert > k+2R \\[0.2em] \big\Downarrow \\[0.2em] \lvert f_1 - f_2 \rvert > k \]
Conservative criterion using a single evaluation
Input tree
Input tree
Pruned tree
Replace pruned tree with a lower-bound distance when far from the surface.
Coarse-to-fine pruning
We measure pruning time and sphere-tracing time on a laptop RTX 4060.
Pruning is recomputed every frame from scratch.
Ours:
Pruning time: 14.3ms
Tracing time: 15.2ms
Baseline:
Tracing time: 9.4 seconds