目录
几何:
网格操作 : 几何图形处理概述
网格细分(Mesh Subdivision)
Loop细分曲面
具体做法
更新坐标位置具体做法
细分方法
两种方法不同的应用
网格简化(Mesh Simplification)
一种网格简化方法: 边坍缩
引入一个新概念: 二次误差度量(Quadric Error Metrics)
坍缩实际做法?
阴影
Shadow map
实际步骤
硬阴影Hard shadows和 软阴影soft shadows
第十二节课 : 几何 与 阴影
① 网格细分(第三头牛)
② 网格简化(第四头牛)
③ 网格正规化(第五头牛)
网格细分(Mesh Subdivision), 更多细节
网格简化(Mesh Simplification), 减少三角形顶点, 降低计算量
网格正规化 (Mesh Regularization), 方便着色相关的计算
在这里明显看到牛的耳朵丢失了部分(正规化不合格)
细分, 简化和正规化都是要保持原来的连接关系, 不能丢失原来的模型形状.
① 创建更多的三角形
② 调整顶点位置, 使其更加光滑.
① 通过分裂(取中点), 变成四个三角形
② 根据权重分配新的顶点位置
③ 产生新的坐标要和旧的坐标区分开.
① 新顶点(白点)更新:
离白点更近的AB, 权大*3/8, 而离白点更远的CD, 权小*1/8(这个系数3/8或者1/8, 是算法内部设定的)
加权平均算法, 使物体表面更平滑
② 旧顶点(白点)的更新 :
n :白点的度
u :和顶点的度有关的数
Update to(更新规则) : (1+n*u)*自身位置 + u *所连顶点位置和的平均
举个例子 :若n大,则说明更新点附近的三角形多,更多考虑附近三角形导致的更新; 若n小,则说明更新点附近的三角形少,更多考虑自身位置导致的更新.
① Loop 细分
先细分三角形, 后调整顶点位置
下图共做了两次细分
② Catmull-Clark 细分 :
一些定义 :
细分步骤:
1.在每个面上添加顶点
2.在每个边上添加中点
3.中点连接所有新顶点
引入了两个度为3的新顶点, 得到经过一次细分的图,如下:
问题如下:
经过了一次细分后, 现在有多少个奇异点呢?
答:4个
新顶点它们的度是多少?
答:3个 因为在三角形内创建顶点,而顶点要连接所在面的所有中点,在三角形中,自然连接了3条边.
还有多少个非四边形面?
答:没有 因为在三角形内新增了一个奇异点, 导致一个三角形被分成3个四边形面.
总结 : 在经过一次Catmull-Clark 细分后, 所有的三角形都变成了一个奇异点, 没有三角形了.
再次做Catmull-Clark 细分, 没有新的顶点(奇异点)加入, 因为已经没有非四边形面了, 而是顶点的位置在改变.
再次做细分:
Catmull-Clark 位置更新规则(四边形面) :
整体来说: 就是取周围点做加权平均操作.
Loop 曲面细分: 只用作三角形面
Catmull-Clark 曲面细分: 用作多种不同边的面
离远了看模型, 对于模型的细节要求不高(面数可以较少)
离近了看模型, 对于模型的细节要求较高(面数要较多)
但是从远到近, 或者从近到远有个面数的变化, 不希望别人看的出来.
(从左往右, 面数逐渐减少)
将一条边的两个顶点, 移到中点.
如何找到哪些顶点应该被坍缩?
对验证来说, 进行局部加权平均并不是一个好主意
二次误差:新的顶点应该与其先前相关的三角形平面的平方距离之和达到最小 (类似机器学习的L2距离)
先算出每个点的二次误差度量, 然后取所有点的二次误差度量中的最小值, 对其坍缩操作.然后对剩余的其它顶点做优先队列或者堆的更新, 然后再取最小值, 再更新(更新边的二次误差度量, 因为一些边会共享一个顶点, 更新了便会有其它边的移动), 类似于贪心算法
网格简化结果:
1.应用在点光源(方向光源)
2.主要思想: 判断点光源和摄像机是否能看见某个顶点, 如果点光源和摄像机能看见则说明无阴影, 只有摄像机看得见则有阴影.
3.只能渲染硬阴影hard shadows(非0即1的阴影),
1.记录从点光源看到场景的深度图.
2.将摄像机投影视线中的可见点放回光源
重新投影回光源后,来自光线和眼睛的深度是不一样的. 被阻挡了
以下面两个左边黑点为例, 两个都同时被摄像机和光源看见, 左边的黑点所记录的深度一致, 但是右边的记录深度不一致, 光源记录的是上面的灰点深度, 摄像机记录的是黑点深度.
相关词语翻译
light’s point-of-view : 从光源位置看向这个几何
eye’s point-of-view again : 再从摄像机位置看向几何
记录从光源位置看向几何的深度图
可视化阴影映射 :
我们从灯光的角度渲染场景,从灯光的角度看到的一切都是被照亮的,而我们看不到的一切都必须在阴影中
为什么shadow map 图这么脏?因为距离一般是浮点数, 在判断深度图距离来决策是否有阴影时, 会有数值精度问题
至今还有很多shadow map的问题
阴影质量取决于shadow map的分辨率(基于图像的技术的一般问题)
涉及浮点深度值的相等比较,是指尺度、偏差、公差等问题
出现软阴影, 一定是因为点光源有一定的大小
Umbra: 本影
Penumbra: 本影周围的半阴影