一段时间以来,我一直在研究基于物理的渲染这一主题。一遍又一遍提到的反射模型是Cook-Torrance / Torrance-Sparrow模型。在此模型的每次提及或解释中,似乎都使用了不同形式的镜面反射项。我找到的版本是:


$$ {\ frac {FDG} {\ pi({\ vec N} \ cdot {\ vec V})({\ vec N} \ cdot {\ vec L})}} $$
$$ {\ frac {FDG} {4({\ vec N} \ cdot {\ vec V})({\ vec N} \ cdot {\ vec L})}} $$
$$ {\ frac {FDG} {({\ vec N} \ cdot {\ vec V})({\ vec N} \ cdot {\ vec L})} } $$

哪个是正确的,何时? Matt Pharr和Greg Humphreys在《基于物理的渲染:从理论到实现》中,第二个结论是最终得出的,但是Cook和Torrance在他们的原始论文中使用了第一个,没有任何详细的解释。

#1 楼

我会在这方面信任Pharr和Humphreys。公式2也与SIGGRAPH基于物理的渲染课程笔记以及引入GGX分布的Walter等人论文中的公式20一致。

我读到某个地方存在错误最初的Cook-Torrance论文使他们错过了分母4的因数,随后的论文对此进行了更正。我无法通过快速搜索找到对此的引用(如果有人知道,请随时在注释中注明)。

关于π的因数,它可能会出现或不,取决于惯例。有时它是正态分布函数D的因数。例如,如果您在Walter等所有GGX论文5.2节中找到了几个D函数的方程,则可以看到它们的分母都为π。请注意,这意味着Lambertian BRDF在分母中也应该有一个π。

在实时图形中,通常会忽略π,在这种情况下,我们可以将其解释为已分解变成浅色。两种方法都可以,只要您对将π放入或从您使用的所有BRDF中删除保持一致即可。

#2 楼

在比较包括Cook-Torrance BRDF在内的多个BRDF时,最新的论文(至少是2005年;))具有更简洁的表示法。他们的公式不包括除以4。

Addy Ngan,FrédoDurand,Wojciech Matusik:BRDF模型的实验分析,
2005年欧洲图形学研讨会论文集。

项目页,补充(请看补充!)

请注意,但是Cook-Torrance BRDF不相等,因此不是Torrance-Sparrow BRDF的同义词。后者包括您的4分频。有趣的参考概述可以在以下网站找到:

Rosana Montes,CarlosUreña:BRDF模型概述,技术报告,2012年。

相同的Cook-Torrance BRDF公式也存在于:

PhilipDutré,Kavita Bala,Philippe Bekaert:《高级全球照明》,第二版,2006年。

编辑:我看过在F,G(或V,取决于是否将分母简化成G)的某些(各向同性)实现中:D:



D:Beckmann,Ward -Duer,Blinn-Phong,Trowbridge-Reitz又名GGX又名GTR2,Berry又名GTR1;

G | V:隐式,沃德,诺伊曼,阿什赫敏·普雷莫兹,凯勒曼,库克·托伦斯,史密斯GGX, Smith Schlick-GGX,Smith Beckmann,Smith Schlick-Beckmann;

F:Schlick,Cook-Torrance。

它们似乎都被使用了(在文献中,动画行业和游戏行业),其格式与您的第二个选项相对应。我枚举中的所有D因子都包含一个显式$ \ frac {1} {\ pi \ alpha ^ 2} $和$ \ alpha \ equiv \ text {roughness} ^ 2 $(请参见方程式)。

编辑2:最近的一个演示文稿,用$ 4 $代替$ \ pi $进行了除法运算:

Earl Hammon:适用于GGX + Smith Microsurfaces的PBR漫射照明,GDC2017。

长话短说,选项2是(提供的三个选项中)唯一正确的镜面反射项。

评论


$ \ begingroup $
Blinn-Phong不使用$ \ alpha \ equiv粗糙度^ 2 $。它具有任意的“粗糙度”参数。同样,贝克曼中的$ \ alpha $与GGX中的$ \ alpha $不同。在Beckmann中,$ \ alpha \ in [0,\ infty)$和GGX $ \ alpha \ in [0,1] $(尽管两者都描述RMS斜率)。
$ \ endgroup $
–皮重
17-10-13在12:46

$ \ begingroup $
@Tare对于Blinn-Phong,您需要使用从镜面反射指数派生alpha的派生版本。参见graphicrants.blogspot.be/2013/08/specular-brdf-reference.html
$ \ endgroup $
–马特西亚
17-10-13在13:21



$ \ begingroup $
好的,您没有在帖子中提及这一点,所以我认为您使用的是原始表格。
$ \ endgroup $
–皮重
17-10-13在14:16

#3 楼

我个人使用的是等式2。对我来说,等式3似乎不正确,Pi因子是为了标准化光响应并节省能量。本质上,您不希望从表面反射的光多于其接收的光。

等式2是等式1的改进,据我所知更正确。有关等式2的更多信息,请参阅Walter等人的“通过粗糙表面折射的微面模型”