模型三角形数量增加
- 增加模型三角形数量目的是使模型表面更加光滑
- 调整三角形的位置
路普细分Loop Subdivis
- 一个三角形拆成4个
- loop不是循环细分
如何调整细分后的三角形的位置?(为了让细分后的平面变平滑)
新的细分点
- 在路普细分中,假定两个相邻三角形中下图白色点为相邻边某一个细分点
- A和B为相邻边的两个顶点,C和D表示为不相邻的两个顶点
- 该细分点的坐标为:3/8(A+B)+1/8(C+D)
原来的点
- 白色圆点表示旧的细分点,n表示与白色圆点相关的旧的细分线数量(在这里=6)。
- u表示自身权重
Catmull-Clark细分
- 适用于不规则的网格(有三角形,有四边形)
- Non-quad face (非四边形的网格)
- Extraordinary vertex 奇异点 (与该点相连的边数不为4的点为奇异点)
细分操作流程如下
- 取Non-quad face 网格的每条边的中心点
- 取Non-quad face 网格平面的中心点,并连接 该点与每条边中心点
- 新添加的两个平面中心也是奇异点
- 三角形面变成了3个四边形面
如何更新老的平面中心点和老的边中心点
模型三角形数量减少
减少模型顶点数的效果展示
- 相关知识:mipmap
- 30000个三角形和3000个三角形模型效果其实差不多,而在距离摄像机较远时,300个三角形的模型也能跟前两个有相同展示效果
- 不同距离选择不同的模型有效提升性能
边坍缩(Collapsing An Edge)
- 曲面简化所利用的一个方法叫做边坍缩,如上图所示就是将一条边的两个顶点合成为一个顶点。但随之而来的问题就是,曲面简化需要尽量保持原本模型的shape,如何坍缩一条边,或者说坍缩哪一条边能够使得原模型样貌被改变的程度最小,这就是曲面简化的关键所在。
- 为此引入一个度量,即二次误差度量(Quadric Error Metrics)
二次误差度量
- 即坍缩之后蓝色新顶点所在的位置与原来各个平面的垂直距离之和。如果能够使得这个误差最小那么对整个模型样貌修改一定程度上也会较小。
- 二次误差:新顶点应最小化其与先前相关三角形平面的平方距离(L2距离)之和
那么其实到这整个曲面简化的算法流程已经比较清晰了
- 为模型每条边赋值,其值为坍缩这条边之后,代替两个老顶点的新顶点所能得到的最小二次误差度量
- 选取权值最小的边做坍缩,新顶点位置为原来计算得出使得二次误差最小的位置
- 坍缩完之后,与之相连其他的边的位置会改动,更新这些边的权值
- 重复上述步骤,直到到达终止条件 这其实是一个标准的贪心算法,可能到不了全局最优解,但事实证明最终的结果依然相当不错