Far Land Leo Zeng

Variance Depth Map

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

准备工作

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

$$ \mu = M_1 , \sigma^2 = M_2 - M_1^2 $$

$M_1$是粒子depth的平均值,
$M_2$是粒子depth平方的平均值。

Variance Shadow Mapping

考虑光源视角的深度为一个随机变量x。由切比雪夫不等式单边公式(推导2), 深度大于给定值t的概率有一个上界: $$p(x \geq t) \leq \frac{\sigma^2}{\sigma^2 + (t-\mu)^2}$$

论文1假设把深度为d1的平面投影到深度为d2的平行平面,那么在深度为d1的平面边缘,可以假设投影深度正好为d2的概率为p,那么深度的期望为: $$\begin{aligned} & E(x) =pd_2+(1-p)d_1 \\ & E(x^2) =pd_2^2+(1-p)d_1^2 \\ & \sigma^2 =E(x^2)-E(x)^2 = (p-p^2)(d_2-d_1)^2 \end{aligned}$$

深度小于d2的概率的上界: $$P_{max} = \frac{\sigma^2}{\sigma^2 + (d_2-\mu)^2} = p$$

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

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

Variance Depth Map

vdm_cdf

VDM3把概型改成了正态分布的CDF:[wiki]4 $$CDF = \frac12\left[1 + \mathrm{erf}\left( \frac{x-\mu}{\sigma\sqrt{2}}\right)\right]$$

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加速粒子渲染 ↩︎

If you liked reading this, you could subscribe by email.


Far Land Leo Zeng
Previously 实时GI的一些笔记 March 18, 2017
Up next Normal Mapping October 18, 2018
© 2021 Leo. 粤ICP备19014316号-1