GAMES202-Lecture3

实时阴影

Shadow Mapping

特点:

  1. 2个Pass的算法
    1. light pass生成shadow map
    2. camera pass使用shadow map
  2. 是图像空间的算法,当shadow map已经生成,那么就不需要实际的场景中的物体,直接使用shadow map就可以计算阴影
  3. 坏处:
    1. 自遮挡现象
    2. 走样的问题

过程:

  • pass1: 从光源方向渲染,只需要一个深度的信息
  • pass2: 从相机方向开始渲染
  • 和光源方向的开始比较,如果点和相机方向的相同,那么就是能被光找到,如果不行那么就是在阴影中,用z值还是实际距离都行,但是要保持一致。

自遮挡问题

shadow map记录的是不连续的,因此会出现阴影和物体断开的现象,可以通过添加一个bias来减少自遮挡问题 — 当光源和平面夹角越大,那么bias越大(会导致阴影的断开),bias的大小也会影响阴影的质量

second-depth shadow mapping:

  1. 不仅存最小深度,还存次小的深度,之后用这两个深度取一个中间值
  2. 但是工业界不用

走样问题

渲染的时候分辨率不够大

shadow mapping背后数学原理

在实时渲染中关心近似相等,将不等式当作约等式使用

  1. 约等式是把乘积的积分拆成了积分的乘积(数学意义上是不精确的)
  2. 分母是归一化的常数
  3. 什么时候是准确的(两个有一个就行)?
    1. 当g的积分范围特别小的时候
    2. g在足够光滑的时候

约等式用法:
将渲染方程拆成了,shading和visibility两部分

  1. g积分范围小的情形: 对于点光源和方向光源就特别精确
  2. smooth的情形: 当光源是正常的面光源,shading point是diffuse的情况下 — 51min

Percentage Closer Soft Shadows(PCSS)– 55min

使用理由,从硬阴影到软阴影,因为日常生活中,绝大多数情况是面光源

Percentage Closer Filtering(PCF)

  1. 主要用来做anti-aliasing的,本质上是求平均 – 类似卷积(在那个点找一圈像素),在做阴影判断的时候使用Filtering
  2. 但是开销很大,从检查一次变成7*7或者9*9
  3. 主要步骤
    1. 获取shadow map和对应的坐标
    2. 设置filter和随机采样的数目
    3. 判断每个采样点的shadow map值
    4. 进行累加求平均

PCSS – 70min

  1. PCF的使用 — 使用PCF将filter size调大,硬阴影就会变soft
  2. 阴影接受物到阴影投射物的远近程度(blocker distance),决定阴影的软硬,因此不同位置,不同的filter size
  3. 如何确定filter size – 74min
    1. 对一个shading point来说要看有多少像素能挡住它的,这些像素的平均值就是average blocker depth
    2. 如何决定blocker search的范围 — 77min
      1. 离光源的距离
      2. 光源大小