(论文)[2010-WSCG] A Hierarchical Automatic Stopping Condition for Monte Carlo Global Illumination

HASC

intro

  • 和之前的 adaptive sampling 不一样,本文考虑的是保守的提前终止或者分裂,而不是分配样本
  • framebuffer-based(和渲染算法无关)

A Hierarchical Criterion

  • 在做决定之前,先绘制大量样本(不然可能会忽视一些复杂的现象)
  • per-block 相较于 pure per-pixel 的好处,能避免过早停止
  • 分裂 block:per-block error 降到 \(\epsilon_s\) 之下
  • 主要流程

  • block 的维护
    • 每一个 block 是一个图片空间的 AABB 包围盒
    • 所有的 block 放到一个线性表里面
    • 当有 block 分裂的时候,从表中移除这个 block,然后把生成的子 block 放进线性表中,这样就不需要显式维护层次结构
  • draw samples:对于还需要渲染的 block,里面的每一个像素分配一条光线
    • 如果是 PT 是 ok 的,light tracing 的话,可以 sample adaptively from the lights
  • 如果所有的 block error 都小于 \(\epsilon_{t}\),则图片收敛

Error Metric

  • 误差计算方式
    • 通过两张同 spp 结果之间的差异计算得到
  • 在实现上,一张正常渲染的图片 \(I\),一张额外的 buffer \(A\)\(A\) 只包含偶数 spp 的结果
  • 根据上面的误差计算方式,我们计算的误差实际上是奇数 spp 和偶数 spp 的结果之差
    • 不妨设奇数 spp 的结果为 \(B\)
    • \(I=\dfrac{A+B}{2}\)

\[ \vert{B-A}\vert=\vert{(2I-A)-A}\vert=2\vert{I-A}\vert \]

  • 于是可以通过 \(\vert{I-A}\vert\) 来表示 \(\vert{B-A}\vert\),只相差一个常数倍数 \(2\)
  • pixel 的 error
    • RGB buffer

\[ e_{p}= \left(\sum_{i\in\{r,g,b\}}\vert{I_p^i-A_p^i}\vert\right) \Big/ \left(\sqrt{\sum_{i\in\{r,g,b\}}{I_p^i}}\right) \]

  • 分母的根号来源:人眼对亮度的 log 响应
    • 快速计算,能取得一点效果
  • block 的 error
    • \(N\):像素内的样本数
    • \(r\):面积因子
      • \(\sqrt{\dfrac{A_b}{A_i}}\):block 占据像素除以图片总的像素,开根号

\[ e_b=\dfrac{r}{N}\sum_{p}e_p \]

Block S/T

  • 用户指定的 error(\(v\)
    • 论文:\(v=0.0002\)
  • termination error:\(\epsilon_{t}=v\)
  • splitting error:\(\epsilon_{s}=256\cdot\epsilon_{t}\)
  • 分裂规则:Axis-Aligned,选择长轴,位置恰好让两边 error 差不多

结果

Image Space

  • PT+NEE

场景示例

  • 场景及其需要收敛所要的 spp 数目
    • 热力图:白色最多,黑色最少

  • RMSE<0.01:\(400\text{M}=57\%\times700\text{M}\)
  • 是线上,error metric 的计算占据了 10% 的渲染时间

其他场景

  • 在整个图片计算都很复杂的时候,论文方法作用不大,但是仍然能够找到计算复杂的区域

Light Space

  • 每一个光源维护一个 importance map
  • importance map 就是对于出射方向的一个划分(bins)
    • 忽略 mesh 的具体发射点、以及后续的弹射点
      • 基于光源三角形相较于被照亮的区域来说,很小
      • 较大的话,可以通过细分光源三角形实现
  • importance map 的更新
    • 这一轮的光线到达胶卷的时候,计算 error,然后累积到对应发射的 importance map 的 bin 中
    • 下一轮用于重要性采样/adaptive sampling

场景

  • 对应热力图
    • 第一行:importance map
    • 第二行:image error

  • RMSE<0.01:\(160\text{M}=28\%\times570\text{M}\)

future

  • 扩展到 BDPT
  • 扩展到高维空间:不依赖于 framebuffer