图形学笔记 - 4. 几何 -网格操作和阴影映射
文章目录
- 网格操作:几何处理
- 细分
- Loop细分
- Catmull-Clark细分(一般网格)
- 网格简化
- 阴影 Shadows
- 可视化阴影映射
- 阴影映射
- 阴影贴图的问题
网格操作:几何处理
- 网格细分
- 网格简化
- 网格正则化
网格细分(上采样)
网格简化(下采样)
网格正则化(相同的 # 三角形)
调整样本分布以提高质量
细分
Loop细分
三角形网格的常用细分规则
首先,创建更多的三角形(顶点)
第二,调整他们的位置
把每个三角形分成四个
根据权重分配新的顶点位置
- 新 / 旧顶点更新不同
更新
对于新顶点(白点为例)
对于旧顶点(例如这里的 6 度顶点):(白点)
结果:
Catmull-Clark细分(一般网格)
奇异点:度不为4
每个细分步骤:
- 在每个面添加顶点
- 在每条边缘添加中点
- 连接所有新顶点
一次细分:有多少个奇异点?它们的度是多少?有多少个非四边形面?
非四边形消失
再做下去奇异点数不再增加
FYI:Catmull-Clark 顶点更新规则(四网格)
收敛:整体形状和折痕
Subdivision in Action (Pixar’s “Geri’s Game”)
网格简化
目标:减少网格元素的数量
同时保持整体造型
边坍缩
假设我们使用边坍缩来简化网格
二次误差度量Quadric Error Metrics
- 简化引入了多少几何误差?
- 对顶点进行局部平均不是一个好主意
- 二次误差:新顶点应使其到先前相关三角形平面的平方距离之和(L2 距离)最小化!
边坍缩的二次误差
- 坍缩一个边需要多少代价?
- 想法:计算边中点,测量二次误差
- 更好的主意:选择最小化二次误差的点
- 更多详情:Garland&Heckbert 1997
通过二次误差简化
迭代坍缩边
哪些边?使用二次误差度量分配分数 - 到曲面的近似距离作为到包含三角形的平面的距离之和
- 以最小分数迭代折叠边缘
- 贪婪的算法… 伟大的结果!
问题:其他边跟着变,有影响
二次误差网格简化:
阴影 Shadows
如何使用光栅化绘制阴影?
阴影映射
一种图像空间算法
- 阴影计算期间不了解场景的几何形状
- 必须处理走样现象
关键思想:不在阴影中的点必须同时被光线和相机看到
Pass 1:从光渲染
来自光源的深度图像
Pass 2A:从眼睛渲染
来自眼睛的标准图像(带深度)
PASS 2B:投射到光
将眼睛视图中的可见点投影回光源
可视化阴影映射
-
一个带有阴影的相当复杂的场景
-
比较有阴影和没有阴影的情况
-
灯光视角下的景象
-
从光线的角度来看,深度buffer
-
比较distance(light, shading point)与阴影映射
绿色表示阴影图上的distance(light, shading point)≈深度
非绿色是阴影应该出现的地方 -
带阴影的场景
阴影映射
众所周知的渲染技术
早期动画的基本阴影技术(小故事等)以及每一款3D电子游戏
阴影贴图的问题
- 硬阴影(仅限点光源)
- 质量取决于阴影贴图的分辨率(基于图像的技术的一般问题)
- 涉及相等比较的浮点深度值意味着尺度、偏差、容差等问题
硬阴影vs软阴影