【Graphics】Arbitrarily Layered Micro-Facet Surfaces(任意分层的微平面表面)
Arbitrarily Layered Micro-Facet Surfaces
Arbitrarily Layered Micro-Facet Surfaces(任意分层的微平面表面)
出处:Andrea Weidlich, Alexander Wilkie, In GRAPHITE 2007, pages 171-178. December 2007.
https://www.cg.tuwien.ac.at/research/publications/2007/weidlich_2007_almfs/
【声明】全文系个人理解,不保证完全符合原文,有可能仅提及到个人关注部分,仅供参考,如需要更多的了解,建议尽量去看原文。
注:引用图片出自原文。
1 概述
这篇文章中,作者提出了一种包含多层微平面表面的BDRF模型,这里的多层微平面表面可以简单理解为多层不同的材质(如一层透明的薄膜油层覆盖在金属材质层上)。在实现过程中,对层表面之间的散射做了相应的近似和简化,并考虑了吸收和全反射的情况,除此之外,作者还讨论了采样需要的对应概率分布函数,以及如何灵活地运用。
2 简化
为了在不考虑次表面散射(Sub-Surface Scattering)的情况下使用多层材质,这里考虑了以下四个简化:
- 在水平范围内,任何微平面都被认为要比层厚。(Any micro-facets are considered to be much larger in horizontal extent, than the layers are thick.)(个人理解是假设每一层都很薄)
- 假设通过对较低BRDF层采样产生的所有光线都在原入射点出离开。(All rays that are generated by sampling of lower BRDF layers,are assumed to exit at the original point of incidence.)(也就是对于某一层表面而言,入射点和出射点在同一点)
- 假设为计算整体BRDF所生成的折射方向在下一层界面相交于一点。(Refraction rays that are generated for the computation of the entire BRDF, are assumed to meet at a single point on the next layer interface.)(这一点很有意思,这里的折射方向包括所有光线的折射和视线的折射,我们知道在计算BRDF时,是将光线方向和视线方向是相交于同一点的,这里又假设折射方向在下一层仍然相交于一点,其实是不太符合物理实际的,只能说假设薄膜极薄时,这是一种近似)
- 光线只在层界面处发生散射,在层内不发生散射。(ll light scattering is due to reflection at the boundaries be-tween layers; no scattering occurs within individual layers.)(即用于任何(半)透明层的材质仅衰减通过它的光线,而不会造成任何二次散射)
这四个简化可以让我们忽略全部的次表面散射的计算。
而这些简化带来的一个缺点就是:该模型不支持解决任意厚度的表面层的光照计算,而仅局限于具有足够厚的层来产生吸收影响。每一层必须足够的薄才能保证结果的正确性。
3 分层BRDF模型思路
3.1 模型概述
作者通过解决以下两个问题来介绍分层BRDF模型:
1)必须能够根据BRDF来构造样本(cast samples);
2)必须能够为任意输入和输出方向计算整体BRDF。
通过以下递归过程来解决第一个问题:
1)任何射到层栈(多层材质)中一个界面上的光线都部分被反射,部分被折射。被反射部分的能量可以通过菲涅尔(Fresnel)反射系数来计算(除了最后一层可选,其他层都假设遵守菲涅尔反射)。为反射部分生成适当的采样方向。
2)光线被折射的部分进入材质,其中一部分可能会被吸收,然后其余部分与层栈中下一个界面发生作用。该过程递归地进行1)和2)中的内容。
3)所有从更低层反射回来的光在向上过程中会再次被吸收,并且可能发生全反射。因此在递归返回期间就需要相应地处理来自较低层的方向样本。
第二个问题也需要一个递归的过程:
1)最上层的BRDF 是根据两个给定的任意入射方向和计算的,可以得到反射部分。除此之外,对于下一层,产生两个折射方向。
2)任何折射到下一层的能量,都在这两个折射方向上,并会被介质吸收一部分能量。
3)假定这两个折射方向在下一层仍然只相交于一点,从步骤1开始重复该过程,直到遇到不发生折射的不透明层。
4)在从递归返回时,各个BRDF会被更上一层的菲涅尔透射系数衰减,并累加到总BRDF上。
可以用公式概括为:
其中
其中常数是材料对相关波长的吸收系数,d指介质厚度,以及
注意,菲涅尔反射已经包含在中。
(Tips:这部分个人也是不太明白,推测这里的t应该是所谓的补偿函数,G是指几何遮挡函数么?作者文中并没有详细说明)
3.2 全反射
考虑全反射的情况,与整体BRDF相同,为分层BRDF添加一个TIR近似会带来两个不同的问题:
1)在BRDF采样过程中,当光线从更低层向上投射时,需要考虑全反射情况;
2)在为任意输入和输出方向计算整体BRDF,需要考虑全反射情况。
对于两个问题,作者的解决思路分别为:
1)在更低层生成的采样方向如果收到TIR的影响,将会被剔除。这会导致能量损失,因此需要添加一个补偿项。(这个补偿项应该怎么补偿?)
2)对于一个给定的入射方向,很容易确定是由在较低介质中的哪条反射方向会导致这条出射方向。然后通过菲涅尔透射系数衰减能量,并再次添加补偿项。
4 作者结果
5 更多
这部分不是原文的内容,是个人在网上找的一些相关资料,仅供参考。
Rendering Layered Materials-Ivo’s Graphics Blog :里面有些较为详细的说明。