0%

如何采样HG相位函数

当年逃的课,终究有一天要补回来。

——沃·兹寄·烁德

写一下主要是为了复习数学。

推导过程

在写ray marching的体渲染的时候学到了采样相位函数,PBR书里直接给出了一个和HG相位函数(Henyey-Greenstein Phase Function)对的分布: 其中之间的均匀分布。

在进行下文之前先回顾一下标准的HG相位函数吧:

虽然说直接抄也不是不可以,而且我看东西也比较囫囵吞枣,但是这个东西感觉还是有必要弄懂的。毕竟原本打算是用Schlick相位函数的。

搜了一下之后发现了Tiziano Binzoni的一篇论文The use of the Henyey–Greenstein phase function in Monte Carlo simulations in biomedical optics,里面大概就讲了这个事情。

主要原理还是对分布函数求逆就是均匀分布到原随机变量的函数。

里面作者提到原始的HG相位函数积出来后并没有数值解。但是可以把函数变形成以为自变量的函数,就能比较轻松的解出。 那么问题来了,这个式子是怎么得到的。

询问了某位可爱的群友并经受一番嘲讽过后,大概是搞懂了这个变形的过程。

首先我们需要清楚相位函数是在球面上的概率密度函数,因此满足: 则有,带入原式可得 带入到本式就能得到了: 这样的一个概率密度函数积分就比较容易了

这样一来获得了累计分布函数就能很轻易的求解出逆分布函数了

易得: 这里看到公式和PBR书里给出的略有不同,但是和pbrt-v3代码里是一致的,我的计算结果也与Tiziano Binzoni的论文中一致,怀疑是书中的笔误吧。

顺便在这里对Schlick相位函数求一下采样的分布吧

还有一件事

最后绘制了一下得到了两个函数的图像,发现这两个函数在定义域内是接近对称而不是重合的。

是在计算的时候做错了什么吗?并不是。注意到采样函数的结果值是,而的含义是极角;两者互为相反数根据诱导公式可得两角之和为,又考虑到这两个相位函数是各向同性(isotropic)的,因此事实上都是从原始方向偏移了相同的角度。

参考资料

  1. Binzoni, Tiziano & Leung, Terence & Gandjbakhche, Amir & Rüfenacht, Daniel & Delpy, D. (2006). The use of the Henyey-Greenstein phase function in Monte Carlo simulations in biomedical optics. Physics in medicine and biology. 51. N313-22. 10.1088/0031-9155/51/17/N04.
  2. Pharr, M., Jakob, W., & Humphreys, G. (2018). Physically based rendering: From theory to implementation. Morgan Kaufmann.