Lipschitz Pruning:
Hierarchical simplification of Primitive-Based SDFs
Wilhem Barbier1,2*
Mathieu Sanchez1*

Axel Paris1
Élie Michel1
Thibaud Lambert1

Tamy Boubekeur1
Mathias Paulin2
Théo Thonat1

1

* equal contribution

2
Signed distance fields

SDFs are a surface representation used in...

Slisesix by Inigo Quilez

Demoscene

Dreams by Media Molecule

Video games

Modeling software

1-Lipschitz SDF

Taxonomy



1-Lipschitz SDF

Taxonomy



1-Lipschitz SDF

Taxonomy



1-Lipschitz SDF

Taxonomy



1-Lipschitz SDF

Taxonomy



Boolean operations

Union

\(\min(f_1, f_2)\)

Intersection

\(\max(f_1, f_2)\)

Difference

\(\max(f_1, -f_2)\)

Boolean operations
blending
kernel
blending
radius

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)\)

Boolean operations

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 \]

Smooth CSG tree
Smooth CSG tree

Compact representation

Intuitive modeling operations

No explicit topology

Slow to evaluate

Previous works
Arbitrary tree
topology
Low
overhead
Compat. with prev.
blending kernels
Dreams [MM15]
Clayxels [Aaltonen18]
MPR [Keeter20]
Synchronized Tracing
[Zanni24]
Ours
Overview

Lipschitz Pruning

Overview

Lipschitz Pruning

Hierarchical scheme

Lipschitz Pruning
Lipschitz Pruning
Lipschitz Pruning
Lipschitz Pruning

\({\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?

Lipschitz Pruning

\({\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!

Lipschitz Pruning

\({\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!

Lipschitz Pruning

\({\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

Pruned tree computation

Input tree

Pruned tree computation

Input tree

Pruned tree

Pruning ratio
Pruning ratio
Pruning ratio
Far-field culling

Replace pruned tree with a lower-bound distance when far from the surface.


Hierarchical scheme

Coarse-to-fine pruning

Results: pruning effectiveness
Results: timings

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

Results: sphere tracing speedup

Thank you