网格细分(增加三角形数量)

引入更多的三角形
分出更多三角形,改变三角形的位置使得形状更加光滑

Loop Subdivision Loop细分
- 将原三角形分成四个三角形(连接三个边的中点)
- 改变三角形的顶点位置
- 区分新顶点和老顶点
- 两种不同的顶点分别按照不同的规则改变位置

如何调整位置?
更新新的顶点位置: 非边界的新顶点一定会被两个三角形共享.找到共享的两个三角形,根据以下方式调整:

更新旧的顶点位置:
相信一部分周围老的结点,相信一部分自己的位置
n:顶点的度(连接边的数量)

Loop细分仅限于三角形网格
Catmull-Clark Subdivision
定义四边形面和非四边形面
定义奇异点(度!=4)

细分步骤
将面的里面取一个点,边上取一个点,将它们连起来

细分之后的问题: 还有多少个奇异点? 原先有多少个非四边形面就增加多少个奇异点. 它们的度是多少? 新的奇异点的度为3(原因是连接了三角形的三条边),旧的不变 还有多少非四边形面? 所有非四边形面都消失了
第一次细分之后,就没有非四边形面了,也就没有新的奇异点了.
如何调整点的位置?


网格简化

不同情况下选用不同复杂的模型.

如何计算?
Collapsing An Edge 边坍缩
把三角形的三个顶点捏到一个点上.

Quadratic Error Metrics 二次误差度量
解决捏点后点的位置
最优点:该点到其他面的平方和距离最小.

我们可以假设所有的边都要进行边坍缩,且都能找到与其他面平方和距离最小的位置.那么我们按照平方和距离进行排序,优先坍缩平方和距离小的边.
存在的问题:当我们坍缩一个边的时候,其他的边也要跟着改变,那么其他变的二次度量误差也会改变,就不能按照二次度量误差从小到大的顺序进行坍缩.
解决方式:通过堆结构,在进行一次坍缩的时候,把被影响的边再次计算二次度量误差,再重新排序.

网格正则化
正三角形化

阴影 Shadows
Shadow mapping
只能处理点光源.
会产生走样现象
主要思想:不在阴影里说明摄像机和光源都能看到这个点.生成的是硬阴影

-
虚拟一个摄像机在点光源上进行光栅化,记录看到的场景的深度,不需要着色

-
在眼睛(摄像机)看向场景,看到的点如果反射到光源的深度和step1记录的深度一致,那就说明该点可见

距离是浮点数,存在精度问题.
shadow-map(虚拟摄像机产生的阴影信息)本身有分辨率,分辨率如何取?

存在的问题

硬阴影vs软阴影
