Games101-系列课程笔记
Lecture 12 Geometry 3
本篇博客内容为Games-101系列课程的 Lecture 11 Geometry 2(Curves and Surfaces)内容,有兴趣的小伙伴可前往GAMES101官网下载相关内容。GAMES101官网
几何处理
- 几何细分(Mesh Subdivision):本质上是上采样过程
- 几何简化(Mesh Simplification):本质上是下采样过程
- 几何正则化(Mesh Regularization):网格正规化(让所有三角形都差不多)
几何细分
- 步骤
- 创造更多三角形(即更多顶点)
- 纠正所有顶点位置(包括原来的顶点和新顶点)
- Loop 细分
- 思想:对一个三角形,每一条边都取中点作为新创造的顶点,然后根据周围点的权重调整这个点的位置。
- 怎么调整点:
新顶点位置调整公式:P=3/8(A+B)+1/8(C+D)
旧顶点位置调整公式:Q=(1-n×u)×original_position+u×neighbor_position_sum
其中,n代表顶点的度,指的是与该顶点相连的线段数量。n=3时,u=3/16;n≠3时,u=3/(8n)
- Catmull-Clark细分法
- 原理:这是一种四边形网格细分法。首先,对每个子网格选择边上的中心点和面点,将四个中心点与面点相连。通过这种方法可以将所有非四边形面转化为四边形面,并且把非奇异点(度不为4的点)个数控制为初始非奇异点+非四边形面个数。图示如下:
- 怎么调整点:
Catmull-Clark细分法中的顶点分为三种(面心点、四边形边中心、线交叉点)。
- 原理:这是一种四边形网格细分法。首先,对每个子网格选择边上的中心点和面点,将四个中心点与面点相连。通过这种方法可以将所有非四边形面转化为四边形面,并且把非奇异点(度不为4的点)个数控制为初始非奇异点+非四边形面个数。图示如下:
几何简化
- 目标:减少网格数量,同时尽量不改变外轮廓形状。
- 方式:边坍缩(edge collapse)
- 步骤:
Step1:选择某一局部区域的网格
Step2:在空间中找一个点P,使这个点到这个局部区域内所有边的L2距离的平方和最小。
Step3:给每条边打分,分数为这条边和P之间的L2距离,将所有分数放入优先队列或者堆中。
Step4:找到L2距离最小的边E1,对这条边进行坍缩(L2距离可以表示坍缩后对原形状的影响程度,从最小L2距离开始,对原形状影响程度最小)
Step5:E1坍缩后,其他边的L2距离也发生变化,因此需要对其他边的L2距离进行重新计算。
Step6:重复Step4过程,直到所有边坍缩完毕。
阴影贴图(Shadow Mapping)
- 阴影是什么:阴影是能被观察者看到,但不能被光源看到的部分。
- 步骤:
Step1:首先探究光源能看到什么。在光源处放一个虚拟摄像机,对场景做一遍光栅化,不做着色,只记录看到的点的深度是多少(即深度图)
Step2:从观察者方向往场景看,将看到的每个点投影到Step1中深度图对应的位置。比较这个点到光源的实际深度和深度图上对应的深度是否一致,如果一致说明这个点通向光源的光路上没有被阻拦,那么这个点不是阴影,反之可以判断这个点是阴影。
- 存在的问题:
- 数值精度问题。Shadow Mapping中判断点到光源的实际深度和深度图上对应的深度是否一致,从实际角度来看不好判断,因为这两个值都是浮点数,判定两浮点数相等是很困难的事。解决方式:判断大小、设置偏差bias,判断实际深度是否大于记录深度加偏差之和。
- 只能做硬阴影。要注意硬阴影和软阴影的区别,见下图:
- 开销更大。Shadow Mapping要从光源和摄像机处各做一次渲染,开销更大。
- 阴影质量基于Shadow map的质量。Shadow map的质量越高,数值精度问题越不明显,则阴影质量越好。
参考
[1]. GAMES101_Lecture_12.pdf
[2]. Shirley P , Marschner S R . Fundamentals of Computer Graphics[M]. AK Peters, 2005.