阴影算法小结

PCF (Percentage Closer Filtering)

复杂的汽车

算法步骤
a. 对每个Fragment, 执行多个(例如7x7)深度比较
b. 对比较的结果求平均

计算公式

卷积公式 (Filter/Convolution)

PCF解决什么问题
a. 本影和半影区非柔和的效果
b. 若直接对Shadow Map图做PCF, 最终仍是非0即1, 是一种对Shadow比较的结果做滤波

PCSS (Percentage-Closer Soft Shadows)3

纸上的阴影

PCSS解决什么问题
a. 阴影是否柔和
b. 阴影效果什么时候用小Kernel滤波, 什么时候用大Kernel滤波 (实际是否拉近硬, 拉远软而柔和, 近实远虚, 近远是Shading Point相对Blocker而言)

算法步骤
a. Blocker Search, 获取特定区域平均的Blocker深度(减小Blocker自身几何影响)
b. 半影区估计, 基于Blocker深度决定滤波Kernel大小

c. 执行PCF

其中,
初始特定区域的选择, (锥体)
a. 依赖Light大小, 比如点光大小
b. Receiver至灯光的距离

计算公式
应用的PCF公式

其中,

PCF并不是直接对ShadowMap卷积, 而后比较的

Dying Light

VSSM (Variance Soft Shadow Mapping)4

VSSM解决什么问题
a. 加快Blocker Search (PCSS第一步)
b. 加快Filter (PCSS第三步)

通过期望和方差, 构造一近正态分布函数, 来近似各Fragment的可见性概率
期望的获取
a. Hardware MIPMAPing
b. Summed Area Tables (SAT)
方差的获取
a.

估算可见性的概率, 实际可转换为求

切比雪夫不等式来估计概率

其中,
是期望
是方差

切比雪夫曲线

即可了解
a. Blocker概率, 平均
b. 非Blocker概率, 平均

平均可见性

其中,
, 可近似等价求切比雪夫不等式(Chebychev)

, 可假设Shadow Receiver为平面

Summed Area Tables (SAT)

范围查询算法
a. 前缀和
b. 树状数据
c. 线段树

Moment Shadow Mapping

定义一系列变量,
VSSM仅使用了前两阶,描述期望和方差.

DFSS (Distance Field Soft Shadows)5

距离函数

给定任意一点, 可给出该点到达一个对象表面的最近距离

距离函数相关应用

1.执行Ray-SDF相交2.计算遮蔽概率 (越低的可见性 <=> 越小的”safe”角度)

距离场软阴影

k=8k=32k=128

引入系数k, 用于控制过渡带的宽度. k越大, 过渡带越窄; 反之, 过渡带越宽.
距离函数的存储有空间开销, 此外若是动态物体, 需动态更新SDF.

参考

1.Soft Shadows in Raymarched SDFs
2.有向距离场软阴影