[toc]

# ShadowMap

( 相机在光源位置 ) 每帧通过光源构建对于光源的一张深度图,视锥体采样时,判断对应点和光源连线上深度大小关系,若目标点深度大于深度图的深度,代表有阴影

# shadowmap 的问题

由于深度图的分辨率较小, 采样到的数值与实际值的差异 导致错误的判断是否是被遮挡 (当光源与地面夹角较大时容易出现,如夕阳西下时就很容易出现这种问题)

解决方法:

  1. 加一个 bias, 在浮动区间内都认为没被遮挡 ( 但是问题一般很大,bias的大小决定了丢失的多少 )

  2. 次小 shadowMapping (工业界一般不用,且要求模型是 water tight)

锯齿

# 背后的数学

常见的两个不等式 图形学常用的一个不等式 (并非准确,只在特定情况下比较对): 上图这种不等式一般是为了将积分归一化 (我理解为将两个积分降为同阶的) 比如求极限时的阶的概念

什么时候是更准确一些的?

  1. 当积分的范围很小的时候
  2. g (x) 函数在积分域内足够的光滑 (不是连续的 smooth, 可以理解为低频)

# 利用不等式拆渲染方程

上述公式转换成: 转换后的物理意义就变成了 可见性 x shading 那么上面的式子什么时候准确呢?

  1. 当足够小的时候,比如 一个点 的时候
  2. shading 函数足够 smooth 时, 认为面光源、diffuse的时候是smooth的

# PCSS (Percentage closer soft shadows) 软阴影

# PCF(Percentage Closer Filtering)

PCF 方法一开始是用来处理抗锯齿的,但是后来发现也可以用来制作软阴影 (本质上都是边缘模糊?)

    1. 不是后处理上做模糊
    1. 不是在 shadowMap 上做模糊

来自论文: [1] 对于 Shading Point, 找周围的 7x7 个像素求平均 (就是一个多重采样的滤波) 另外,PCF 方法是对 shadowmap 采样后是否遮挡的结果做一次平均 最后得到的就是遮挡的比率 但是 PCF 是对所有地方的阴影无差别采样,就很难解决这样的问题:
如上图的笔尖的阴影是非常锐利的,而后面的笔杆的阴影则是比较软的

这个现象是阴影和遮挡物的距离有关

# PCFF 方法

PCSS 考虑在 硬阴影计算完成后 根据 目标点与遮挡区间的距离 来确定阴影的 PCF采样核大小
点光源不会有软阴影,PCSS 是对面光源计算相似三角形的 B 大小和 W 范围, W_Penumbra 越大代表阴影越软。

# 引用

[1] REEVES,SIGGARPH 87 [2] Percentage-Closer Soft Shadows