Simplification
定义
简化和近似
-
simplification,approximation,decimation
-
把一个模型transform到另一个模型,更少的面、边、顶点
-
简化和近似通常被用户定义的一个质量标准(quality criteria)来控制
- 保曲率,curvature-preserved criteria
- 曲率抹除,curvature-removed criteria
简单的应用
- 调整数据集的复杂度
- 许多简化框架是迭代工作的,例如一次移除一个顶点,它们通常是可逆的。因此可以用于adaptive refinement,progressive transmission
- 可以在粗糙网格上做一些初始化,然后再应用到高分辨率的网格上,简化就是一种获得粗糙网格的思路
常见的简化思路
- vertex clustering algorithms, 原始顶点集合的子集
- incremental algorithms,原始顶点位置的加权
- resampling algorithms,全新的mesh
- mesh approximation algorithms,最小化定义好的error metric
顶点聚类
基础思路
- 对给定的object,把bounding space按照approximation tolerance划分为若干个cells
- 对每个cell,计算一个代表性的定点位置
- 经过聚类,原始面片就可能退化,网格也就化简了。
优点不足
- 退化后的网格可能不再是2-manifold,因为拓扑可能改变。当然这个缺点也可以看做是有点,因为这种方法可以改变模型的拓扑。比如一个模型有很多小空洞的时候,保留拓扑可能没法得到太好的化简结果。
- 顶点聚类的计算效率取决于mesh顶点到聚类的映射。对简单的uniform spatial grids,可以在线性时间内完成;
- 它能在全局上保证approximation tolerance。但是有时候发现它的退化结果依然是冗余的,实际上可以继续化简;
计算cluster representatives
- 选用cell的中心,或者它的相邻顶点的平均……
- 使用least-squares approximation。认为对一个小cell来说,里面的surface patch应该是piecewise flat的。使用quadric error metric (QEM)来优化。
Incremental decimation
基础思路
- 一次移除一个mesh vertex
- 每次移除的都是根据user-specified criteria选择的最佳候选点
- 每次移除一个顶点后,相关的quality criteria要重新评估一下
- 为了确保候选点的顺序,一般使用堆这种数据结构
Topological operations
-
Vertex removal/ vertex insertion
-
Edge collapse / vertex split
-
Half-edge collapse / vertex split
-
注意要避免illegal collapse (非流形)
-
Vertex contraction,这种操作使顶点-1,但保持三角形的数目。但是可能改变拓扑结构,因此需要基于能表征非流形网格的数据结构。
距离度量
- 基本思路是,对化简后网格的每个三角形 t i t_i ti,对应原始网格的一个sub-patch S i \mathcal{S}_i Si。距离度量计算每个三角形和对应sub-patch的每个顶点或面片的距离。根据应用,可以使用平均距离,最大距离等。
- 具体方法
- 误差累积
- 误差二次型(error quadrics), QEM
- Hausdorff距离
光顺度量
- 距离度量决定了一厨操作是否合法;光顺度量则决定了移除候选点的顺序。
- 最简单的方法就是也使用距离度量决定顺序。
- 也可以使用别的方式,让移除后的三角形光滑、等距等等
Variational shape approximation (VSA)
- VSA对特征和对称性十分敏感,可以生成各向同性的网格。
- Lloyd’s clustering algorithm
- geometry partitioning
- plane fitting
- Greedy algorithm