PBR探微:Disney BSDF
\[ \newcommand{\d}{\mathrm{d}} \newcommand{\norm}[1]{\left\| #1 \right\|} \]
前言
最近突然又想去搓一个离线渲染器作为玩具项目了,趁机深入看了下Disney Principled BSDF,也算是又从头学了一遍PBR,谨将所学的东西略微记下,以便后续查阅。
基本定义
由于Disney BSDF涉及大量的公式,这里有必要重新对于所有的公式和定义进行澄清。
NDF
法线分布函数NDF究竟是什么?之前我的视线总是聚焦于具体的公式如Beckmann,GGX和GTR等等,很少会去关注NDF的定义。其实在不久之前,我还以为NDF就是法线分布的pdf,满足半球面上的积分为一即可,然而NDF的定义却并非如此。
[1]中对于NDF的描述是
the statistical distribution of surface normals m over the microsurface,这里的\(\mathrm{m}\)指的就是微观法线,也就是我们常说的半程向量\(\mathrm{h}\)。乍一看这个定义似乎说的还是pdf,但NDF实际上是用微观面积与宏观面积的比值来定义的。具体来说,定义宏观面积的微元为\(\mathrm{d}A\),微观法线\(\mathrm{m}\)对应的立体角微元为\(\mathrm{d}\mathrm{\omega}_m\),那么\(D(\mathrm{m})\mathrm{d}\mathrm{\omega}_m\mathrm{d}A\)就等于(微观)法线朝向为\(\mathrm{m}\)微平面的总面积,因此\(D(\mathrm{m})\)项可以写为,其中\(\mathrm{d}A_m\)代表微平面的面积:
\[D(\mathrm{m})=\frac{\d A_m}{\d \mathrm{\omega}_m\mathrm{d}A}\]
然后来看下\(D\)的归一化条件,首先易得微平面投影面积的积分应该为\(\mathrm{d}A\):


