Sven D. Wagner
TU Dortmund
Astrid Bunge
AutoForm Engineering
Mario Botsch
TU Dortmund
Why does the parametrization and hole filling fail?
Short answer: Mesh quality! What’s that exactly? 🤔
Needles
Can result in unstable Laplacians 😢
Caps
Can result in inaccurate Laplacians 😢
🛠️ Fix: Small changes in implementation 🛠️
Robustness of cotangent Laplacian majorly depends on implementation 🤔
First goal: Compare the implementations of the regular cotangent Laplacian
Chosen Libraries
\[\cot(\alpha_i) = \frac{\cos(\alpha_i)}{\sin(\alpha_i)}\]
\[= \frac{\langle \vec e_{ij}, \vec e_{ik} \rangle}{2|t_{ijk}|}\]
\[= \frac{||\vec e_{ij}||^2 + ||\vec e_{ik}||^2 - ||\vec e_{jk}||^2}{4|t_{ijk}|}\]
Trigonometric
Get corner angles \(\to\) Apply trigonometric functions to get cotangent
CinoLib, Geogram, OpenMesh, and VCGLib
Extrinsic
Calculate cotangent using formulas based on edge vectors
CGAL and Geometry-Central
Intrinsic
Calculate cotangent using formulas based on edge lengths
libigl and PMP
Stability Trick (Optional)
Ignore cotangent weights of triangles with zero area
CGAL and PMP
←
Must be good then, right? 🤔
Isolated
Banded
Clustered
Banded (Spheres)
❗ Disclaimer: These meshes have really bad mesh quality ❗
But similar to mesh quality in the wild
Poisson Reconstruction, Marching Cubes, Thingi10k, …
Trigonometric
<!-- { "data": {
"datasets": [
{
"backgroundColor": "#84b819ff"
},
{
"backgroundColor": "#f5631fff"
}
] },
"options": {
"plugins": {
"legend": {
"display": true
},
"tooltip": {
"enabled": false
}
},
"x": {
"ticks": {
"font": {
"size": 16
}
}
},
"y" : {
"ticks": {
"format": {
"style": "percent",
"minimumFractionDigits": 0,
"maximumFractionDigits": 0
}
}
}
}
} -->
Geogram, OpenMesh, VCGLib, CinoLib
Success, 0.088, 0.099, 0.097, 0.588
Fail, 0.912, 0.901, 0.903, 0.412
Intrinsic
<!-- { "data": {
"datasets": [
{
"backgroundColor": "#84b819ff"
},
{
"backgroundColor": "#f5631fff"
}
] },
"options": {
"plugins": {
"legend": {
"display": false
},
"tooltip": {
"enabled": false
}
},
"x": {
"ticks": {
"font": {
"size": 16
}
}
},
"y" : {
"ticks": {
"format": {
"style": "percent",
"minimumFractionDigits": 0,
"maximumFractionDigits": 0
}
}
}
}
} -->
libigl, PMP
Success, 0.312, 0.467
Fail, 0.688, 0.533
Extrinsic
<!-- { "data": {
"datasets": [
{
"backgroundColor": "#84b819ff"
},
{
"backgroundColor": "#f5631fff"
}
] },
"options": {
"plugins": {
"legend": {
"display": false
},
"tooltip": {
"enabled": false
}
},
"x": {
"ticks": {
"font": {
"size": 16
}
}
},
"y" : {
"ticks": {
"format": {
"style": "percent",
"minimumFractionDigits": 0,
"maximumFractionDigits": 0
}
}
}
}
} -->
GC, CGAL
Success, 0.484, 0.549
Fail, 0.516, 0.451
So, just don’t use trigonometry and use the stability trick? 🤔
Well… 🫤
Can we maybe modify the cotangent Laplacian itself? 🤔
Degenerate triangles are edge cases of triangle inequality
Triangle inequality should hold with significant inequality: \[\norm{\mathbf e_{ij}} + \norm{\mathbf e_{ik}} > \norm{\mathbf e_{jk}} + \delta\]
Calculate minimum edge length increase \(\varepsilon > 0\) necessary to satisfy this for all triangles
We want clamping that only depends on individual triangle shapes
Modify TFEM for scaling-invariance and more versatility
<!-- { "data": {
"datasets": [
{
"backgroundColor": "#84b819ff"
},
{
"backgroundColor": "#f5631fff"
}
] },
"options": {
"plugins": {
"legend": {
"display": false
},
"tooltip": {
"enabled": false
}
},
"x": {
"ticks": {
"font": {
"size": 20
}
}
},
"y" : {
"min": 0.9,
"max": 1,
"ticks": {
"format": {
"style": "percent",
"minimumFractionDigits": 0,
"maximumFractionDigits": 0
}
}
}
}
} -->
TFEM, iDT + Mollification, Mollification, D-TFEM
Success, 0.951, 0.976, 0.999, 1
Fail, 0.049, 0.024, 0.001, 0
D-TFEM works in every case! 👍
iDT and Mollification also quite robust, but only intrinsic differential operators