精选文章 / 深度解读

The Kulla-Conty Approximation

一、介绍 读后感来自 Revisiting Physically Based Shading at Imageworks , SIGGRAPH 2017 course,by Kulla and Conty。这篇文章介绍了一种快速的补偿微表面模型能量损失的近似方法,为工...

一、介绍

读后感来自 Revisiting Physically Based Shading at Imageworks, SIGGRAPH 2017 course,by Kulla and Conty。这篇文章介绍了一种快速的补偿微表面模型能量损失的近似方法,为工业界常用的一种“相当简单”的补偿微表面能量损失的方法。

二、背景

在使用微表面模型的时候,越是粗糙的物体能量损失越是严重。如下图所示:



随着粗糙度从左往右变大,我们模型也变得越暗,也就意味能量越低。具体可通过白炉测试看出,如下图所示:



对所用模型,使用各方向完全一样的环境光。由于能量守恒,理论上模型入射和出射能量保持一致(此处没有颜色的能量吸收)。但实际上越右边的(粗糙度更大)的模型能量损失越多。这是由于微表面考虑G项时,只做了一次入射遮挡和出射遮挡。

对于粗糙的物体,光线可能会在微表面间弹射多次。因此一次的遮挡计算是不够的。如下图所示,越是粗糙的物体,其在微表面间的弹射应该更多次。



因此我们需要一种方法来补偿该能量,当然一种在微表面间作path tracing的方法是符合物理的。例如[Multiple-scattering microfacet BSDFs with the Smith model,Heitz et al.2016]就尝试在物理上精确描述能量损失。但是在实时渲染领域,该方法效率显然太低。因此此处介绍了一种快速的补偿微表面能量损失的近似方法。该方法为The Kulla-Conty Approximation,其用一种经验性的方式补偿了能量损失。

三、原理

第一步,论文给出了E( )的表达式,表达给定方向下, radiance为1时的积分,即irradiance,此时= sin θ。如下图所示:



那么假设入射为1,反射为E( ),那么给定方向下,一次弹射需要补充的能量则为1-E( )

第二步,论文及其“自然”地想到了关系式(如下)以表达brdf的对称性,该式的积分应等于1-E( )。



第三步,解出常值C。具体解法如下:



因此积分式内的表达式为第二步所求式。即(如下图)




第四步,那显然只要知道了E( )与E(avg)就可以得到一次弹射的能量损失。一个无解析解的积分,我们可以用恰当的预计算方式得到数值解。分析参数可得,E( )只和和roughness有关,E(avg)只与roughness有关。因此E( )可用一张二维纹理存储,E(avg)可用一维纹理存储。如下所示:



由以上4步可以完全计算出一次弹射的能量损失,结果如下图。显然补偿后,粗糙的物体比原来更“亮”了,能量保持了一致性。




(无补偿结果)



(有补偿结果)

到此为止,我们完成了该方法的一般,该文用设计的公式模拟一次弹射的能量变化(无颜色)。那么如果brdf有颜色呢,如果是多次呢?接下来请看。

我们知道颜色意味着吸收,而吸收为能量损失。我们尝试计算该部分“应该”损失的能量。即方法为:先假设模型无颜色E( ),然后计算有颜色时的brdf能量损失F(avg),最后补上。方法如下:

第一步,F(avg)表达平均每次反射的能量,计算方式与上面雷同,如下:



第二步,那么一次弹射的有颜色的能量为F(avg)E(avg),损失为F(avg)(1-E(avg))F(avg) E(avg)。那么多次弹射的有颜色能量损失为,如下图推导:



第三步,根据等比数列求和公式,我们可得和为:



该式为最终应补偿能量结果,乘上该结果,我们可得:




(无补偿结果)



(有补偿结果)

四、结论

该论文对于不同材质和情况还有很多分析,此处不多做介绍。接下来贴出我实现的结果。




E()



E(avg)



(用重要性采样的积分结果,上图为能量补偿,下图为原图,粗糙度从左往右递增)



(用Cosθ加权采样的的积分结果,上图为能量补偿,下图为原图,粗糙度从左往右递增,可见此方法在低粗糙度时,用该方法加权时计算效果不好)

五、引用

https://www.bilibili.com/video/BV1YK4y1T7yY?p=10 (Games202课程)

https://fpsunflower.github.io/ckulla/data/s2017_pbs_imageworks_slides_v2.pdf (原文PPT)

https://dl.acm.org/doi/abs/10.1145/2897824.2925943 ([Multiple-scattering microfacet BSDFs with the Smith model,Heitz et al.2016])

最后

给对图形学有兴趣的同学推荐yanlinqi老师在B站的课,相信你一定会受益匪浅。

阅读重点

这篇内容能帮你快速理解什么

帮助快速理解主题

通过更完整的主题说明和结构表达,帮助用户更快抓住重点,也让搜索系统更容易识别页面主题。

帮助判断下一步动作

让访问者快速理解当前问题、可行方法以及下一步应该继续看案例、看服务还是直接沟通。

帮助继续浏览与沟通

文章页不只是获取流量,也承担继续阅读、查看服务和发起咨询的承接作用。

继续了解

继续了解这个主题前,你可能还关心这些问题

为什么这类主题适合写成文章?

因为很多用户会通过问题词、对比词和方案词进入网站,文章页越清楚,越容易覆盖更具体的需求。

为什么文章页不能只有正文?

仅有正文不利于继续浏览和转化,文章页还需要总结、问答、相关推荐与咨询入口来承接用户。

看完之后下一步可以做什么?

可以继续看同类文章、服务页与案例页,也可以直接沟通官网升级与搜索优化需求。

这篇文章能帮助我解决什么具体问题?

这篇文章围绕当前主题提供了详细的解决方案、操作步骤和注意事项,帮助你快速理解核心要点并应用到实际场景中。

如何判断这篇文章的内容是否权威可靠?

内容基于实际项目经验和技术实践编写,结合行业标准和最佳实践,同时提供案例数据和方法论支撑,确保专业性和可操作性。

这类内容对SEO和网站排名有什么帮助?

优质的长文内容和FAQ结构能够提升页面主题相关性、增加用户停留时间、降低跳出率,这些都有助于搜索引擎评估页面质量并提升排名表现。

AI搜索引擎会如何理解和引用这类内容?

AI搜索系统会提取文章的实体信息、观点结论和结构化问答,当用户提出相关问题时,可能会引用本文作为答案来源或参考依据。

如果我有更多相关问题可以咨询谁?

可以通过页面底部的联系方式直接咨询我们的专业团队,包括电话、QQ或在线表单,我们会根据你的具体情况提供针对性的建议和方案。

这篇文章和同类内容有什么不同之处?

本文不仅提供理论知识,还包含实战经验、避坑指南和可执行的行动建议,同时兼顾传统SEO和新兴的GEO生成式搜索优化视角。

多久需要更新一次这类内容以保持时效性?

建议每季度审查并更新一次关键数据和案例,如果涉及技术工具或算法变化则需要更频繁地维护,确保内容持续为用户提供准确价值。