Lecture12: Geometry3 (and Shadow Mapping)
网格操作
- 网格操作
- 网格(三角形面)细分
- 网格简化
- 网格正则化
- 网格细分
- 在位移贴图时提到!
- 细分分为两步:
- 1:引入更多三角形
- 2:调整顶点的位置
- 以Loop细分(发明这个算法的哥们姓Loop)为例:
- 三角形一拆四
- 把顶点区分为新老两类,分别以两种规则改变他们的位置
- 对于新顶点:
- 对于老顶点(下图中n是顶点的度):
- 对于新顶点:
- Catmull-Clark Subdivision (General Mesh):另一种细分方法
- loop细分要求都是三角形面,而此方法可以应用于一般情况
- Non-quad face:非四边形面
- Extraordinary vertex(奇异点):degree != 4的点
- 一步细分,然后调整位置
- 经过一次细分后,多了两个度为3的奇异点,不再有非四边形面,但奇异点数目也不会再增加
- 好像每个非四边形面都变成了一个奇异点
- 具体的点如何更新区分为三类:
- 新的【面中点,边中点】,老的点
- 新的【面中点,边中点】,老的点
- 一个应用曲面细分技术做的动画短片
- 网格简化
- 怎样做网格简化?
- 某一种方法:边坍缩,坍缩哪些边呢?
- 二次误差度量
- 这个点放置的位置使和他相关联面的平方和距离最小
- 这个点放置的位置使和他相关联面的平方和距离最小
- 每一条边都算二次度量误差,从小的开始做坍缩
- 但坍缩一条边会影响其他边的二次度量误差
- 所以得更新受影响的边,用一种数据结构:堆(优先队列)
- 当前是个贪心算法
- 但坍缩一条边会影响其他边的二次度量误差
- 怎样做网格简化?
之前遗漏的话题:Shadow Mapping
- 着色是local的
- Shadow mapping解决了这一问题!
- 但会产生走样
- 不需要知道场景的几何信息
- 经典的shadow mapping只能处理点光源的阴影(硬阴影)
- 重要的思想:
- 不在阴影里的点,光源和摄像机都能看见
- 第一步:从光源看向场景,生成一张深度图
- 第二部:从摄像机看向场景,把看到的每一点投影回光源,知道这点记录在深度图的哪一个像素上得到一个深度值,再计算这点到光源的深度值,如果这两个值一致,说明此点也可以被光源看到,否则就不行!
- 再走一遍:
- shadow mapping 存在的问题,比如上图中,判断两个深度值是否“一致”,对此的一些办法(但是无法根治):
- 干脆只看大于
- 大于且大于某个bias数量
- shadow map 分辨率的限制,可能导致走样,影响阴影质量
- shadow mapping开销大,要渲染两边
- 但无论如何 shadow mapping 还是很广泛
- 软阴影(光源得有大小)
- shadow mapping 存在的问题,比如上图中,判断两个深度值是否“一致”,对此的一些办法(但是无法根治):
- 硬阴影和软阴影
- 硬阴影:点光源
- 软阴影:非点光源(光源有一定的大小),日全食与日偏食
- 把握课程内容
- GAMES101笔记告一段落