[toc]
# ShadowMap
( 相机在光源位置
) 每帧通过光源构建对于光源的一张深度图,视锥体采样时,判断对应点和光源连线上深度大小关系,若目标点深度大于深度图的深度,代表有阴影
# shadowmap 的问题
由于深度图的分辨率较小,
采样到的数值与实际值的差异
导致错误的判断是否是被遮挡 (当光源与地面夹角较大时容易出现,如夕阳西下时就很容易出现这种问题)
锯齿
# 背后的数学
常见的两个不等式 图形学常用的一个不等式 (并非准确,只在特定情况下比较对): 上图这种不等式一般是为了将积分归一化 (我理解为将两个积分降为同阶的) 比如求极限时的阶的概念
什么时候是更准确一些的?
- 当积分的范围很小的时候
- g (x) 函数在积分域内足够的光滑 (不是连续的 smooth, 可以理解为低频)
# 利用不等式拆渲染方程
上述公式转换成: 转换后的物理意义就变成了 可见性 x shading
那么上面的式子什么时候准确呢?
- 当足够小的时候,比如
一个点
的时候 - 当
shading
函数足够 smooth 时,认为面光源、diffuse的时候是smooth的
# PCSS (Percentage closer soft shadows) 软阴影
# PCF(Percentage Closer Filtering)
PCF 方法一开始是用来处理抗锯齿的,但是后来发现也可以用来制作软阴影 (本质上都是边缘模糊?)
-
- 不是后处理上做模糊
-
- 不是在 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