高质量实时渲染课程笔记(三)— 实时阴影渲染1(Shadow Mapping、PCF、PCSS)

1 Shadow Mapping 阴影映射

1.1 概览

1.1.1 Shadow Mapping 是一个 2-Pass Algorithm(需要渲染两趟)

  1. 第一遍从光源的位置渲染,得到Shadow Map。
  2. 第二遍从相机的位置渲染场景,结合上一步得到的Shadow Map就可以知道渲染的哪一部分位于阴影之中。

1.1.2 Shadow Mapping is an image-space algorithm 图像空间的算法

  1. 优点:不需要场景的几何知识
  2. 缺点:容易发生自遮挡现象和走样现象

Shadow Mapping最开始还是离线渲染的基础。

1.2 Shadow Mapping 实现过程

1.2.1 Render from Light

在这里插入图片描述
从光源输出深度图。

1.2.2 Render From Eye

在这里插入图片描述
从眼睛渲染图像,判断所在的点是否能被光源照到。
在这里插入图片描述

1.3 Shadow Mapping存在的问题

1.3.1 Self occlusion 自遮挡

在这里插入图片描述

在这里插入图片描述

  1. 由于是使用像素记录的离散的深度,所以对于上图的地板而言,深度的分布是一段一段的。
  2. 从camera渲染时,如图中的蓝红交点位置,这个时候,这个点在shadowmap对应的深度与位置橙色相同。导致橙色区域的地板遮住这个交点。

从上向下照,自遮挡问题最小。light与地面越平行,自遮挡问题最严重。

解决自遮挡问题

在这里插入图片描述

增加一个bias来减少自遮挡。
但是会让一些本来应该遮挡的物体没有被计算(detached shadow issue)。
在这里插入图片描述

Second-depth shadow mapping
  1. 记录最近的和此近点的深度。
  2. 求两个深度的中点然后记录到Shadow Map中。
    在这里插入图片描述
存在的问题
  1. 需要物体是watertight的。所有的模型都需要正反面,比如地板就不行。
  2. 由于要记录次小的深度,会产生时间上的额外开销。

1.3.2 Aliasing 走样

在这里插入图片描述
阴影图分辨率不够大会走样(shadowmap每一个像素代表constant depth的小片)。

2 Shadow Mapping背后的数学

在这里插入图片描述

  • 在实时渲染中,关心“约等于”。
  • 实时渲染(RTR)中的一个重要的约等式。

在这里插入图片描述把乘积的积分分成了积分的乘积,分母的作用是为了归一化。

在以下情况下,近似更加准确:

  1. 积分域很小。
  2. g函数足够的光滑,在积分域的范围变化不是很大。

渲染方程的近似

由以上,渲染方程可以写成
在这里插入图片描述
shading部分和Visiblity部分,可以先做shading,最后乘上visibility。在这里插入图片描述
当积分函数足够平滑(光照 L不变,面光源比较光滑/BRDF diffuse是光滑 glossy时不光滑)

3 Percentage closer soft shadows(PCSS)

3.1 Percentage Closer Filtering(PCF)

PCF不是PCSS,最开始是抗锯齿用的,后来人们发现PCF还可以用来生成软阴影。

  • 在阴影的边界提供 anti-aliasing(filtering the results of shadow comparisons)。
  • 不是对已有锯齿的阴影进行Filter。
  • 不是对Shadow Map进行Filter。

3.1.1 PCF Solution

  1. 对每一个fragment进行多次深度比较(比如7x7)。
  2. 平均比较的结果。
  3. e.g. 对地板上的P点:比较方框3x3范围内的所有像素,然后获得比较结果(9个非0即1的值),最后做平均得到visibility。

在这里插入图片描述

3.1.2 PCF的阴影抗锯齿效果

最后得到结果,可以看到阴影边缘已经没有锯齿。
在这里插入图片描述
filtering size 的影响:

  1. size小,阴影更sharper
  2. size大,阴影更soft

3.1.3 PCF给PCSS的启示

  1. 如果filter非常大,那么就可以得到软阴影。
  2. 所以可以先生成硬阴影,然后在不同的位置使用不同大小的Filter就可以达成软阴影的效果。

在这里插入图片描述
阴影的接收物到阴影投射物的距离(笔和影子)越大,阴影越软。

关键结论

  1. Filter size与blocker distance相关。
  2. 更准确的说,Filter size与相对的平均的投射的遮挡物的深度有关。

3.2 Percentage Closer Soft Shadows

3.2.1 概览

在这里插入图片描述
根据相似三角形,得出以下的式子(w越大,阴影越软)。
在这里插入图片描述 d B l o c k e r d_{Blocker} dBlocker实际上是average blocker depth,因为blocker本身具有深度。

3.2.2 PCSS算法的完整流程

  1. Blocker search(获得某一区域的平均blocker深度)
  2. Penumbra estimation(使用平均blocker depth决定filter size)
  3. Percentage Closer Filtering

3.3.3 blocker search的范围

方案一:取固定大小的范围(比如5x5)
方案二:

在这里插入图片描述
blocker search的大小取决于light size和receiver distance from light。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值