很早就想总结下这类upsample算法。

准备工作

参考论文1,利用硬件Filter先得到:

μ=M1,σ2=M2M12

M1是粒子depth的平均值,
M2是粒子depth平方的平均值。

Variance Shadow Mapping

考虑光源视角的深度为一个随机变量x。由切比雪夫不等式单边公式(推导2), 深度大于给定值t的概率有一个上界: p(xt)σ2σ2+(tμ)2

论文1假设把深度为d1的平面投影到深度为d2的平行平面,那么在深度为d1的平面边缘,可以假设投影深度正好为d2的概率为p,那么深度的期望为: E(x)=pd2+(1p)d1E(x2)=pd22+(1p)d12σ2=E(x2)E(x)2=(pp2)(d2d1)2

深度小于d2的概率的上界: Pmax=σ2σ2+(d2μ)2=p

化简后刚好为 p,当然这是一种理想情况,只有一次投影,一个遮挡物, 但仍然可以用上述等式估算 p (其实就是一个微分级别的PCF值)。

但是,在Depth变化较大的区域(方差较大),VSM会有缺陷(Light bleeding)。因为根据切比雪夫不等式,在方差较大的情况下,(t-μ)必须足够大,才能让不等式右边趋于0。于是又有了LVSM来解决这个问题。

Variance Depth Map

vdm_cdf

VDM3把概型改成了正态分布的CDF:[wiki]4 CDF=12[1+erf(xμσ2)]

erf的计算参考龚大的文章5

VDM不光能用在粒子的渲染。凡是半透明、需要巨大填充率、颜色变化较平滑的内容,都可以用VDM来渲染,最后一次混合到全分辨率的场景上。比如大气效果、体积光,都符合这个条件。

其他

这类都是利用统计手段估计一个较合理的upsample混合方式,非常棒的想法。


  1. Variance Shadow Maps ↩︎

  2. 方差阴影贴图与切比雪夫不等式 ↩︎

  3. Destiny: From Mythic Science Fiction to Rendering in Real-Time ↩︎

  4. Normal_distribution ↩︎

  5. 用vdm加速粒子渲染 ↩︎