Autodesk Standard Surface
伊利扬 · 格奥尔基耶夫、杰米 · 朴茨茅斯、扎普 · 安德森、阿德里安 · 赫鲁贝尔、艾伦 · 金、大垣慎司、弗雷德里克 · 斯文特
版本 1.0.1.1
本文档是 uber 表面着色器的规范,旨在提供一种材质表示,能够对实际视觉效果和动画制作中使用的绝大多数材质进行准确建模。它遵循 Arnold 渲染器中标准曲面着色器的设计,其实现相对简单,其用户界面由一小组具有直观含义和范围的参数组成。本文档是版本化的,将随着规范的发展而更新。
我们提供 OSL 和 MaterialX 参考实现 [Georgiev2019 ],其目的是指定足够的细节,以允许在其他渲染器中实现,根据目的将外观与合理的保真度相匹配。
今天,不同设施之间计算机图形场景资产的交换仍然是一个重大问题,尤其是在表面外观方面。不同的渲染器和 3D 引擎使用不同的着色系统、着色语言和固定功能的管道。此外,准确地建模表面外观仍然是一个复杂而相关的问题,并且是一个活跃的科学研究主题。然而,_当今_行业迫切需要找到一种标准化的材料模型,既涵盖日常工作流程中的最常见用例,又易于使用。
多年来,随着不同供应商达成共识,将材料定义与场景中的光传输模拟分开,某些事实上的标准外观定义框架已经出现。此类通用框架包括 MaterialX、材质定义语言 (MDL) 和开放着色语言 (OSL) [Gritz2010],允许将材料指定为原始表面反射模型的组合。然而,这些框架本身不足以满足最终用户的外观开发,他们不应该为日常任务从头开始构建表面着色器。需要具有一组明确定义的参数的标准超级着色器参数化,这些参数可以进行调整以表示大多数真实世界(以及想象中的)材质。在本提案中,我们旨在填补这一空白;我们的参考实现之一是用 OSL [Georgiev2019 ]编写的。
我们提出的模型紧跟 Arnold 5 标准曲面着色器,它在 Anders Langlands 的 alSurface [Langlands2014 ] 和 Autodesk 3ds Max 的 Physical Material [Andersson2016 ] 中具有强大的精神前辈。alSurface 着色器在一段时间内已成为业界事实上的标准,但不再积极开发。3ds Max 的物理材质又受到 Allegorithmic 的 PBR 着色模型 [McDermott2018 ]、迪斯尼的 Principled Shader [Burley2012 ] 和几个实时 3D 引擎的一般行业趋势的强烈启发,并且在所有主要渲染引擎的支持下都得到了生产证明用于 3ds Max。
在这个提议中,我们没有为每个可能的情况提供参数,而是有意尝试将参数集归结为仅在实践中最有用的参数。我们还修复了原始反射模型的组合,以确保用户尽可能在物理上合理的范围内工作。我们的目标是使整体行为简单、合乎逻辑、直观且易于理解,以便该模型涵盖大多数日常用例。对于它没有涵盖的少数几个,可能需要使用特定于渲染器的着色器,或构建定制的着色网络。
我们的目标是创建一个表面着色模型,能够忠实地代表各种现实世界的材料。金属、玻璃或墙漆等基本材料表面的光散射特性得到了很好的研究,可以通过简单的分析模型准确地表示出来。其他材料,例如成品木材、布料或皮肤,包括堆叠在彼此顶部的半透明物质层。此类材料更复杂的行为是光在这些层之间的界面处散射并通过它们传播的结果,并且每个此类散射界面通常可以由分析模型表示。此外,许多现实世界的物体由几种不同的材料制成,例如金属和塑料,通过在其表面上对每种材料的类型进行纹理化,可以方便地对此类对象的外观进行建模。虽然材料过渡通常是突然的,但连续混合材料的能力对于艺术目的以及抗锯齿都很有用。
两个基本操作——分层和混合——提供了一种语言来对具有复杂外观的不同材料进行建模。对于具有物理意义的堆叠层,它的底部应该有一个不透明(例如金属)或透明(例如玻璃或皮肤)的体块,并在其顶部有一组电介质板。任何未在两层之间的界面处反射的光都会向下传输通过下层,并在其相应的介质内进行选择性吸收。混合操作可以被认为是两种材料的统计混合,即使并非所有组合都具有物理意义。作为线性插值,该操作自动保持能量守恒。
我们的着色器对包含十个组件的材质进行建模,这些组件按层次分层和混合,如图 1 所示。单个组件的属性可以在整个表面上变化。
图 1:我们的着色器模拟的理想化材质模型的示意图。组件的水平堆叠代表统计混合,垂直堆叠代表分层。标有星号的组件是可选的,如第2.2节所述 。
闭合混合表示
给定一个着色点和一个视图方向,我们着色器的评估结果是一个_双向散射分布函数_(BSDF),它描述了表面在那个点和方向上的光散射特性(加上一个发射分量和一个次表面散射分布1) . 由于在材料的整个结构内传播和散射,因此产生的 BSDF 表示在最顶部界面处的聚集光散射行为。
准确模拟层状材料内的光传播通常很困难且计算成本很高,并且仍然是一个活跃的研究课题。我们的着色器采用常见的实用方法,即生成的 BSDF 可以表示为“原子”、构建块 BSDF 的简单混合(即线性组合)——图 1 中的每个组件一个。我们仍然尝试通过调整原子 BSDF 的属性和线性组合权重来模拟分层最重要的物理效果——着色、反射/透射模糊和角度相关的图层透明度。
每个原子 BSDF,通常非正式地称为“波瓣”,是反射或传输分布函数,即 BRDF 或 BTDF(发射和次表面散射除外)。在我们的实现中,这些 BSDF 由_闭包_表示。闭包是一个“黑盒”对象,它包含用于评估和采样底层 BSDF 2 的渲染器特定例程。它由渲染器定义和使用,但由着色器使用一组基本数据类型的参数(例如浮点数、向量和颜色)进行_实例化_。
我们的着色器返回一个闭包对象列表,每个对象都有一个关联的(颜色)权重。用户可以通过一组着色器级参数来控制闭包的实例化参数和权重,以模拟各种物理上合理的材料。加权闭包的总和完全描述了给定表面点的光发射和散射特性。封闭列表,如表 1所示,最终被传递给渲染器,用于集成围绕着色点的光传输。
成分 | 关闭 | 描述 |
---|---|---|
透明度 | transparency | 简单的传递(可以认为是增量 BTDF) |
涂层 | specular_brdf | 介电微面 BRDF (GGX) |
排放 | emission | 漫射 |
金属 | metal_brdf | 导体微面 BRDF (GGX) |
镜面反射 | specular_brdf | 介电微面 BRDF (GGX) |
镜面透射* | specular_btdf | 介电微面 BTDF (GGX) |
光泽* | sheen_brdf | 逆反射介电微面 BRDF [ Estevez2017 ] |
次表面散射* | subsurface | 次表面散射(例如扩散或随机游走) |
漫透射* | diffuse_btdf | 漫反射微面 BTDF (Oren-Nayar) |
漫反射 | diffuse_brdf | 漫反射微面 BRDF (Oren-Nayar) |
表 1:代表图 1所示材料模型的每个组件的闭包列表。标有星号的闭包是可选的,如第2.2节所述 。
闭合权重通过一个公式计算,该公式旨在满足构造能量守恒,同时近似模拟层间光传播的影响。可以说,最突出的这种效果是镜面(电介质)层的方向变化透明度,这是它们的菲涅耳控制的半球方向反射率(又名定向反照率)的结果。我们根据反射率对对应的 BRDF 闭包与底层闭包进行权衡,我们的实现假设有一个reflectance(brdf)
函数可以计算它。当反射积分的解析表达式不可用于闭包时,可以对其进行近似,例如通过蒙特卡罗估计。
我们着色器的闭包权重计算逻辑最容易被可视化为一棵树,其中每个叶节点都是一个闭包,每个内部节点都是其两个子节点的线性组合,在边缘指定权重。我们在图 2 中说明了这种树结构。每个闭包的最终权重是沿其对应叶节点和根节点之间路径的边权重的乘积。在下面的第3节 中,我们更详细地描述了各个闭包和边权重。
图 2:我们的着色器返回根闭包standard_surface
,它是“原子”闭包的加权和,显示为树中的叶节点。每个闭包的权重是从其对应的叶子节点到根节点的路径上边权重的乘积。边缘权重由着色器级参数参数化,以粗体显示。
兼容模式
我们的模型旨在使生产级应用程序相对简单,但是其闭包和参数的数量对于实时引擎来说可能太多而无法处理。对于此类应用程序,我们定义了“预览”级别的兼容性,在典型情况下将我们的着色器简化为合理的视觉相似度。简化相当于归零组合权重参数transmission
,sheen
以及subsurface
,它有效地消除了specular_btdf
,sheen_brdf
,subsurface
,和diffuse_btdf
封闭件。在这种兼容模式下,我们也忽略了其他闭包中的某些参数,这些参数在下一节的参数表中用星号标记。
在本节中,我们描述了我们的着色器使用的各个闭包,列在表 1 中,它们的参数以及它们如何相互加权。一些参数在闭包中重复使用,因此它们在下面的小节中出现多次。我们用粗体表示着色器级参数,例如opacity
。
透明度
该transparency
封闭件具有没有实例化参数,并使得表面在遮光点完全透明,即,在输入射线被发送未偏转的和未着色的。效果如图3所示。所述opacity
着色器参数控制所有其他封闭件的相对重量(通过线性“阿尔法”共混物),因此透明度重量1-
opacity
。
通过以下公式的透明度和涂层闭合的组合是产生最终standard_surface
闭合组合的顶级混合物:
标准表面 = (1 - 不透明度) * 透明度() + 不透明度 * 涂层层
在coat_layer
下面的小节中定义了闭包。
着色器参数:透明度
Name | 类型 | 默认 | 描述 |
---|---|---|---|
opacity | 颜色 | 1,1,1 | 表面的(彩色)不透明度(默认情况下完全不透明) |
图 3:不透明度与透射率。从左到右:仅带透射的球体、(二进制)不透明蒙版、带透射和蒙板不透明度的球体。
涂层
最上面的散射层是带有 GGX 微面 BRDF 闭合的介电涂层coat_brdf
。作为电介质,该 BRDF 不保能(即,其定向反射率通常小于 1),因为它遵循菲涅耳反射定律。该层被假定为无限薄,剩余的未反射光直接传递到下面的层而不发生折射。反射颜色固定为白色,尽管涂层介质颜色可以由用户控制。
闭包组合公式为
外套层=外套*外套_brdf(...)+ lerp(白色,外套_颜色*(1 - 反射(外套_brdf)),外套)*发射镜面混合
其中lerp(a, b, t) = (1 - t) * a + t * b
,emission_specular_mixture
闭包在以下小节中定义。
在上面的闭包公式中,white
表示恒定的白色。然后,涂层实际上是“无操作”直通(当coat
参数变为零时)和具有嵌入吸收介质的电介质板之间的统计混合。
在真实的物理材料中,被底层散射的光在穿过有色/粗糙涂层时会被着色和模糊。在渲染器中准确捕捉这些效果需要按顺序模拟各个层之间的光相互作用。由于我们的模型是独立评估的闭包的简单线性组合,我们模拟这些效果:
- 对涂层下方的所有层进行着色是通过按
coat_color
参数缩放它们的闭合来实现的,这可以解释为涂层介质内的吸收效应对来自底层的反射进行着色(即能量被着色涂层吸收)。 在基板顶部有介电涂层时,一小部分光在涂层内部表现出内部反射,然后返回基板再次反射,变得更暗和更饱和。这种效果可以通过
coat_affect_color
参数模拟,该参数用作基材颜色的指数,目前仅限于漫反射和次表面散射:base_color = pow(base_color, 1.0 + (coat *coat_affect_color)) subsurface_color = pow(subsurface_color, 1.0 + (coat *coat_affect_color))
我们还提供了镀层粗糙的选项来增加其他GGX BSDFs,即粗糙度
metal_brdf
,specular_brdf
和specular_btdf
。其余的 BSDF 没有调制,因为它们已经很粗糙了。调制给定的公式roughness
是粗糙度 = lerp(粗糙度,1,外套 *coat_affect_roughness *coat_roughness)
着色器参数:涂层
Name | 类型 | 默认 | 描述 |
---|---|---|---|
coat | 漂浮 | 0 | 反射权重(反射颜色固定为白色) |
coat_color | 颜色 | 1,1,1 | 来自下方所有层的光线的色调颜色 |
coat_roughness | 漂浮 | 0.1 | 涂层反射粗糙度;在传递给 BSDF 之前在内部进行平方以获得更线性的感知响应 [ Burley2012 ] |
coat_anisotropy * | 漂浮 | 0 | 的反射各向异性coat_brdf ;范围[0,1] |
coat_rotation * | 漂浮 | 0 | 各向异性的取向;范围[0,1] (其中1 表示 360°) |
coat_IOR | 漂浮 | 1.5 | 的折射率 coat_brdf |
coat_normal | 向量 | 0,0,0 | 涂层反射的着色法线;可选,覆盖默认的着色法线;对闭包组合权重没有影响 |
coat_affect_color * | 漂浮 | 0 | 额外调制漫反射和次表面散射饱和度的程度;范围[0,1] |
coat_affect_roughness * | 漂浮 | 0 | 对下面镜面反射层粗糙度的影响有多大;范围[0,1] |
图 4:通过组合涂层和镜面反射层可以实现的各种效果。从左到右:薄片、雨滴、碳纤维。
排放
附加的定向均匀(即朗伯)发射闭合emission
位于涂层下方,但在其他方面不受应用于其他闭合的组合权重的能量守恒逻辑的影响。我们将发射置于涂层下方,以允许渲染由反射表面(例如荧光棒)界定的低发射材料,而无需对发射器和边界对象进行明确建模。
涉及发射的闭包组合是
发射镜面混合=发射*发射颜色*发射()+镜面混合
其中specular_mixture
闭包定义如下。
着色器参数:发射
Name | 类型 | 默认 | 描述 |
---|---|---|---|
emission | 漂浮 | 0 | 发射颜色乘数 |
emission_color | 颜色 | 1,1,1 | 发光颜色 |
图 5:表示连接到 的热熔岩的纹理贴图emission_color
。
金属
涂层下方的金属反射被建模为 GGX 微面导体 BRDF metal_brdf
,其吸收系数和复杂的折射率是根据更用户友好的参数base_color
和specular_color
[Gulbrandsen2014 ] 计算的,定义如下。这允许通过直接指定正常和掠射入射的(可纹理化)颜色来实现所需的外观。请注意,这两个颜色参数也用于非金属(即电介质)镜面反射和漫反射 BRDF,如下所述。
这种非透射金属 BRDF 作为统计混合物与非金属(即电介质)镜面反射层模型混合,在下一节中描述,根据metalness
参数如下:
specular_mixture = metalness * metal_brdf(...) + (1 - metalness) * specular_reflection_layer
其中specular_reflection_layer
闭包定义如下。
当厚度为光波长数量级的薄折射膜放置在材料顶部时,由于干涉,会出现类似彩虹的彩虹色效应。这些效果包含在微面封闭中,适用于金属或镜面反射和透射层,以存在为准。薄膜在逻辑上位于涂层和底层之间,但由于假定涂层是无限薄的,薄膜外部介质的折射率被认为是真空的折射率,即1.0
。假设它的内部是镜面反射层。薄膜模型基于 Belcour 和Barla [Belcour2017 ] 的模型。
着色器参数:金属
Name | 类型 | 默认 | 描述 |
---|---|---|---|
base | 漂浮 | 1 | 标量乘数 base_color |
base_color | 颜色 | 0.8,0.8,0.8 | 法向入射时的反射颜色(即从正上方看的表面) |
specular | 漂浮 | 1 | 标量乘数 specular_color |
specular_color | 颜色 | 1,1,1 | 掠入射时的反射颜色(即轮廓周围) |
specular_roughness | 漂浮 | 0.2 | 反射粗糙度;在传递给 BSDF 之前在内部进行平方,以在参数范围内实现更均匀的粗糙度外观 |
specular_anisotropy * | 漂浮 | 0 | 的反射各向异性metal_brdf ;范围[0,1] |
specular_rotation * | 漂浮 | 0 | 各向异性的取向;范围[0,1] (其中1 表示 360°) |
thin_film_thickness * | 漂浮 | 0 | 薄膜厚度(纳米) |
thin_film_IOR * | 漂浮 | 1.5 | 薄膜的折射率 |
图 6:通过设置base_color
和specular_color
参数由金属封盖生产的金属。从左到右:铝、铜、金。
图 7:薄膜干涉对表面的影响。从左到右:多色调车漆、肥皂泡和烧焦的铬。
镜面反射
该层模拟了 GGX 微面电介质 BRDF specular_brdf
,概念上就在涂层下方。与涂层类似,由于菲涅耳定律,这种 BRDF 本身不是能量守恒的,未被反射的能量完全传输到下面的层。我们使用的闭合组合表示反射和透射镜面波瓣之间的能量平衡
specular_reflection_layer = specular * specular_color * specular_brdf(...) + (1 - specular_color * specular * 反射率(specular_brdf)) *transmission_sheen_mix
其中transmission_sheen_mix
闭包定义如下。
着色器参数:镜面反射
Name | 类型 | 默认 | 描述 |
---|---|---|---|
specular | 漂浮 | 1 | 镜面反射权重 |
specular_color | 颜色 | 1,1,1 | 镜面反射颜色 |
specular_roughness | 漂浮 | 0.2 | 反射粗糙度;在传递给 BSDF 之前在内部进行平方,以在参数范围内获得更均匀的粗糙度 |
specular_IOR | 漂浮 | 1.5 | 的折射率 specular_brdf |
specular_anisotropy * | 漂浮 | 0 | 的反射各向异性specular_brdf ;范围[0,1] |
specular_rotation * | 漂浮 | 0 | 各向异性的取向;范围[0,1] (1 表示 360°) |
thin_film_thickness * | 漂浮 | 0 | 薄膜厚度(纳米) |
thin_film_IOR * | 漂浮 | 1.5 | 薄膜的折射率 |
图 8:改变镜面反射折射率。从左到右:1.0、1.1、1.52(默认)。
镜面透射
该层transmission
对通过 GGX 微面 BTDF 穿过镜面反射层底部的透射specular_btdf
或从漫反射基层 ( base_layer
) 散射的统计混合(根据参数)进行建模。闭包组合由下式给出
transmission_sheen_mix = 透射 * transm_color * specular_btdf(...) + (1 - 透射) * sheen_layer
在sheen_layer
下面的小节中定义了闭包,并且如下所述,
transm_color = (transmission_depth == 0) ? 传输颜色:1
传输闭包specular_btdf
与 共享许多参数specular_brdf
;例如,粗糙度spec_btdf
默认与 相同specular_roughness
。它可以通过transmission_extra_roughness
参数额外增加或减少,尽管这在物理上是不正确的。就像镜面反射 BRDF 一样,这个 BTDF 可以通过重用相同的参数由薄膜调制。
如果thin_walled
布尔参数为false
,则表面被认为是有限尺寸实体对象的边界。因此,根据specular_btdf
闭合,光在进入和离开物体时会发生折射。如果thin_walled
是true
,则表面是双面的,代表无限薄的壳(例如理想化的树叶或纸),因此光在镜面透射到另一侧时不会发生折射。在这种情况下,折射率设置为周围介质的折射率(例如,真空为 1.0),并且色散和薄膜被禁用。
我们还允许指定对象内部均匀介质的属性,有或没有散射。这对于建模一系列材料非常有用,从透明或有色(仅吸收)玻璃和液体到具有视觉显着散射的材料,例如蜂蜜、深水体、乳白色玻璃或乳白色玻璃。的transmission_color
和transmission_depth
参数对是一种常用的艺术家友好的方式来设置的介质的消光系数,而transmission_scatter
直接设置介质的散射系数。当transmission_depth
为零时,内部介质为零,并transmission_color
用于直接在闭合混合物中以恒定量乘法着色折射(参见上面的代码片段)。什么时候transmission_depth
为正,着色由内部介质通过比尔定律控制。
着色器参数:镜面透射
Name | 类型 | 默认 | 描述 |
---|---|---|---|
transmission * | 漂浮 | 0 | 传动重量 |
transmission_color * | 颜色 | 1,1,1 | 透射颜色,即色调 |
transmission_depth * | 漂浮 | 0 | 白光在材料transmission_color 内部传播的距离,直到它的颜色完全符合比尔定律,决定了内部介质的消光系数;如果为零,则transmission_color 作为恒定(表面)透射色调;范围[0,infinity) |
transmission_scatter * | 颜色 | 0,0,0 | 内部介质的散射系数 |
transmission_scatter_anisotropy * | 漂浮 | 0 | 内部介质的 Henyey-Greenstein 相函数的各向异性;范围[-1,1] |
transmission_dispersion * | 漂浮 | 0 | 色散阿贝数,描述折射率随波长变化的程度 |
transmission_extra_roughness * | 漂浮 | 0 | 附加(正或负)粗糙度 specular_roughness |
specular_roughness | 漂浮 | 0.2 | 折射粗糙度specular_btdf ; 在传递给 BTDF 之前在内部进行平方,以在参数范围内实现更均匀的粗糙度外观[0,1] |
specular_IOR | 漂浮 | 1.5 | 的折射率 specular_btdf |
specular_anisotropy * | 漂浮 | 0 | 的反射各向异性specular_btdf ;范围[0,1] |
specular_rotation * | 漂浮 | 0 | 各向异性的取向;范围[0,1] (其中1 表示 360°) |
thin_film_thickness * | 漂浮 | 0 | 薄膜厚度 |
thin_film_IOR * | 漂浮 | 1.5 | 薄膜的折射率 |
thin_walled * | 布尔值 | false | 如果true ,物体被认为是无限薄的并且表面是双面的 |
图 9:的效果transmission_scatter_anisotropy
。从左到右:-0.5、0.0、0.5。
光泽
所述sheen_brdf
封闭件是基于该埃斯特韦斯和库拉 的微面光泽 BRDF [Estevez2017 ]。它模拟纺织品的外观,其中表面刻面是圆柱形 “纤维”,轴主要平行于表面法线,在掠射角产生镜面高光。从概念上讲,这位于基础基板的顶部,因此传输到基板的能量会因光泽反射率而减少:
sheen_layer = sheen * sheen_color * sheen_brdf(...) + (1 - sheen *reflectance(sheen_brdf)) * base_mix
其中base_mix
闭包定义如下。
着色器参数:sheen
Name | 类型 | 默认 | 描述 |
---|---|---|---|
sheen * | 漂浮 | 0.8 | 反射权重 sheen_brdf |
sheen_color * | 颜色 | 1,1,1 | 的反射颜色 sheen_brdf |
sheen_roughness * | 漂浮 | 0.3 | 反射粗糙度sheen_brdf ;范围[0,1] |
图 10:使用光泽闭合呈现的各种纺织品。
漫反射
根据subsurface
参数,基础衬底层由 Oren-Nayar 漫反射分量和次表面分量的统计混合组成:
base_mix = (1 - subsurface) * base * base_color *diffuse_brdf(...) + subsurface * subsurface_mix
其中subsurface_mix
闭包定义如下。
着色器参数:漫反射
Name | 类型 | 默认 | 描述 |
---|---|---|---|
base | 漂浮 | 0.8 | 反射权重 diffuse_brdf |
base_color | 颜色 | 1,1,1 | 的反射颜色 diffuse_brdf |
diffuse_roughness * | 漂浮 | 0 | 反射粗糙度 diffuse_brdf |
漫透射
如果thin_walled
是 ,则次表面分量退化为漫透射true
。这代表了一个无限薄的外壳(例如一张理想化的粗糙纸),能量通过它传输到漫射瓣中。
漫反射通过 Oren-Nayar 微面 BRDF 建模,围绕着色法线翻转,使其成为 BTDF:
subsurface_mix = Thin_walled * subsurface_color *diffuse_btdf(...) + (1 - thin_walled) * subsurface(...)
其中subsurface
封闭件进行说明。
着色器参数:漫反射
Name | 类型 | 默认 | 描述 |
---|---|---|---|
subsurface * | 漂浮 | 0 | 漫反射权重 |
subsurface_color * | 颜色 | 1,1,1 | 漫透射色 |
diffuse_roughness * | 漂浮 | 0 | 漫透射粗糙度 |
图 11:不透明纸平面(左)与通过 次表面散射对于固体对象(其 着色器参数:次表面散射
图 12:改变次表面散射半径的效果 ( 在介绍了我们提出的模型之后,在本节中,我们将讨论一些潜在的微妙之处、注意事项和未来改进的领域。 标量与 RGB 闭包权重考虑我们的镜面反射层公式,其中我们有闭包组合:
这里包括了 我们考虑的另一种方法(例如在 3ds Max 的物理材料模型中使用)是将乘法闭合因子保持为标量,例如在这种情况下 总的来说,我们更喜欢身体上正确的行为,但这是有争议的。 互惠物理上正确的 BSDF 必须满足互易性(即传入和传出方向交换下的对称性)。然而,在我们提出的模型中,即使叶级 BSDF 是互易的,闭包组合_也不是_。这是由于引入了 然而,强制互惠可能会使我们模型的数学形式显着复杂化,而不会产生质量上更好的视觉外观。对于许多渲染器,包括 Arnold——一种单向路径追踪器,可以违反互易的物理约束,即使在叶 BSDF 中,也不会导致任何实际问题。此外,以真正物理上正确的方式 [Jakob2014 ] 强制实施分层材料的互惠性目前过于复杂和繁琐,无法在生产渲染器中实现。在实际生产使用中实现互惠的模型,例如 Kulla 和 Estevez [Kulla2017 ] 的涂层方案,通过引入可能类似于此处描述的非互惠方法的不准确度的极端近似来实现。 因此,目前我们并不认为在我们的模型中加入互惠是绝对必要的。 分层模型我们的分层模型通过施工确保节能,并尽可能确保节能。然而,作为一个相对简单的模型,它只是根据近似 最近出现了许多对分层介质中全光传输的更准确处理 [Jakob2014 ] [Belcour2018 ] [Zeltner2018 ]。这些模型结合了通过整个层堆叠的各种反射和传输模式的影响,从而生成了最终的 BSDF(或一般的 BSSRDF),它不是每层 BSDF 的简单线性组合。 将来,我们希望研究过渡到更准确的模型,例如这样。然而,目前似乎所有可用模型的计算成本都更高,实现起来也更复杂。 我们至少在我们的模型中尝试合并一些由于手动层间交互而产生的最重要的影响。例如,我们允许涂层的粗糙度影响(部分)底层的粗糙度。 表面取向在透射情况下,光可能从表面法线的上方或下方入射。传输层对此很敏感,并确保光线正确地折射通过界面。但是,其他层的方向与_面向_法线方向一致,因此当对象从外部和内部受到撞击时,散射行为是相同的。这又是一种非物理近似,它在实践中很有用,因为它简化了逻辑而不会引入明显的视觉伪影。 用户友好性与灵活性我们的模型目前具有固定数量的层,其中仅包括两个镜面反射层,而其他一些流行模型(例如,皮克斯的 PxrSurface [Hery2017 ])允许更多可配置的层数。在生产环境中,这种将模型调整到精细程度的自由在某些情况下可能很有用。 然而,正如前面提到的,我们这里的一般理念是,最好提供一组相对最小的具有直观意义的用户友好参数,并使用组合方案确保任何给定的参数集都在物理合理性的范围内。在模型无法产生所需结果的边缘情况下,可以编写自定义着色器图。 在本文档中,我们描述了一个标准、通用表面着色器的提案,用于各种生产渲染环境。此模型基于 Arnold 渲染器中标准曲面着色器的当前实现。我们详细描述了构成模型的十个闭包,以及它们如何组合以生成最终着色器。 我们希望这个提议可以作为更广泛采用的标准表面着色器实现的有用基础。 作者要感谢 Mike Farnsworth、Lee Griggs、Arvid Schneider、Milos Hasan、Michael Nickelsky、Henrik Edstrom、Karl Schmidt、Niklas Harrysson、Marcel Reinhard 和 Davide Pesare 提供的有用意见和反馈。 [ Andersson2016 ] Zap Andersson。2016. 物理材料 (v1.01)。欧特克白皮书。 [ Belcour2017 ] Laurent Belcour 和 Pascal Barla。2017. 微面理论的实际扩展,用于建模不同的虹彩。_ACM 图形交易_, 36, 4. [ Belcour2018 ] Laurent Belcour。2018. 使用带有统计运算符的原子分解高效渲染分层材料。_ACM 图形交易_, 37, 4. [ Burley2012 ] 布伦特 · 伯利。2016. 迪士尼基于物理的着色。在 _ACM SIGGRAPH 2012 课程:电影和游戏制作中基于物理的实用阴影_。 [ Estevez2017 ] Alejandro Conty Estevez 和 Christopher Kulla。2017. 生产友好的 Microfacet Sheen BRDF。Sony Pictures Imageworks 技术报告。 [ Gritz2010 ] 拉里 · 格里茨、克利福德 · 斯坦、克里斯 · 库拉和亚历杭德罗 · 康蒂。2010. 开放着色语言。在 _ACM SIGGRAPH 2010 会谈中_。 [ Gulbrandsen2014 ] Ole Gulbrandsen。2014. 艺术家友好金属菲涅耳。_计算机图形技术杂志_,3、4。 [ Hery2017 ] Christophe Hery, Ryusuke Villemin, Junyi Ling. 2017. 皮克斯材料基金会。皮克斯技术报告。 [ Jakob2014 ] Wenzel Jakob、Eugene d'Eon、Otto Jakob 和 Steve Marschner。2014. 渲染分层材料的综合框架。_ACM 图形交易_, 33, 4. [ Langlands2014 ] 安德斯 · 朗兰兹。2014. Arnold 中基于物理的着色器设计。在 _ACM SIGGRAPH 2014 会谈中_。 [ Kulla2017 ] Christopher Kulla 和 Alejandro Conty Estevez。2017. 在 Imageworks 重新审视基于物理的着色。在 _ACM SIGGRAPH 2017 课程:理论和实践中基于物理的阴影_。 [ Zeltner2018 ] Tizian Zeltner 和 Wenzel Jakob。2018. 层实验室:各向异性表面反射率的加法和减法组合的微积分。_ACM 图形交易_, 37, 4. 1 为方便起见,允许我们的闭包列表不仅是严格的 BSDF,而且还包括发射分布函数 (EDF) 和双向次表面散射分布函数 (BSSRDF),这很有用。渲染器被理解为识别这些并适当地处理它们。 2 或者确实是 EDF 或 BSSRDF。 admin
博学之,审问之,慎思之,明辨之,笃行之。
|