以下是三角网格减面算法及其代表库/工具的详细分类,涵盖经典算法和现代实现:
1. 顶点聚类(Vertex Clustering)
- 原理:将网格空间划分为体素栅格,合并每个栅格内的顶点。
- 特点:速度快,适合大规模网格,但细节丢失明显。
- 代表库:
- Open3D:
simplify_vertex_clustering
方法 - CGAL:
CGAL::Surface_mesh_simplification::SMS::edge_collapse
(支持聚类预处理)
- Open3D:
2. 边折叠(Edge Collapse)
(1) 二次误差度量(QEM)
- 原理:通过最小化几何误差的二次形式确定最优折叠顺序。
- 代表库:
- MeshLab:
Quadric Edge Collapse Decimation
(业界标准实现) - CGAL:
CGAL::Surface_mesh_simplification::Edge_collapse
(支持QEM) - VTK:
vtkQuadricDecimation
- libigl:
igl::decimate
(基于QEM的简化)
- MeshLab:
(2) 其他边折叠变体
- Blender:
Decimate Modifier
(支持比例/角度阈值优化) - Fast-Quadric-Mesh-Simplification(GitHub独立库,轻量级QEM实现)
3. 顶点删除(Vertex Removal)
- 原理:删除顶点后重新三角化邻域(如Delaunay三角化)。
- 代表库:
- CGAL:
CGAL::remove_vertices()
+ 局部重网格化 - TetGen:适合四面体网格的顶点删除
- CGAL:
4. 面收缩(Face Contraction)
- 原理:将三角形面收缩为点,合并相邻面。
- 代表库:
- VCGlib(MeshLab底层库):
vcg::tri::Decimater
- VCGlib(MeshLab底层库):
5. 基于重新网格化(Remeshing)
- 原理:先均匀/自适应重网格化,再简化。
- 代表库:
- Instant Meshes(开源工具):基于场引导的重网格化+简化
- libigl:
igl::upsample
+igl::decimate
组合流程
6. 基于细分逆操作(Subdivision-Based)
- 原理:逆向应用细分曲面规则生成低模。
- 代表库:
- OpenSubdiv(Pixar):支持细分曲面逆向简化
- Maya/Blender:内置细分曲面修改器的逆向操作
7. 基于深度学习
- 原理:神经网络预测简化策略。
- 代表库:
- MeshCNN(GitHub):图卷积网络驱动的边折叠
- NeuralMeshSimplifier(论文代码实现)
8. 其他特殊方法
- 拓扑优化:
- Cork(布尔运算库):保持孔洞结构的简化
- 视觉感知简化:
- Hausdorff Distance 工具包:基于视觉误差度量
综合工具推荐
- MeshLab(开源):集成QEM、聚类、重网格化等多种算法
- CGAL(C++库):提供最全面的简化API(需编程调用)
- Blender(3D软件):内置交互式简化修改器
- Open3D(Python/C++):轻量级顶点聚类和QEM实现
选择建议
- 快速简化:顶点聚类(Open3D)
- 高质量简化:QEM(MeshLab/CGAL)
- 编程集成:CGAL/libigl
- 实时应用:Fast-Quadric-Mesh-Simplification(单文件库)
大部分库提供开源代码,可直接在GitHub搜索对应名称获取。实际应用中常需组合多种算法(如先重网格化再QEM简化)以达到最佳效果。