Simplicial Complex Augmentation Framework
for Bijective Maps

1NYU Courant, 2Texas A&M
ACM Transactions on Graphics (Proc. SIGGRAPH Asia 2017)
Scaffold construction

Scaffold P (dark) + auxiliary S (light blue) tessellates bounding box D. Local injectivity on D ⇒ global bijectivity on P.

Method Gallery

Teaser scaffold construction centered 16:9

Teaser – Scaffold P (dark) + auxiliary S (light) filling □\P to convex domain. Centered crop ensures scaffold ring visible.

Method scaffold centered 1600x900

Method – Joint optimization on D=P∪S, 105k tets untangled, scaffold construction centered (object-position:center).

Results packing multi-chart

Results – Multi-chart UV atlas packing, 100% flip-free, 1.2s / 12.3 SymDirichlet; high-qual PNG (351KB) preserved.

All images 16:9 with object-fit:cover; object-position:center – centered scaffold, white bg padding via bulma cards.

Abstract

Bijective maps are ubiquitously used in texture, displacement and bump mapping, simulation and fabrication — yet enforcing global injectivity is far harder than local positivity of Jacobians. Standard optimizers that chase overlaps with CCD are expensive, non-smooth, and fail on large-scale meshes.

We propose to insert geometry instead of checking collisions. Build a surrounding simplicial scaffold that fills the gap between patch P and its bounding box □. The augmented complex D = P ∪ S now tessellates a convex domain. Any piecewise-linear locally injective map on D (det>0 per tet/tri) that fixes outer boundary is provably globally bijective. If P tried to fold, some scaffold simplex would invert first — which the local barrier forbids.

This reduction lets us plug any modern locally-injective solver (SLIM, flip-free) and inherit its speed while gaining a global guarantee, in both 2D and 3D — two orders of magnitude faster than global-collision methods, 100% flip-free on 114 meshes, with lowest symmetric Dirichlet distortion.

Why Bijective is Hard

For patch P ⊂ ℝd (d=2,3) we seek f: P→ℝd minimizing E(f):

  • (1) det(∇f|t) > 0 ∀ t∈P — local injectivity
  • (2) f globally injective on P — no distant overlaps
  • (3) f(P)⊂□ stays inside convex domain

(2) is non-local O(n²). Direct barriers: segment-triangle ccd, winding numbers — brute force. Tutte embedding only works for convex-fixed boundary and high distortion. Bounded-distortion spaces still heavy. SLIM alone guarantees (1) not (2).

SCAF insight: Foam around object. If rubber sheet inside picture frame folds over itself while frame stays rectangular, rubber must cross frame → frame triangle inverts. So forbid inversion of foam ⇒ no fold.

Augmentation Framework

1. Scaffold Construction

  1. Embed: AABB of rest pose P₀, inflate 10-20%.
  2. Tessellate gap: Triangulate S = □\P₀ (2D via Triangle) / tet-mesh via fTetWild / TetGen constrained Delaunay.
  3. Merge: D = P∪S now convex tessellation. |S| ≈ 0.5|P|..2|P|, coarser outside.

2. Weighted Barrier

Local injectivity maintained via log/barrier:

$$E_{barrier}(f)=\sum_{t\in D} \begin{cases}E_{distort}(t) & \det>0\\ +\infty & \text{otherwise}\end{cases}+\lambda E_{scaffold}$$

Symmetric Dirichlet: σ₁²+σ₁⁻²+σ₂²+σ₂⁻², ARAP ‖F-R‖², LSCM, MIPS. Scaffold weight wS=0.1·area(S)/area(D) — soft, allows large stretch so distortion focuses on P. Hardening ε:1e-3→1e-5, Newton line-search ensures det>ε.

3. Covering Argument

Locally-injective PL map on complex that tessellates convex domain is a covering map onto its image (invariance of domain). Convex codomain + ∂D fixed ⇒ covering number 1 ⇒ homeomorphism. Extension to free boundary: ∂D slides along □, still injective.

Scaffold featured
SCAF-2017 original scaffold ring
dark=patch, light=scaffold

Algorithm

def SCAF(P0, energy="SymDirichlet"):
  D, S_mask = build_scaffold(P0)      # D = P ∪ S
  f = rest(D)
  for it in range(max_iter):
    R = best_rotation(f)               # Procrustes per element
    f = linear_solve(D, R, w(det))     # weighted barrier stiffness
    if min(det) < 1e-6: increase_barrier()
    if converged: break
  return f[P]  # strip scaffold

Complexity: O((|P|+|S|) log) per linear solve, 5-20 iters. 2 orders faster than CCD in [Aigerman & Lipman13, Schüller13]. Library: igl::SCAFData s; s.add_mesh(P,V,F); scaf_solve(s);

pipeline

Pipeline: scaffold generation → joint locally-injective optimization → strip scaffold. Left self-intersecting leg untangled in 8s, 105k tets.

Theorems & Proofs

Theorem (Scaffold ⇒ Bijectivity). Let D tessellate convex □⊂ℝd. If f:D→ℝd is PL, locally injective (det>0 per simplex) and f|∂D=id, then f is globally bijective on D. In particular f|P globally injective and f(P)⊂□.

Proof sketch 2D/3D unify: Locally-injective PL map on simplicial complex is covering onto image (Smith et al.). Degree theory / Jordan-Brouwer: assume ∃x₁≠x₂, f(x₁)=f(x₂). Lift path from outer boundary to interior → winding contradiction. Scaffold barriers prevent exit. Uses Tutte embedding generalization: interior tri cannot cross outer quad without inversion. Formal via topological degree =1 due to fixed convex boundary.

Extension free boundary: outer vertices constrained to slide along □ edges/faces, degree still 1.

  • Guarantee: line-search never accepts det≤0, so discrete flow maintains conditions for theorem every iteration.
  • Vs prior: Tutte yes but only fixed convex & high distortion; Bounded Distortion yes but high distortion & slow k≤10; SLIM fast no global; SCAF fast + low distortion + yes.

Results

Metrics on 114 meshes (Myles et al., Liu et al. datasets):

MethodFlip-free %Avg SymDirichletAvg time
[Smith & Schaefer 15]88%18.7127s
Bounded Distortion100% but high k22+300s
SLIM w/o scaffold79%11.90.9s
SCAF (ours)100%12.31.2s

Benches: 100% bijective, 0 flips vs 12% fail competing, 10-100× speed.

results chart packing

Multi-chart packing: multiple charts packed into single UV atlas without overlaps via shared scaffold. White = scaffold.

Applications

  • Single-patch UV: free-boundary low-distortion parametrization, boundary evolves but stays bijective.
  • Multi-chart: S = □\∪Pᵢ, joint opt distributes space fairly, no inter-chart overlaps → texture atlases.
  • Untangling: tangled leg 105k tets → flow from untangled proxy while scaffold valid → 8s.
  • Inflation/Deformation: bunny ×1.3 linear interp self-intersects ears, SCAF maintains positive tets — print-ready volumetric ARAP.

Limitations

  • Fixed to convex box (free slide still inside hull) — extreme stretches may hit box. Fix: inflate 2×.
  • 3D scaffold quality thin gaps → slivers — TetWild + weak w_S mitigate.
  • Prevents intentional topology change (desired for bijectivity).
  • Higher genus needs cut to disk first.

Future: scaffold for hex meshing, neural implicit maps, GPU.

BibTeX

@article{jiang2017simplicial,
  title   = {Simplicial Complex Augmentation Framework for Bijective Maps},
  author  = {Jiang, Zhongshi and Schaefer, Scott and Panozzo, Daniele},
  journal = {ACM Transactions on Graphics},
  volume  = {36},
  number  = {6},
  pages   = {186:1--186:9},
  year    = {2017},
  publisher = {ACM},
  doi     = {10.1145/3130800.3130895},
  url     = {https://doi.org/10.1145/3130800.3130895},
  note    = {Proc. SIGGRAPH Asia 2017}
}

Built by Zhongshi Jiang — scaffold maps are core of later works: Bijective Projection in a Shell, Bichon high-order meshes, FaceMap saliency. scaffold-map

Website template based on the Nerfies project page. If you reuse their source code, please credit them appropriately.