目录
Mesh Operations: Geometry Processing
Mesh Subdivision (曲面细分)
增加了曲面的分辨率:
Mesh Simplification(曲面简化)
降低曲面分辨率,尽力保持曲面原有的几何形状。
Mesh Regularization(曲面正则化)
原始曲面上的三角形可能大小差异较大,这时我们可以通过曲面正则化来改善曲面的质量。
Subdivision(细分)
曲面细分并不仅仅是增加三角形的数量,在增加三角形的数量后,三角形的位置也会发生一些移动,使得曲面的结果更加光滑。
Loop Subdivision(Loop细分)
-
首先,将每个三角形分割成四个子三角形
-
根据权重,调整每个顶点的位置
将新的顶点和旧的顶点区分开,采用不同的规则来改变它们的位置。
如何来调整顶点位置呢?
对于新的顶点:
简单来说,找到周围四个点的位置进行加权平均。
对于旧的顶点:
简单来说,旧的顶点在更新时不仅仅取决于周围的顶点,同时还取决于自己原来的位置。
Loop Subdivision Result (Loop细分的结果)
Catmull-Clark Subdivision(General Mesh)
Loop细分只能用于三角网格,而对于一般的网格就不适用了。
就像下图中的,有三角形、四边形等,Catmull-Clark细分就可以很好的应用。
- 每条边都取中点
- 每个面也取一个中间的点
- 连接所有点
经过一次细分之后:
现在有多少奇异点?
每个三角形内部的点,经过一次细分后都是奇异点,原来是奇异点的点仍然是奇异点,和原来非四边形面的数量有关系。
它们的度都是多少?
每条边的中点的度为4,非四边形面中心的点的度为3,其余点度数保持不变。
还有多少非四边形面呢?
非四边形面全部消失了,每个非四边形面都会引入一个奇异点,然后变为一个四边形面。
Catmull-Clark细分方法中顶点更新方法:
Mesh Simplification(曲面简化)
目的:减少网格中三角形或四边形的数量,但保持原来的形状,从而提高程序的性能。
在不同的场景下选用不同的三角形数量:
Collapsing An Edge(边坍缩)
如何来度量通过简化造成的几何误差呢?
二次度量误差:找到一个新的位置,把点放在这里使得二次误差最小。
二次误差:一个点到与它相关联的面的距离的平方和。
算法的主要思想:
- 枚举每一条边,计算出坍缩这条边的二次误差度量。
- 贪心地选出一条最小的边。
这个问题是一个动态的问题,坍缩一条边会导致其它某些边的二次度量误差发生变化,我们需要更新其它边的二次度量误差。
二次度量误差曲面简化结果:
Shadow Mapping
Shadow Mapping是一种图像空间的算法:
在计算阴影时,不需要知道场景中的几何信息。
会产生走样现象。
关键思想:
一个不在阴影里的点,说明可以从摄像机看到这个点,光源也可以看到这个点。
经典的Shadow Mapping只能处理点光源,这种阴影通常有很明显的边界,一个点要么在阴影里,要么不在阴影里,这种阴影我们称它为硬阴影。
-
Render from Light,从光源看向场景,记录看到的每个点的深度,得到一副深度图.
-
Render from eye,从摄像机看向场景,将看到的点投影回光源成像的深度图中,比较一下二者的深度值,如果深度值相同说明这个点是可见的;否则,说明该点是不可见的。
一个复杂场景的阴影实例:
Visualizing Shadow Mapping(可视化Shadow Mapping)
将深度图的点投影回原来的位置,连一条线,这样我们就会发现一个现象,什么样的点是可以被看到的呢?
光源到该点的距离等于这个点的深度值。
Problems With Shadow Mapping(Shadow Mapping中存在的问题)
- 硬阴影(只能处理点光源)
- 质量取决于Shadow Map的分辨率
- 涉及浮点深度值的比较运算,意味着会产生误差。