I've reimplemented the first half of our paper, "Consistent Volumetric Discretizations Inside Self-Intersecting Surfaces" [Sacht et al. 2013] as the untangle
function in my gptoolbox. Our paper expands on the idea of "Interference-Aware Geometric Modeling" [Harmon et al. 2011]: given a self-intersecting mesh, run a mean-curvature flow until all self-intersections disappear and then reverse the flow but activate collision detection and response. My new implementation uses the conformalized mean curvature flow of "Can Mean-Curvature Flow Be Made Non-Singular?" [Kazhdan et al. 2012] and then reverse the flow using el topo, "Robust Topological Operations for Dynamic Explicit Surfaces" [Brochu & Bridson 2009]. For the reverse steps, I'm simply filtering the reversed flow "velocities", then once returned to it's original state, I run some iterations of ARAP gradient descent (with collision detection and response via el topo) to restore the intrinsic shape of the mesh.
Here's the result on an example with a rather drastic self-intersection.
For simpler models with lots of little self-intersections (like an otherwise nice subdivision surface), this method works very well. Unlike meshfix
, this will not delete or remesh any part of the model.