与mitsuba ggx渲染进行比较时,我最初以为这是我的PBR实现中的一个错误,但是我在谷歌细丝中发现了相同的问题(https:// github.com/google/filament)以及实质内容。
例如,下面是实质内容的iray版本与实质内容的opengl版本相比。 0金属度,1粗糙度,0.5的全向ibl,(1,1,1)的反照率。
这是基于ggr的基于Cook-torrance ggx的PBR的已知限制?任何人都可以解释为什么存在此限制以及差异的原因吗?
我注意到,在较低的粗糙度值(例如大约0.5左右)下,它更接近于跟踪的“地面真相”。 -0.75),并且最常见的粗糙度值接近粗糙度的下限。例如,0.5甚至看上去几乎“完全粗糙”。问题是所使用的近似值并未真正尝试使这些次要的较高粗糙度值看起来正确吗?
#1 楼
问题在于弥散项,这可以通过使IBL的镜面部分不添加到结果中来看出。仅漫反射渲染不会变暗,当然,镜面反射无法使漫反射变暗。 (请注意,此处不是菲涅耳vs非菲涅耳的问题。)核心问题是正在使用朗伯散射,这与视图无关。还有其他与视图无关的扩散术语,其结果使结果更接近于地面真理。
两个示例扩散术语是Burley(迪士尼)和Oren-Nayar。
谈论Burley此处:https://google.github.io/filament/Filament.md.html#toc4.5
此处描述了Titanfall中使用的一种方法:
https:// www。 gdcvault.com/play/1024478/PBR-Diffuse-Lighting-for-GGX
评论
$ \ begingroup $
目前尚不清楚这是否是全部故事,并且有些想法认为路径跟踪的版本可能实际上是不正确的。这里有一个Twitter对话:twitter.com/Atrix256/status/1039943676552568832。
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
18/09/12在20:36
$ \ begingroup $
Burley拥有有关迪斯尼扩散模型的整篇论文:disney-animation.s3.amazonaws.com/library/…但是,迪斯尼扩散BRDF并不节能。在发问者的情况下这可能不是问题,但应提及。 Titanfall方法很好,但是我想添加Stephen Hill的博客文章系列(blog.selfshadow.com/2018/05/13/multi-faceted-part-1),它解释了解决此问题的另一种方法
$ \ endgroup $
–皮重
18/09/13在11:33
$ \ begingroup $
@Alan Wolfe-尽管Oren-Nayar可能会更仔细地了解基本事实,但我认为主要问题实际上是菲涅耳问题。菲涅耳问题保证了在掠射角处会有更多的光反射,这意味着在掠射角处我们具有更多的镜面反射部分和非常低的漫射部分,从而得到黑环。这对我来说很有意义。
$ \ endgroup $
–gallickgunner
18-09-14在14:06
#2 楼
这与边缘无关,但是在https://eheitzresearch.wordpress.com/240-2/中,您可以清楚地看到,当粗糙度增加时,微面材料的能量会损失。问题在于,表面越粗糙,阴影功能会带来更多的遮挡。有一些“技巧”可以增强能量。可以在http://www.cs.cornell.edu/projects/layered-sg14/第5.3节中找到一个。光栅化版本可能使用了这些“ hacks”之一,并且没有该问题。
也请参阅此处的5.1 https://blog.selfshadow.com/publications/s2015-shading-course/burley /s2015_pbs_disney_bsdf_notes.pdf。
评论
$ \ begingroup $
细丝确实使用能量补偿。此处说明了其实现:google.github.io/filament/Filament.md.html#toc4.7.2
$ \ endgroup $
–罗曼·盖伊
18/09/14在18:33
评论
奇怪的是,在路径跟踪版本和光栅化版本之间,IBL颜色在解释上是不同的,但这是无关的:P难道不是某些色调映射后处理步骤的结果吗?
不,它与色调映射或任何其他后期处理无关。通过进行其他炉子测试并在具有显式控制这些渲染器的不同渲染器之间进行比较进行了验证。
真奇怪。