第五章:阴影(Shadows)
硬阴影与软阴影(Hard and Soft Shadows)
- 点光源产生硬边阴影,而区域光源则产生软边阴影。
渲染阴影(Rendering Shadows)
点光源阴影(Point Light Shadows)
- 绘制阴影时需要提升阴影以上表面(Lifting the shadow above the surface),并使用模板(Stencil)改进平面投影阴影。
阴影纹理(Shadow Texture)
- 计算UV坐标的方法是什么?
阴影体积(Shadow Volume)
- 使用阴影体积渲染阴影包括两个阶段:
- 计算由光源和一组遮挡物形成的阴影体积。每个三角形都会产生一个阴影体积。
- 检查点是否在阴影体积内/外。
- 内部:处于阴影中
- 外部:被光源照亮
背面剔除(Back Face Culling)
- 背面剔除用于决定是否绘制图形对象的多边形。它是图形管线中的一个步骤,用于测试多边形上的点在投影到屏幕上时是顺时针还是逆时针排列。
阴影映射(Shadow Mapping)
- 阴影映射与阴影体积的比较:
- 自身阴影问题
- 优点:当场景中有多个对象/光源时,阴影映射的速度比阴影体积快。
- 精度如何与阴影体积比较?
- 缺点:阴影映射的分辨率低于渲染图像的分辨率,导致许多箱形伪影。
- 需要使用更高分辨率的阴影映射,并根据视点调整阴影映射的分辨率。
通过多点光源生成软阴影(Soft Shadowing by Multiple Point Light Sources)
- 使用加法混合累积每个光源的贡献。
- 可以应用平面投影阴影方法或阴影体积方法,然后应用卷积。
- 阴影的柔和度取决于样本数量的充分性。
- 渲染场景的时间与用于近似区域光源的样本数量线性增加。
- 如果样本数量不足,将引入伪影。
- 缺点:速度慢。
其他生成软阴影的技术(Other Techniques to Generate Soft Shadow)
- 不是移动光源,而是移动投影平面。
- 投影平面上的投影被平均处理。
- 可以使用投影阴影:将相同的纹理多次应用于不同高度的平面并将它们重叠。
问题(Problems)
- 点光源产生的本影(Umbra,暗阴影区)太大。
- 区域光源通常减小本影的大小。
硬阴影生成(Hard Shadow Generation)
- 硬阴影的计算只涉及确定场景中的点是否在不透明物体的阴影中。
- 这是一个二元决策问题,仅涉及阴影模型。
- 实际上,硬阴影的确定就是相对于光源的可见性确定。
软阴影生成(Soft Shadow Generation)
- 软阴影包括本影区和半影区,以提高视觉质量。
- 完全遮挡光源导致本影区,而光源的部分遮挡导致半影区。
- 半影区的不同强度取决于光源的部分遮挡程度。
- 软阴影的确定需要计算不透明遮挡的比例,而不是硬阴影的二元决策。
- 结果阴影区的形状取决于遮挡物和光源的形状。