games(101)-Surfaces
Surfaces(Lectures 11~12)
内容:
- Bezier surfaces
- Bicubic Bézier Surface Patch
- Mesh Operations:Geometry Processing
- Mesh Subdivision
- Loop Subdivision
- Catmull-Clark Subdivision (General Mesh)
- Mesh Smplication
- Mesh Subdivision
Bézier surfaces
将贝塞尔曲线拓展便可以得到贝塞尔曲面。
Bicubic Bézier Surface Patch
三次Bézier曲面的形成。
- 首先定义4×4的控制点网格
- 控制点网格便可形成四条贝塞尔曲线,如图
- 得到的四条贝塞尔曲线,取同样的时间t,得到四个不同点,我们将这四个点看成另一条贝塞尔曲线的控制点,又可以得到一条贝塞尔曲线
- 取遍t 便可以得到贝塞尔曲面
-
两个方向上双线性插值
-
忽略了一些问题,如两个贝塞尔曲面如何完全的拼接
- 给出时间u得到四个蓝色的点、在给时间v就可以得到一个贝塞尔曲面上的一个黑色的点
- 给出范围在0到1的uv便可得到贝塞尔曲面上的任何一个点
- 参数映射,也就是显式表示
Mesh Operations:Geometry Processing
表示空间中的几何面,用到最普遍的还是用到Mesh 包括了三角形网格,四边形网格。用到这些网格表示几何面会有一定的操作,即几何处理。
- 1.网格细分(更多的三角形得到更多的细节)
- 2.网格简化(更小的面能够简化存储,损失在控制范围内)
- 3.网格的正规化,基本上三角形形状大小都差不多,不会出现特别夸张的三角(有些会对渲染不便)。
Mesh Subdivision
Loop Subdivision
- Loop细分是一种专门针对三角形面的细分方法
- 步骤:
-
- 生成更多的三角形(顶点)
Loop细分的方式是:找出三角形三条边的中点,将其连起来,便从一个三角形变成了四个三角形。
-
- 调整顶点的位置使整个图形变得更加平滑。
对于新产生的顶点,考虑普遍情况,这个新点所在的面不再边界上,被两个三角形共用。LOOp细分规定新顶点的位置为:
本质上是一种加权平均,进而使得整体图形变得更加平滑。
对于原先的顶点来说,根据顶点的度数,带入Loop细分的算法公式。
最终效果:
Catmull-Clark Subdivision
Loop细分只适用与三角形网格,但是一般的情况,Catmull-Clark细分更为适用,可用作各种不同的面(四边形面、非四边形边为例)
首先定义:
- 四边形面、非四边形面
- 奇异点:度不为4的点
步骤:
- 细分策略:
找出网格每个边的中点以及网格中心的一个点,并将其连接起来
细分一次发现:
- 新产生的点的度与所在面的边数有关
- 非四边形面会产生一个奇异点
- 非四边形面消失
- 再细分一次因为没有非四边形面了,所以不会再产生新的奇异点
顶点位置的变换: 分为三类讨论。
1.新的面中间的点的更新方法。
2.新的在边的中心的点的更新方法。
3.以前的老的点, 用新面中心的点和边中心的点以及自身原来的位置做某种平均的更新。
也是一种平均使得平滑过度、与图像的模糊操作差不多
效果:
Mesh Smplication
不同的情况下会用不同复杂程度的几何模型,例如远近,计算性能等。
一种网格简化方法:边坍缩
哪些边坍缩了会引起几何的较大的改变,哪些则只会引起微小的改变。因此引入二次误差度量(Quadric Error Metrics)。
二次度量误差:蓝色的点(坍缩之后的点)到原本的面的距离的平方和,平方和最小,对应的形状改变就越小。
优化过程:不知道点在哪,优化位置找二次误差最小。
简化算法:
- 整个模型的边赋权重,权值为能得到的小二次度量误差
- 坍缩权重最小的边(位置为二次度量误差最小对应的点)
- 坍缩一次其他边的二次度量误差也会变,更新其他边的二次度量误差
- 重复操作
- 对应的数据结构--堆
- 不断对局部做最优解达到对全局的最优解---贪心算法
- 可能与不是实际上的最优解,但是效果不错
对应的效果:
(牛脸位置较平、二次度量误差小,坍塌的较多,因此形成较大的三角形)
games101的几何内容到此为止。
reference:
[1] GAMES101-现代计算机图形学入门-闫令琪
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!