Physically-Based Shading at Disney节选翻译
图片稍后补上
1 Introduction
2 The microfacet model
3 Visualizing measured BRDFs
3.1 The “MERL 100”
3.2 BRDF Explorer
3.3 Image slice
4 Observations from MERL materials(对MERL材质的观察)
4.1 Diffuse observations(对diffuse的观察)
漫反射表示那些被折射到表面上的光,被分散,被部分吸收及被重新发射。考虑到部分被吸收的光,漫反射的光将会被着色成表面的颜色,而且任何被着色的非金属材质的任何部分都可以被认为是漫反射。
Lambert Diffuse模型,假设被折射的光被分散得足够程度,以至于光线完全丢失了任何方向,因此漫反射是一个常量。然而,从不同的Image Slice(Figure1~5)可以看出很少材质具备这种特性。
正如Figure6所示,许多材质在掠射角处的反光地方是下降的,而另外的则是一个上升。这似乎是由于在Image Slice中着色而导致的漫反射现象.值得注意的是,这跟材质的是否粗糙还是光滑有着巨大的关系。那些高光度更强的表面,往往有一个被遮挡的边缘,而粗糙度表面则有一个上升而不是一个阴影。这种相关性可以在反光曲线(retroreflective response curves)和渲染出来的球上可以看出(Figure7)。
平滑表面的掠射角阴影是从菲涅尔方程预测出来的:在掠射角上,更多的能量从表面反射,而更少的能量被折射到表面,然后被扩散重新发射。然而,漫反射模型一般不考虑表面粗糙度在菲涅尔方程上的影响,并且假设是一个光滑的平面或者忽略菲涅尔效果。
Oren-Nayar模型(1995)预测了,对于粗糙度漫反射表面的反光度增加,这种增加使得漫反射曲线形状被铺平。然而,这种反光波峰并没有像测量数据那么的强,而且,那些粗测出来的材质一般没有在漫反射上表现出整平。Hanrahan-Krueger模型(1993),根据次表面散射理论,也预测出在漫反射曲线上的平整。但是不具有足够强大波峰在边缘上。与Oren-Naryar模型不同,该模型假设出一个完美的光滑表面。两个模型的对比可以参考Figure8.除了反光的波峰,额外增加的漫反射变化也可以从Figure5的image slice中看得出。通过θL/θV等值线可以看出强度和颜色的变化。这可能是由于某些情况下,分层次的次表面散射导致的。然而即使是分层次次表面散射模型,一般认为表面是光滑的,而且不会产生强烈的反光波峰。
4.2 Specular D observations(高光:D的观察)
微平面分布函数D(?h)可以从测量材质的反光度中观察出(Figure6),这些材质可以基于代表平面粗糙度的波峰的高度分成两组。最高的波峰,来自于钢铁材质,超过400,一旦波峰变平,曲线的剩余部分有可能是基于漫反射。
绝大多数MERL材质,他们尾部具备的specular lobe都比传统高光模型长。Figure9给我们呈现了一个例子。材质的高光项对应的是典型的平滑,高度抛光表面。这种表面的高光波峰只有几度宽,而且高光尾部是几倍宽。奇怪的是,传统的Beckmann,Blinn Phong和高斯分布在这个宽度几乎都一样。并不能很好地表现是波峰还是尾巴。
需要有一个更宽的尾巴是GGX(Walter,2007)分布的动机。GGX比其他分布函数具有更长的尾部,但是依然无法捕捉样品的高光部分。为适应测量材质二建模尾部项的重要性,同样是两个最近发表的模型的基础:Low(2012),和Bagher(2012)。两个模型都添加额外的参数来控制从波峰分出来的尾部。另一种建模尾部的观点是用一个第二宽的高光波峰添加到第一上(By Ngan)
4.3 Specular F observations(高光:F的观察)
菲涅尔反射系数 F(θd),表示了随着灯光和视角移动增加的镜面反射,而且还预测了所有的光滑表面在掠射角将接近100%的镜面反射。对于粗糙的表面,100%的镜面反射将无法实现,但反射依然变得越来越镜面。
Figure10显示了MERL材质的菲涅尔项曲线。这些曲线会被偏移和调整大小来与他们对应的整体形状进行比较。每种材质显示了在 θd 临近90度的反射的增加。这些同样可以从Image Slice的顶边看出(Figure1)
值得注意的是,许多曲线在掠射角的陡度是远远大于菲涅尔预测的效果。这种观察就是Torrance-Sparrow微平面模型(1967)的动机,用来解释在更高入射角的“off-specular peak”现象。需要注意,微平面模型的1/(4cosθt*cosθv )项在掠射角是接近无穷大的。然而这并不是一个问题,因为掠射角的反射将会被微平面的阴影效果降低。G因子代表光向量的阴影,与之对称,即视角向量的屏蔽和保持对掠视角反射的检测。然而尽管G因子代表阴影,G和1/(4cosθt*cosθv )的组合也可以很有效地扩大菲涅尔效果。
4.4 Specular G (and albedo) observations(高光:G的观察)
分离出测量数据中的G是非常困难的,因为他需要准确估算D和F项,而且要把镜面反射从漫反射中分离。然而,G项的效果可以间接地从指定方向的反射率看出来。
反射率是总反射能量之和与总入射能量之和的比。从广义上,他是代表一个表面的颜色并且对于所有的波长而言,必须小于1。反射率也可以看做从来自某单一方向的光,如来自太阳,在这种情况下,反射率就变成一个依赖入射角的定向函数。同样对于任何角度和波长,反射率必须小于1。
大多数材质的定向反射率在开始的70度都是比较平整的(Figure11),而在掠射角处的反射率将很大程度与表面的粗糙的相关。光滑的材质在大概75度的位置会有一个轻微的提升。然后再90度的地方有一个回降。对于粗糙的表面,反射率在掠射角范围内将一直上升。值得注意的是,反射率总体上是相当低的,只有很少的材质具备高于0.3的反射率。
很多粗糙材质才表现出掠射角高光同样对此有贡献,反射率中的颜色着色可以证明这一点。
对非常光滑或者粗糙表面的建模G因子的选择对应的反射率项的变化可以从Figure12看出。需要注意的是,直接省略G和1/(4cosθt*cosθv )就是我们所说的“No G”模型,这会导致在掠射角完全变黑。这里的重要点在于G函数的选择在反射率上有一个重要的效果,这导致了同样有一个重要效果在表面的表现上。
为了制作更合理的反射率曲线[30, 29, 19, 20, 8, 9, 33, 10, 14],几个镜面模型被专门研发出来。对于其中的这些,目的是让反射率完全平坦来保证能量守恒。根据Merl的反射率数据(Figure11),这并不是一个不合理的目标,尽管大多数的材质都显示出一些掠射角收益(grazing gain)。但即使这样,一些掠射角收益有可能来自于非镜面效果(non-specular effect)。
基于一些简化的假设,从微平面的D分布中推导出shadowing function是有可能的,正如Smith的方法。这也是Walter和Schick使用的方法。从Figure12可以看出,Smith模型到Walter模型的光滑表面的掠射角反射有着显著增加,这是从测量数据无法看出的效果。对于粗糙值,这种反应似乎更加合理。需要注意的是,Smith G对于少量函数和表格式的积分或者一些经常用的其他近似,具有一个解释形式。
最近一个来自于Kurt的经验模型(2010),采用不同方法并提出一个使用自由参数的数据拟合模型。Figure12展示了Kurt模型,使用α=0.25。α取其他值会产生一个宽范围的反射率。值得关注的是,偏离掠视角的Kurt反射率对于粗糙材质的分布是很重要的。另一个观点是仅仅使用从Walter推导出来的Smith G函数的其中一种,或者甚至是Schick的最简单的一种,然后对G去耦,让其成为自由参数。
4.5 Fabric(织物)
4.6 Iridescence(彩虹色…就是泡泡那种油彩)
4.7 Data anomalies(数据异常)
5 Disney “principled” BRDF
5.1 Principles(原则)
在研发我们新的基于物理的反射模型时,我们被美术人员告诫,我们需要的模型是指定艺术风格,并不一定完全按照物理特性。因此,我们的理念是开发一个原则性的模型而不是一个严格遵照物理的模型。
下面是我们开发时遵循的原则:
1、应该使用直观的参数而不是物理参数
2、使用尽可能少的参数
3、参数应该是0~1之间
4、如果遇到特殊需要,参数可以超出原来的范围
5、所有参数的组合尽可能有健全和可信的可能
We thoroughly debated the addition of each parameter. In the end we ended up with 1 color parameter and 10 scalar parameters described in the following section.
5.2 Parameters(参数)
•baseColor - the surface color, usually supplied by texture maps.
•subsurface - controls diffuse shape using a subsurface approximation. •metallic - the metallic-ness (0 = dielectric, 1 = metallic). This is a linear blend between two different models. The metallic model has no diffuse component and also has a tinted incident specular, equal to the base color.
•specular - incident specular amount. This is in lieu of an explicit index-of-refraction. 12
•specularTint - a concession for artistic control that tints incident specular towards the base color. Grazing specular is still achromatic. •roughness - surface roughness, controls both diffuse and specular response.
•anisotropic - degree of anisotropy. This controls the aspect ratio of the specular highlight. (0 = isotropic, 1 = maximally anisotropic). •sheen - an additional grazing component, primarily intended for cloth. •sheenTint - amount to tint sheen towards base color.
•clearcoat - a second, special-purpose specular lobe.
•clearcoatGloss - controls clearcoat glossiness (0 = a “satin” appearance, 1 = a “gloss” appearance).
Rendered examples of the effect of each of our parameters are shown in Figure 16.
5.3 Diffuse model details
某些模型会有一个漫反射菲涅尔系数:
(1 − F(θl))(1 − F(θd))‘
F(θ)是反射的菲涅尔项。
【注意:从折射的菲涅尔定律,和保留Helmholtz的相互性,计算折射两次是有必要的,一次在路上,另一次在脱离表面上的路上】
根据测量出来的数据显示,并根据我们过去工作室的经验,Lambert漫反射模型往往在边缘上是过暗的。而且增加了菲涅尔因子,使之更具有物理可信度,只会让他变得更黑。基于我们的观察,我们为漫反射开发了一个新的经验模型。这种漫反射间于对光滑表面的漫反射菲涅尔阴影和对于加了高光的粗糙表面之间。对于这种效果的一个可能性解释也许是光线进入粗糙表面和离开微平面的特性导致在掠射角范围内折射的一个增加。然而不管怎样,我们的美术人员就是喜欢这个效果,而且该效果除了他比较可信且有一个物理基础之外,都很类似于我们之前使用的ad-hoc模型。
在我们的模型中,我们忽略漫反射菲涅尔因子的折射系数并且假设没有入射的漫反射丢失。这使得我们可以直接确定入射的漫反射颜色。我们使用Schlick Fresnel方法和修改掠视角范围的高光项来达到一个确定值,该值是由粗糙度确定的,而不是0。
我们的基本漫反射模型:
这产生了一个漫反射菲涅尔阴影。该阴影对光滑平面降低了0.5在掠视角范围内的入射光漫反射并对粗糙平面提升了2.5。这似乎为MERL数据提供了合理的搭配而且这也是能让美术满意的。我们模型对于不同粗糙度的BRDF image slice在Figure17可以看出。
我们的次表面(subsurface)参数是用基础漫反射模型和HanrahanKrueger的subsurface BRDF混合得出。这对于给定一个远处物体对象的次表面或者给定那些平均散射路径比较短的物体的次表面(作为替代进行完全次表面传输,因为他不会渗光到阴影处或者穿过表面)很有用处。
5.4 Specular D details(高光 D细节)
作为最受欢迎的模型,GGX拥有最长的尾部。该模型实际上等同于由Blinn偏爱的TrowbridgeReitz分布,因为他有能力去匹配实验数据。然而这种分布对于很好材质仍然没有足够长的尾部。
Trowbridge和Reitz比较他们的分布函数和几个其他分布来测量落地玻璃。贝里(1923)提出的其中一个分布,有一个类似的形式,但是是1的指数而不是2的指数,这导致有更长的尾巴。这表明更广泛的分布具有可变的指数,这里介绍被称为“Generalized-Trowbridge-Reitz”或者GTR:
在每一个分布中,c是一个常量调整项,α是一个0~1的粗糙度参数。α=0,就会产生一个完全平整的分布,α=1就会产生完全粗糙或者统一的分布。
初步拟合结果建议γ =1~2。有趣的是,γ =3/2时的GTR等于Henyey-Greenstein的相位函数r θ = 2θh,当我们将分布从半球扩展到球体,双倍的θh可以被观察到。
一个可能的微平面必须规范化,而且为了高效渲染,他必须支持重要性采样。两者都需要该分布能在半球上被积分。幸运的是,该分布有一个简单的封闭形式积分。归一化和重要性采样和一个有效的各向异性形式将在附录B给出。
对于我们的BRDF,我们选择了两个固定镜面片,两者都使用GTR模型。第一个镜片用γ =2,第二个使用γ =1.第一个镜片代表基本材质或者各向异性/金属.第二个镜片代表基本材质最表面的透明层,因此总是各向同性/非金属.
对于粗糙度,我们发现将α映射到粗糙度的平方将会在粗糙度有一个更好的线性变化。如果没有这种重映射,匹配光泽材料就需要非常小且非直观的值。此外,在粗糙和光滑材质之间插值会一直得到一个粗糙的结果,插值结果可以在Figure16~19中看出。代替明确的index-of-refraction(ior),我们用镜面参数来确定入射镜面高光量。这个参数的归一化范围会被重新线性映射到入射镜面范围[0.0,0.8],对应于ior值则是1.0,1.8.需要注意的是,该参数范围的中间对应1.5,一个很典型的ior值,也是我们的默认值。镜面高光参数可能会被推到超过1的位置,以此获得更高的ior值,但这应该要谨慎进行。这种重新映射大大地帮助15位美术人员去制作那些在真实世界中,入射反射量非常小的但具备可能的材质。
对于我们的透明涂层,我们固定ior为1.5,代表聚氨酯固定的折射率,而不是允许美术利用透明涂层参数去调整层级的总长度。归一化的参数范围对应[0,0.25],这个层级,尽管它具有强大的视觉冲击,表示一个相对少量的能量,因此我们不会从基本层去减少任何能量。如果设置为0,透明涂层就被有效地关闭,也就不会产生任何渲染成本了。
5.5 Specular F details(高光 F细节)
对于我们而已Schlick Fresnel近似方法就足够了,而且比全菲涅尔方程更简单。近似差导致的错误已经远远小于其他因素导致的了。
常量F0表示垂直入射的镜面反射,为了消除电介质和有色金属的色差。实际值取决于折射率。
需要注意的是,镜面反射来自于微平面,因此F依赖于θd(灯光方向和微平面法线(half-vector)的夹角),而不是入射光线到表面法线的夹角。
菲涅尔函数可以看做是对入射镜面反射和在掠视角范围内的反射率总和的插值。注意,这种现象将在掠视角和入射角下被消色,因为所有的光都被反射掉了。
5.6 Specular G details(高光 G细节)
对于我们的模型,我们采取了混合的方法。给定Smith遮蔽因子可用于主要的镜面反射,我们使用Walter提出的GGX派生出来的G,但是重新映射粗糙度来减少有光泽表面的极端增益。具体来说,为了计算G,我们线性地调整原始粗糙值从[0,1]到一个被减少的范围[0.5,1]。注意:我们是在讲粗糙度平方前做这个的,所以最后的αg为s (0.5 + roughness/2)^2
这种重新映射是基于测量数据和美术人员的反馈(如对于粗糙度小的值导致高光太“热”)。这给我们一个G函数,根据粗糙值而变化,至少是部分基于物理的,似乎也说得过去。对于我们的透明涂层锦棉,我们不用Smith G推导而是简单用GGX的G函数,并固定粗糙度为0.25,这是说得过去且美术满意的。
5.7 Layering vs parameter blending(分层 vs 参数混合)
一旦我们设置好我们的新模型,我们需要去决定如何将其集成到我们的shader中。第一个问题是那些参数需要空间变化,答案是全部。如果一个美术人员只是想简单讲两个材质混合,按他们需要在所有的参数上进行插值。同样,Mask也会被筛选,在Mask的模糊边缘,显示的材质同样是要求合理的。
我们的设计原则有这么一条:让所有的参数都归一化并且至少保持感性的线性。这样有一个好处,就是材质插值的时候基本以一种相当直观的形式。Figure19展示了一个例子。
一旦我们意识到我们可以强制插值,我们就会想我们能不能通过Mask实现所有空间变化。这个想法是,美术人员将选择一个材质预设列表,然后简单用mask来混合。事实证明,这是非常成功,极大简化工作流程,提高材料的一致性,并且使我们的材质评估非常有效。我们的Shader UI界面在Figure20.