Overview
Click on the menu bar items to navigate to chapters
Click here for PDF version
VU Fundamentals of
Geometry Processing
Mesh Decimation
Julian Rakuschek
26.03.2026
Given a highly dense mesh how can we reduce
the amount of triangles while preserving features?
Given $\mathcal{M} = (\mathcal{V}, \mathcal{F})$ find $\mathcal{M}' = (\mathcal{V}', \mathcal{F}')$ s.t.
$\mathcal{M}$
$\mathcal{M}'$
Divide space around mesh into cells, $\epsilon \times \epsilon$, where $\epsilon$ is the approximation tolerance.
[M. Pauly, "Mesh Decimation", 2006]
Compute the cell representative $p$ for each cell cluster: Assign all vertices $p_1, \dots, p_k$, within this cell to $p$.
Then connect $p$ and $x$ if $p_i \in {p_1, \dots, p_k}$ was connected to any $x_i \in {x_1, \dots, x_l}$
Many cells can become degenerate faces.
In the final step we therefore remove any degenerate faces.
There are several options to position the new cell reprsentative $p$:
Squared distance of a point $p$ to a plane $q = (x, n)$ can be computed as
\[ \text{dist}(p, q)^2 = (n^T p - n^T x)^2 \]Where $x$ is an arbitrary vertex on the plane and n is the unit normal vector of this plane.
Using homogeneous coordinates, $p = (p, 1)$ and $n = (n, −n^T x)$ this can expressed more simply as
\[ \text{dist}(p, q)^2 = (n^T p)^2 = p^T (nn^T)p =: p^T Q p \]Squared distance of a point $p$ to a plane $q = (x, n)$
$p = (x,y,z,1)^T, n=(a,b,c,d)^T$, where $d = n^T x$
\[ \mathrm{dist}(p, q)^2 = (n^T p)^2 = p^T (n n^T) p \; =:\; p^T Q p \] \[ Q = \begin{bmatrix} a^2 & ab & ac & ad \\ ab & b^2 & bc & bd \\ ac & bc & c^2 & cd \\ ad & bd & cd & d^2 \end{bmatrix} \]The sum of the quadratic distances to all supporting planes \(q_i\) of all triangles \(t_i\) within a cell is given by
\[ E(x) = \sum_{t_i} \mathrm{dist}(p, q_i)^2 = \sum_{t_i} p^T Q_i p = p^T \left( \sum_{t_i} Q_i \right) p \;=:\; p^T Q p \]The optimal point \(p\) that minimizes the error is computed as the solution of the least-squares system:
\[ \left( \sum_i n_i n_i^T \right) p = \sum_i n_i \left( n_i^T x_i \right) \] \[ Ap = n \]
Remove one vertex at a time as long as
\[ ||\mathcal{M} - \mathcal{M}'|| < \epsilon \]In each step the best candidate for removal is determined.
Each of the listed decimation operators is reversible.
[Botsch, Mario et al. “Polygon Mesh Processing.” (2010).]
Coming back to this: How can we triangulate the hole?
We strongly prefer convex holes.
In a planar convex polygon, all internal angles are at most 180°. Convex polygons can be easily triangulated from any vertex.
If a polygon is non-convex, that is there are internal angles > 180°, then extra care has to be taken to avoid creating overlaps and self-intersections.
green edges are safe, red edges cause problems
Checking 3D polygons for convexity:
The m-sided hole which appears in a mesh by removing a vertex usually does not lie exactly in a 2D plane, so the notion of convexity does not make sense. Simple solution: Analyse 2D image of 3D hole.
We need to find a direction from which we look at the hole. For this we compute the average normal vector of all adjacent faces of a vertex.
\[ n_{avg} = \frac{\sum_i A_i n_i}{\sum_i A_i} \]Where $A_i$ is the area of each adjacent face with $n_i$ being the normal. This is an area-weighted average.
Suppose the cyclic ordering of vertices $v_0, v_1, \dots, v_{m-1}$ of a planar $m$-gon is such that the polygon is traversed counter-clockwise.
Then the internal angle $\alpha_i$ is computed from
\[ \sin \textcolor{purple}{\alpha_i} = \sin(180° - \textcolor{purple}{\alpha_i}) = \left< \left( \left( \textcolor{blue}{\frac{v_i - v_{i-i}}{|v_i - v_{i-i}|}} \right) \times \left( \textcolor{red}{\frac{v_{i+1} - v_i}{|v_{i+1} - v_i|}} \right) \right), \frac{n}{|n|} \right> \]
where the normal vector $n$ is pointing towards the eye of the viewer.
Collapsing an edge $(p, q)$ is a valid operation if and only if the following two criteria hold [Hoppe et al. 93]:
If both $p$ and $q$ are boundary vertices, then the edge $(p, q)$ has to be a boundary edge.
For all vertices $r$ incident to both $p$ and $q$ there has to be a triangle $(p, q, r)$. In other words, the intersection of the one-rings of $p$ and $q$ consists of vertices opposite the edge $(p, q)$ only.
How do we find the best removal candidate?
Incremental mesh decimation ranks all removal operations. Ranking may be defined by
Re-evaluation after every vertex removal is expensive
Better:
Greedy Reduction
For each region:
Repeat until no further reduction possible:
With Error Control
For each region:
Repeat until no further reduction possible:
The error control stops the decimation when the quality becomes too bad.
Formula for $D$ can be found in the assignment sheet.
The distance to the average plane is a local error metric: Measures the distance between a face and a subpatch.
Remember: We want to remove vertices whose absence is barely noticeable. Removing the spike would remove an important feature that can make the difference in ML models (for example).
The Hausdorff Distance — a global error metric
This distance measure is defined to be the maximum minimum distance. If we have two sets $A$ and $B$, then $H(A,B)$ is found by computing the minimum distance $d(a,B)$ for each point $a \in A$ and then taking the maximum of those values: \[ H(A,B) = \max_{a \in A} \min_{b \in B} \lVert a - b \rVert . \] Notice that, in general, $H(A,B) \neq H(B,A)$. The symmetric Hausdorff distance is defined as the maximum of both values: \[ d_H(A,B) = \max\big(H(A,B),\, H(B,A)\big). \]
Computing the Hausdorff distance for a mesh:
Vertex Clustering
Iterative Decimation