Games101课程笔记_lecture12_几何(网格细分)+Shodow map
Games101课程笔记_lecture12_几何(网格细分)+Shodow map
1 网格细分mesh subdivision
1 概念
引入跟多的三角形,
细分两部操作:分出更多的三角形;形状发生变化
2 loop subdivison
不是循环细分,与循环没有任何关系,发明者是loop。
新的顶点的操作:对周围的顶点加权平均得到白点
如何更新旧的顶点:
自己本身就是旧的顶点,一部分保留自己的位置,一部分愿意信息周围的顶点的平均。通过加权的方式来得到
看这个旧的顶点连接的周围的三角形的个数,少就是与自己关系大,少了旧得到自己的关系小。
可以看到loop细分,
先细分,再调整
3 catmull-Clark Subdivison细分
网格有三角形,四边形,loop细分就不可以了。而这个细分是可以做四边行的。
奇异点:度不为4的点。
步骤如下:
经过一次细分后,还有几个奇异点呢?
现在有四个奇异点。
第一次细分后非四边形面都会变成奇异点。以后奇异点就不会增加了
再细分后:
通过平均的方式让整个曲面变的平滑
新的点:
旧 的点:
2 网格简化
1 概念
目的是减少三角形的数量,但是同时要维持基本的形状。
在什么场合下使用不同的三角形数量是有讲究的。
不同场景下选用不同的三角形。
第一和mipmap有关,是在图像层次结构上的。
第二和几何的层次结构是很难做的
不同三角形数量之间的过渡是非常难的。
2 边坍缩
如下:求平均好结果不对
二次误差度量:二次误差,要求的点到相关点的距离平方和最小。
坍缩一条边后其他的边二次项误差也会受到影响。
用优先队列和堆的数据结构来做这个。
接近平面的地方坍缩的会多点,
二次多项式误差在这这里很有意义。
3 网格正则化
增加点,调整点的步骤理解清楚就没有问题了。
4 Shadows Map
着色是局部的现象,没有考虑其他物体的光线和遮挡,着色解决不了阴影。
1 介绍
图像层次的算法;
点不在阴影里:能被相机看到,也可以被光源看到。
硬阴影:非0即1;
2 实现
第一步:从光源会看到什么?生成一幅图
记录看到的任意点的深度值。
光源作为一个虚拟相机,
第二步:从眼睛出发。
眼睛看到的那个点,映射到光源那个对应的那个点,对比两者之间的深度值的关系
实际的相机出发,渲染的场景重新投影会光源,看那个投影的深度值是否一致。
例子:
第一步:
光源看到的:
记录的是深度:好像真正做了一次光栅化一样。
第二步,从相机看
结果有点脏,
是否相等比较困难,因为值是浮点数,不好相等,距离判断大小,实际的距离只要大于最近看的最近点的距离,就可以了。但是有些数值确实太接近了。
有人提出引入一个误差,那个距离再加上这个偏差。
shadow map的分辨率,会引起锯齿。
注意:要比较的是光源到那个点的深度。
3 问题
缺点:
- 相当于渲染两遍。
- 数值精度导致的问题
- 硬阴影
- map的分辨率
但还是3D游戏的主流技术。
下面的那幅图中黑色的部分是阴影-本影
灰色的部分是半影区
软影-本影到半影区的过渡。
点光源不会出现软阴影的。
5 总结
光栅化:
几何:
下面的课主要讲光线跟踪:
光栅化有很多线性并不能做,而光线跟踪就是可以的。
自上而下的把握是学校图形学的本质。