GAMES202-Lecture3
实时阴影
Shadow Mapping
特点:
- 2个Pass的算法
- light pass生成shadow map
- camera pass使用shadow map
- 是图像空间的算法,当shadow map已经生成,那么就不需要实际的场景中的物体,直接使用shadow map就可以计算阴影
- 坏处:
- 自遮挡现象
- 走样的问题
过程:
- pass1: 从光源方向渲染,只需要一个深度的信息
- pass2: 从相机方向开始渲染
- 和光源方向的开始比较,如果点和相机方向的相同,那么就是能被光找到,如果不行那么就是在阴影中,用z值还是实际距离都行,但是要保持一致。
自遮挡问题
shadow map记录的是不连续的,因此会出现阴影和物体断开的现象,可以通过添加一个bias来减少自遮挡问题 — 当光源和平面夹角越大,那么bias越大(会导致阴影的断开),bias的大小也会影响阴影的质量
second-depth shadow mapping:
- 不仅存最小深度,还存次小的深度,之后用这两个深度取一个中间值
- 但是工业界不用
走样问题
渲染的时候分辨率不够大
shadow mapping背后数学原理
在实时渲染中关心近似相等,将不等式当作约等式使用
- 约等式是把乘积的积分拆成了积分的乘积(数学意义上是不精确的)
- 分母是归一化的常数
- 什么时候是准确的(两个有一个就行)?
- 当g的积分范围特别小的时候
- g在足够光滑的时候
约等式用法:
将渲染方程拆成了,shading和visibility两部分
- g积分范围小的情形: 对于点光源和方向光源就特别精确
- smooth的情形: 当光源是正常的面光源,shading point是diffuse的情况下 — 51min
Percentage Closer Soft Shadows(PCSS)– 55min
使用理由,从硬阴影到软阴影,因为日常生活中,绝大多数情况是面光源
Percentage Closer Filtering(PCF)
- 主要用来做anti-aliasing的,本质上是求平均 – 类似卷积(在那个点找一圈像素),在做阴影判断的时候使用Filtering。
- 但是开销很大,从检查一次变成7*7或者9*9
- 主要步骤
- 获取shadow map和对应的坐标
- 设置filter和随机采样的数目
- 判断每个采样点的shadow map值
- 进行累加求平均
PCSS – 70min
- PCF的使用 — 使用PCF将filter size调大,硬阴影就会变soft
- 阴影接受物到阴影投射物的远近程度(blocker distance),决定阴影的软硬,因此不同位置,不同的filter size
- 如何确定filter size – 74min
- 对一个shading point来说要看有多少像素能挡住它的,这些像素的平均值就是average blocker depth
- 如何决定blocker search的范围 — 77min
- 离光源的距离
- 光源大小