Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范)

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 1
作者:Iliyan Georgiev, Jamie Portsmouth, Zap Andersson, Adrien Herubel, Alan King, Shinji Ogaki, Frederic Servant

本文档是Uber 表面着色器(Uber Surface Shader)的规范,旨在提供一种能够精确建模实际视觉效果,和动画制作中使用的绝大多数材质的表示方法。
遵循 Arnold 渲染器中的标准表面着色器(Standard Surface Shader)的设计,其实现过程相对简单,用户界面提供一组具有直观意义和范围参数设置。
本文档随着版本发展而更新。
我们提供了一个 OSL 实现方法的参考,意图指定足够的细节,以便在别的渲染器上实现,根据目的让效果匹配导一个合理的保真度级别。

一、历史背景与目标

计算鸡图形场景的资产,在不同设施之间的交换,在今天仍然是一个重要的问题,特别是在外观表现方面。不同的渲染器和 3D 渲染引擎,使用不同的着色系统、着色语言和固定的管道功能,这也是一个积极的可续研究课题。 然鹅,现在业界迫切需要找到一个标准化的材质模型,该模型既涵盖日常工作流程中,最常见的用例,又易于使用。

多年来,随着不同的供应商达成共识,将材料的定义与场景中的光传输模拟分离开来,出现了一些事实上的标准外观定义框架。这些通用框架包括 MaterialX、Material Definition Language (MDL)和 Open Language (OSL) [Gritz2010],它们允许将材料指定为原始表面反射率模型的组合。但是,仅使用这些框架是不够的,最终用户不应该期望从头开始构建用于日常任务的表面着色器。所以有必要使用一组良好的参数定义,来实现标准着色器的参数化,这些参数可以被调整,且用来表现大多数真实世界(以及假想的)材质。在这项提案中,我们的目标是填补这一空白;我们的参考实现是用 OSL [Georgiev2019]编写的。

我们提出的模型是基于 Arnold 5 标准表面着色器的,其中融合了 Anders Langlands 的 alSurface 和 Autodesk 3ds Max 的物理材质的强大威力。然而 alSurface 着色器作为行业的实际标准已经有一段时间了,但不再是积极开发的。而 3ds Max 的物理材料则受到 Allegorithmic 的 PBR 着色模型、迪斯尼的原则性着色器、以及多个实时 3D 引擎的行业趋势的强烈启发,并在 3ds Max 等所有主要渲染引擎的支持下得到了生产证明。

在这个建议中,我们并没有为每个可能出现的情况提供参数,而是有意地将实践中最有用的参数归结在一起。我们还修复了原始反射模型的组合,以确保用户工作中,尽可能保持在合理的物理范围内。我们的目标是使整个行为变得简单、合乎逻辑、直观和可理解,这样模型就涵盖了大多数日常用例。对于少数它没有覆盖的,你也可以独立开发特定的着色器,或建立一个定制的着色节点。

二、分层混合模型

我们的目标是创建一个表面着色模型,能够忠实地表现各种真实世界的材质。我们研究了金属、玻璃、墙漆等基本材料表面的光散射特性,并通过简单的分析模型得到了精确的表征。还有其他材料,如成品木材、布料或皮肤,由半透明的物质层叠加而成。这种材质的行为更复杂,是这些层介质之间的光散射和通过它们传播的结果,每一个这样的散射介质通常可以用一个分析模型来表示。
此外,许多现实世界中的物体是由几种不同的材质制成的,例如金属和塑料,通过在物体表面上对每种类型的材质,进行纹理处理,可以方便地对这些物体的外观进行开发。虽然材质转换通常来的很突然,但连续混合材质的能力,对于艺术目的和抗锯齿都是有用的。

这两个基本操作是:分层(Layering)和混合(Mixing),它提供了一种语言,来建模具有复杂外观的各种材质。为了使堆叠层具有物理意义,它的底部应该有一个不透明(如金属)或透明(如玻璃或皮肤)块,并在其顶部设置一组电介质板。任何在两层之间的介质上,没有反射的光,都会被向下传输到下层,在相应的介质中可选择吸收。混合操作可以被认为是两种材料的统计混合,即使不是所有的组合都有物理意义。作为一个线性插值,该操作自动保持能量守恒。

我们的着色器模型是由 10 个组件组成的材质,这些组件按层次结构分层和混合,如下所示。单个组件的属性可以在整个表面上发生变化。

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 2

上图是着色器模拟的理想材质模型的示意图。构件水平叠加表示统计混合,垂直叠加表示分层。用星号标记的组件是可选的,如第 2.2 节所述。

闭包混合表示法

给定一个着色点和一个视图方向,我们着色器的评估结果是一个双向散射分布函数(BSDF),它描述了在该点和方向上表面的光散射特性(加上一个自发光组件和一个次表面散射分布)。这个合成的 BSDF 表示由于在材质的整个结构中传播和散射,在最上层界面处的聚集光散射行为。

准确地模拟层状材质内部的光传播通常是困难的,而且计算量大,仍然是一个活跃的研究课题。我们的着色器采用了一种常见的实用方法,即生成的 BSDF 可以表示为“原子”构建块 BSDFs 的简单混合物(即线性组合)——上图中的每个组件都有一个 BSDFs。我们试图通过调整原子 BSDFs 的属性和线性组合权重,来模拟分层最重要的物理效果——颜色着色、反射/透射模糊和依赖角度的层透明度。

每个原子 BSDF,通常非正式地称为“波瓣(lobe)”,要么是反射函数,要么是透射分布函数,即 BRDF 或 BTDF(自发光和次表面散射除外)。在我们的实现中,这些 BSDFs 由闭包表示。闭包是一个“黑盒”对象,它包含用于评估和采样底层 BSDF 的特定于渲染器的例程。它由渲染程序定义和使用,但着色器用一组基本数据类型的参数(如浮点数、向量和颜色)进行实例化。

我们的着色器返回一个闭包对象列表,每个闭包对象都有一个关联的(颜色)权重。闭包的实例化参数和权重,可以由用户通过一组着色器参数来控制,以模拟各种物理上可信的材料。加权闭包的和完全描述了给定表面点的光发射和散射特性。闭包列表(如表 1 所示)最终被传递给渲染器,用于集成围绕阴影点的光传输。

Component(组件) Closure(闭包) Description
Transparency(透明度) transparency 简单的传递(Pass-through)(可以看作是 delta BTDF)
Coating(涂层) specular_brdf 电介质微表面(dielectric microfacet) BRDF (GGX)
Emission(自发光) emission 漫射自发光(diffuse emission)
Metal(金属) metal_brdf 导体微表面(conductor microfacet) BRDF (GGX)
Specular reflection(镜面反射) specular_brdf 电介质微表面(dielectric microfacet) BRDF (GGX)
Specular transmission*(镜面透射) specular_btdf 电介质微表面(dielectric microfacet) BTDF (GGX)
Sheen*(光泽) sheen_brdf 复古反射电介质微表面(retro-reflective dielectric microfacet) BRDF
Subsurface scattering*(次表面散射) subsurface 次表面散射(subsurface scattering) (例如:扩散 diffusion、随机游走 random-walk)
Diffuse transmission*(漫射透射) diffuse_btdf 漫射微表面(diffuse microfacet) BTDF (Oren-Nayar)
Diffuse reflection(漫射反射) diffuse_brdf 漫射微表面(diffuse microfacet) BRDF (Oren-Nayar)

上表示上图中所示的材料模型的每个组件的闭包列表。用星号标记的闭包是可选的,如第 2.2 节所述。

在近似(Approximately)模拟层之间光传播效应的同时,采用满足施工节能要求的公式计算了封层权值。可以说,这种最显著的影响是高光(介质)层的方向变化透明度,这是由它们的菲涅耳控制的半球方向反射率(又称方向反照率(directional albedo))造成的。我们将相应的 BRDF 闭包与基于其反射率的底层闭包进行权衡,并且我们的实现假设反射率(BRDF)函数可用来计算它。当反射率积分的解析表达式不能用于闭包时,可以通过蒙特卡罗估计来近似。

着色器的闭包权重计算逻辑,最容易被可视化为一棵树,其中每个叶子节点都是一个闭包,每个内部节点都是它的两个子节点的线性组合,在边缘指定权值。我们在下图中演示了这个树结构。每个闭包的最终权值是其对应的叶节点到根节点之间路径上的边权值的乘积。在下面的第 3 节中,我们将更详细地描述各个闭包和边缘权重。

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 3

图 2:我们的着色器返回根闭包 standard_surface,它是作为树中的叶子节点显示的“原子(atomic)”闭包的加权和。每个闭包的权值是从对应的叶子到根节点的路径上的边权值的乘积。边缘权重由着色器级参数参数化,粗体显示。

2.2 兼容模式

我们的模型的目标是相对简单的生产级应用程序,若处理实时引擎,但其闭包的数量和参数可能太多。对于这样的应用程序,我们定义了一个“预览”级别的兼容,在典型的情况下可以将着色器简化到一个合理的可视化的相似性级别。简化相当于将组合权重参数传输、光泽和 subsurface 归零,有效地消除了 specular_btdf、sheen_brdf、subsurface 和 diffuse_btdf 闭包。在这种兼容模式下,我们还忽略了其他闭包中的某些参数,这些参数在下一节的参数表中用星号标记。

三、闭包

在本节中,我们将描述着色器使用的各个闭包(见表 1)、它们的参数、权重。有些参数在闭包之间重用,因此在下面的小节中会多次出现。我们用粗体表示着色层参数,例如不透明度。

 

3.1 透明度

透明闭包没有实例化参数,使表面在着色点完全透明,即输入光线没有偏转和着色。
效果如下图所示。不透明度着色器参数控制所有其他闭包的相对权重(通过线性“Alpha”混合),因此透明度权重为 1-不透明度。
透明度和封闭涂层的组合通过以下公式是顶层混合物,最终得到标准表面封闭组合:

[pay point="28"]

standard_surface = (1 - opacity) * transparency() + opacity * coat_layer
标准材质 =(1 -不透明度)*透明度()+不透明度*涂层层
其中涂层闭包在下一小节中定义。
材质参数:透明
Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 4
不透明度(Opacity)与透射(Transmission)。从左到右:只有透射的球体,(二进制)不透明遮罩,透射和不透明遮罩的球体。

3.2 涂层

材质最上层散射层为介质的涂层,其表面为 GGX 微表面 BRDF(GGX microfacet BRDF)封闭涂层(Coat_Brdf)。作为一种电介质,这种 BRDF 服从菲涅耳(Fresnel)反射定律,不具有能量守恒性(即其方向反射率一般小于 1)。假定该层是无限薄的,剩余的非反射光直接传递到底层而不发生折射。反射色固定为白色,但涂层的中颜色可由用户控制。

闭包组合公式为
coat_layer = coat * coat_brdf(…)+ lerp(coat, white, coat_color * (1 - reflection (coat_brdf))) * emission_specular_mix
涂层=涂层*涂层 BRDF+lerp(涂层,白色,涂层颜色*(1-反射(涂层 BRDF)))*自发光 _ 镜面 _ 混合
其中 lerp(t, a, b) = (1 - t) * a + t * b,其中 emission_specular_mixed closure 定义如下:

在上面的闭包公式中,白色表示一个不变的白色。然后,涂层层实际上是“无操作”透通(当涂层参数为零时)和具有嵌入式吸收介质的电介质之间的统计混合。

在真实的物理材质中,当光通过有颜色的/粗糙的涂层时,被底层散射的光会被着色/模糊。在渲染器中准确捕捉这些效果需要依次模拟各个图层之间的光交互。由于我们的模型是独立评估闭包的简单线性组合,我们可以模拟这两个效应:

涂层下面的所有层着色都是通过使用涂层颜色参数缩放它们的闭合度来实现的,涂层颜色参数可以解释为涂层介质中对底层反射的着色(即能量被着色的涂层吸收)的吸收效果。

我们为涂层粗糙度提供了一个选项,以增加其他 GGX BSDFs 的粗糙度,即 metal_brdf、specular_brdf 和 specular_btdf。剩余的 BSDFs 没有被调制,因为它们已经很粗糙了。调制给定粗糙度的公式为
roughness = lerp(coat * coat_affect_roughness * coat_roughness, roughness, 1)
粗糙度= lerp(涂层 * 涂层 _ 效果 _ 粗糙度 * 涂层粗糙度, 粗糙度, 1)

着色器参数:涂层

Name 名称 Type 类型 Default 默认值 Description 描述
coat涂层 float 0 反射权重 reflection weight (反射颜色固定为白色)
coat_color涂层颜色 color 1,1,1 来自下层光的着色
coat_roughness涂层粗糙度 float 0.1 涂层反射粗糙度,内部平方,然后传递给 BSDF,以实现更线性的感知反应
coat_anisotropy*涂层各向异性 float 0 反射各向异性coat_brdf, 范围[0,1]
coat_rotation*涂层旋转 float 0 各向异性方向, 范围[0,1] (其中1 代表 180°)
coat_IOR涂层反射率 float 1.5 反射率索引 coat_brdf
coat_normal涂层法线 vector 0,0,0 涂层反射的着色法线,覆盖默认的着色法线,对闭包组合的权重没有影响。
coat_affect_color* 涂层效果颜色 float 0 对下层的漫射或次表面散射的颜色影响, 范围[0,1]
coat_affect_roughness* 涂层效果粗糙度 float 0 在多大程度上影响下层镜面反射层的粗糙度, 范围[0,1]

 

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 5

通过结合涂层和高光层可以实现的各种效果。从左到右:薄片,雨滴,碳纤维。

3.3 自发光

附加的定向均匀自发光(即朗伯 Lambertian)位于涂层下方,但不受施加于其他闭包的组合权重的节能逻辑的影响。我们将自发光体放置在涂层下面,这样就可以渲染被反射表面(例如荧光棒)包围的低自发光材料,而不需要对发射器和包围对象进行显式建模。

涉及自发光的闭包组合为:
emission_specular_mixture = emission * emission_color * emission() + specular_mixture
自发光 _ 镜面 _ 混合=自发光 * 自发光 _ 颜色 * 自发光() + 镜面 _ 混合
其中,specular_mix 闭包定义如下。

着色器参数:发射

Name 名称 Type 类型 Default 默认值 Description
emission自发光 float 0 自发光颜色倍增器
emission_color自发光颜色 color 1,1,1 自发光颜色

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 6
代表热熔岩的纹理图,与自发光物体的颜色相连

3.4 金属

涂层下的金属反射模型为 GGX 微表面导体 BRDF metal_brdf,其吸收系数和复杂折射率,由更加用户友好的参数 base_color 和 specular_color 计算,定义如下: 允许通过法线和入射切线情况下,直接指定(纹理)颜色来实现期望的外观。注意,这两个颜色参数也用于非金属(即电解质)高光和漫反射 BRDFs,如下所述。
该非透射金属 BRDF 与非金属(即电解质)高光层模型混合作为统计混合物,根据金属度参数如下:

specular_mixture = metalness * metal_brdf(...) + (1 - metalness) * specular_reflection_layer
镜面 _ 混合=金属度 * 金属 _brdf(…)+(1 - 金属度) * 镜面 _ 反射 _ 层
其中,specular_reflection_layer 闭包定义如下。

当厚度与光波波长的阶数相同的薄折射膜置于材质顶部时,由于干涉,会产生彩虹状的彩虹状彩虹效应。这些效果包含在微表面闭包中,适用于金属或镜面反射和透射层,以表现为准。薄膜在逻辑上位于涂层和底层之间,但由于假定涂层是无限薄的,因此薄膜外部介质的折射率被认为是真空折射率,即 1.0。它的内部被认为是镜面反射层。薄膜模型是建立在 Belcour 和 Barla 的基础上的。

着色器参数:金属

Name 名称 Type 类型 Default 默认值 Description 描述
base基础 float 0.8 标量乘法器到 base_color
base_color基础颜色 color 1,1,1 垂直入射时的反射颜色(即从正上方看的表面)
specular镜面 float 1 标量乘法器到 specular_color
specular_color镜面颜色 color 1,1,1 入射时的反射颜色(即轮廓周围)
specular_roughness镜面粗糙度 float 0.2 反射粗糙度;在传递到 BSDF 之前在内部进行平方,以便在参数范围内实现更均匀的粗糙度外观
specular_anisotropy*镜面各向异性 float 0 反射各向异性metal_brdf, 范围[0,1]
specular_rotation*镜面旋转 float 0 各向异性切线, 范围[0,1] (1 表示 means 180°)
thin_film_thickness* 薄膜 float 0 薄膜厚度(以纳米为单位)
thin_film_IOR*薄膜反射率 float 1.5 薄膜的折射率

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 7
通过设置 base_color 和 specular_color 参数,由 metal 闭包生成的金属。从左到右:铝、铜、金。

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 8
薄膜干涉对表面的影响。从左至右:彩绘车漆、肥皂泡、烧过的铬。

3.5 镜面反射

这一层模拟了一个 GGX 微表面电介质 BRDF(Specular_brdf),概念上就在涂层的正下方。与涂层类似,由于菲涅耳定律,该 BRDF 自身并不能量守恒,未反射的能量完全传输到底层。我们使用的闭包组合表示反射和透射镜面波瓣之间的能量平衡,然后

specular_reflection_layer = specular * specular_color * specular_brdf(...) + (1 - specular_color * specular * reflectance(specular_brdf)) * transmission_sheen_mix
镜面 _ 反射 _ 层=镜面*镜面 _ 颜色*镜面 _Brdf(…)+(1-镜面 _ 颜色*镜面*反射比(镜面 _Brdf))*透射 _ 光泽 _ 混合

其中传输光混合闭包定义如下。

着色器参数:镜面反射

Name Type Default Description
specular镜面 float 1 镜面反射权重
specular_color镜面 _ 颜色 color 1,1,1 镜面反射颜色
specular_roughness镜面粗糙度 float 0.2 反射粗糙度; 在传递给 BRDF 之前内部平方,以便在参数范围内获得更均匀的粗糙度外观。
specular_IOR float 1.5  specular_brdf的反射索引值
specular_anisotropy* float 0 specular_brdf反射各向异性, 范围 [0,1]
specular_rotation* float 0 各向异性方向, 范围 [0,1] (1 代表 180°)
thin_film_thickness* float 0 薄膜厚度(纳米)
thin_film_IOR* float 1.5 薄膜折射率

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 9
镜面折射率示意。从左到右:1.0、1.1、1.52(默认值)。

3.6 镜面透射 Specular Transmission

该层根据透射参数建模统计混合(根据透射参数),即通过 GGX 微表面 BTDF、镜面 Btdf、通过镜面反射层底部传输,或者从漫反射基础层(base_layer)散射。闭包组合由下公式给出
transmission_sheen_mix = transmission * transmission_color * specular_btdf(...) + (1 - transmission) * sheen_layer
透射 _ 光泽 _ 混合=透射*透射颜色*镜面 Btdf(...)+(1-透射)*光泽 _ 层

其中光泽层闭包定义如下。

透射闭合镜面反射 BTDF 与镜面反射 BRDF 共享许多参数,例如,​Spec_Btdf 的粗糙度默认与镜面粗糙度相同。它可以通过透射额外粗糙度参数进行额外增加或减少,尽管这在物理上不正确。就像镜面反射的 BRDF 一样,这种 BTDF 可以通过重复使用相同的参数通过薄膜进行再利用。

如果薄壁布尔参数为“假”,则该曲面被视为有限尺寸实体的边界。因此,根据 Specular_btdf 闭包,光线在进入和离开物体时会发生折射。如果薄壁是真的,那么表面是双面的,代表着一个无限薄的外壳(例如理想化的树叶或纸),因此光线不会在镜面透射到另一侧时发生折射。在这种情况下,折射率被设置为周围介质的折射率(例如,空气为 1.0),并且色散和薄膜被禁用。

我们还允许指定对象内部均匀介质的属性。这对于模拟相当厚的液体或有足够的介质且可以看到散射的地方则很有用,例如蜂蜜、深水体、乳白色玻璃或奶色玻璃。透射颜色和透射深度参数,对于艺术家是一种常用且友好的方式,来设置介质吸收系数,而透射散射直接设置介质散射系数。这些参数允许渲染对象,如彩色玻璃或浑水。

着色器参数:镜面透射

Name 名称 Type 类型 Default 默认值 Description 描述
transmission*透射 float 0 透射权重
transmission_color*透射颜色 color 1,1,1 透射颜色,因吸收而产生的色调
transmission_depth*透射深度 float 0 根据比尔(Beer's)定律,在材质变为透射颜色之前(transmission_color)之前,白光在材质内部传输的距离
transmission_scatter*透射散射 color 0,0,0 用色彩来模拟物体内部光散射产生的模糊度
transmission_scatter_anisotropy*透射散射各项异性 float 0 物体内部介质相函数的各向异性, 范围 [-1,1]
transmission_dispersion*透射色散 float 0 色散阿贝数,描述折射率在波长上的变化
​transmission_extra_roughness*透射扩展粗糙度 float 0 specular_roughness附加(正或负)粗糙度
specular_roughness镜面粗糙度 float 0.2 折射粗糙度位 specular_btdf,内部平方,然后传递给 BTDF,以获得更均匀的粗糙度参数范围 [0,1]
specular_IOR镜面折射率 float 1.5 specular_btdf折射率
specular_anisotropy*镜面各向异性 float 0  specular_btdf反射各向异性, 范围[0,1]
specular_rotation*镜面旋转 float 0 各向异性方向, 范围[0,1] ( 1 代表 180°)
thin_film_thickness*薄膜厚度 float 0 薄膜厚度
thin_film_IOR*薄膜折射率 float 1.5 薄膜折射率
thin_walled*薄壁 boolean false 如果为真,则认为物体是无限薄的,表面是双面(double-sided)的

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 10
透射-散射-各向异性(transmission_scatter_anisotropy)的效果。从左到右:- 0.5,0.0,0.5。

3.7 光泽 Sheen

基于 Estevez 和 Kulla[Estevez2017]的 Sheen-brdf 闭包,是一个微表面 Sheen-brdf。它模拟了织物的外观,其中表面的面是圆柱形的“纤维”,其轴线平行于表面发现,在掠射角处产生镜面高光。从概念上讲,这位于基础底的顶部,因此传输到基础底层的能量被光泽反射降低:

sheen_layer = sheen * sheen_color * sheen_brdf(...) + (1 - sheen * reflectance(sheen_brdf)) * base_mix
光泽 _ 层=光泽*光泽 _ 颜色*光泽 _brdf(…)+(1-光泽*反射(光泽 _brdf))*基础 _ 混合

其中基础混合闭包定义如下。

着色器参数:光泽

Name 名称 Type 类型 Default 默认值 Description 描述
sheen*光泽 float 0.8 sheen_brdf反射权重
sheen_color*光泽颜色 color 1,1,1  sheen_brdf反射颜色
sheen_roughness*光泽粗糙度 float 0.3  sheen_brdf反射粗糙度, 范围 [0,1]

 

 

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 11

使用光泽闭包处理的各种纺织品

3.8 漫射反射 Diffuse reflection

基础层由奥伦-纳亚尔(Oren-Nayar)漫反射组件和次表面组件的统计混合物(根据次表面参数)组成:

base_mix = (1 - subsurface) * base * base_color * diffuse_brdf(...) + subsurface * subsurface_mix
基础 _ 混合 = (1 - 次表面) * 基础 * 基础 _ 颜色 * 基础 _brdf(...) + 次表面* 次表面 _ 混合

subsurface_mix 闭包定义如下

着色器参数:漫反射

Name 名称 Type 类型 Default 默认值 Description 描述
base基础 float 0.8 diffuse_brdf反射权重
base_color基础颜色 color 1,1,1 diffuse_brdf反射颜色
diffuse_roughness*漫射粗糙度 float 0  diffuse_brdf反射粗糙度

3.9 漫射透射 Diffuse transmission

如果薄壁是真的,则次表面组件退化为漫射透射。这表示一个无限薄的壳(例如一张理想化的粗糙纸),通过它能量被传输到一个漫反射波瓣。

漫反射透射模型是通过一个奥伦-纳亚尔(Oren-Nayar)微表面 BRDF 翻转着色法线,使其成为一个 BTDF:

subsurface_mix = thin_walled * subsurface_color * diffuse_btdf(...) + (1 - thin_walled) * subsurface(...)
次表面 _ 混合 = 薄壁 * 次表面 _ 颜色 * 漫射 Btdf(...) + (1-薄壁) * 次表面(...)

次表面的描述如下。

着色器参数:漫反射透射

Name 名称 Type 类型 Default 默认值 Description 描述
subsurface*次表面 float 0 漫射透射权重
subsurface_color*次表面颜色 color 1,1,1 漫射透射颜色
diffuse_roughness*漫射粗糙度 float 0 漫射透射粗糙度

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 12

不透明纸平面(左)与通过薄壁(右)启用的漫反射透射。

3.10 次表面散射 Subsurface scattering

对于固体(薄壁是假的),次表面散射模拟了光在表面下传播和扩散的效果,通常情况下,出射光线离开的表面位置与入射光线不同。这种效果是通过比表面闭包来表现的,我们没有规定要使用一个特定的渲染模型,例如基于扩散剖面表面光照模糊或暴力次表面光线跟踪。

着色器参数:次表面散射

Name 名称 Type 类型 Default 默认值 Description 描述
subsurface*次表面散射 float 0 次表面散射权重
subsurface_color*次表面散射颜色 color 1,1,1 次表面散射颜色,使用 subsurface(...) 闭包
subsurface_radius*次表面散射半径 color 1,1,1 红色、绿色和蓝色通道的次表面半径(即自由路径 free path)
subsurface_scale*次表面散射比例 float 1  subsurface_radius标量比例
subsurface_anisotropy*次表面散射各向异性 float 0 次表面介质相(phase)函数的各向异性, 范围[-1,1]

Arnold(C4DToA)阿诺德渲染教程(112):Arnold Standard Surface 标准表面材质白皮书(Uber Surface Shader 规范) - R站|学习使我快乐! - 13

调整次表面散射半径(subsurface_radius)的效果

四、论述

在介绍了我们提出的模型之后,在本节中,我们将讨论一些潜在的微妙之处、注意事项和未来改进的领域。

4.1 标量与 RGB 闭包权重 Scalar vs. RGB closure weighting

仔细考虑一下我们的镜面反射层公式,其中有闭包组合:

specular_reflection_layer = specular * specular_color * specular_brdf(...) + (1 - specular_color * specular * reflectance(specular_brdf)) * transmission_sheen_mix

镜面 _ 反射 _ 层=镜面*镜面 _ 颜色*镜面 Brdf(...)+(1-镜面 _ 颜色*镜面*反射(镜面 Brdf))*透射 _ 光泽 _ 混合

这里包含了反射镜面颜色(Specular_color)因子乘以反射率(specular_brdf),以确保能量守恒。例如,如果反射是纯红色,则只有互补的青色被传输到底层。这样可以在组合模型中防止能量损失,并创建具有高反照率的多层材料。但是,虽然它在物理上是正确的,但它也会使艺术家更难控制波瓣的互补色色调的外观。

我们考虑的另一种方法(例如在 3ds Max 的物理材质模型中使用)是将乘法闭包因子保留为标量,例如在本例中闭包权重中忽略了镜面颜色(specular_color)。这在技术上违反了能源的守恒(即能源的非物理耗散),使它难以创建高反射率材料与彩色镜面反射。然而,这样的行为对艺术家来说更直观。

总的来说,我们更喜欢物理上正确的行为,然而这是有争议的。

4.2 互相作用 Reciprocity

一个物理上正确的 BSDF 必须满足互易性(即输入和输出方向交换下的对称性)。然而,在我们提出的模型中,即使叶(leaf-level)BSDFs 是相对应的,但闭包组合不是。这是由于引入了反射 reflectance(…)函数,它只依赖于入射方向。如果将阴影模型合并到某些光传输算法中,这可能会出现问题,比如双向路径追踪(bidirectional path tracin),而双向路径追踪依赖于该属性来保持。

然而,如果不产生上更好的视觉外观品质,强制互相作用可能会使我们的模型的数学形式显著复杂化。对于许多渲染器,包括单向路径跟踪器 Arnold,即使在 leaf BSDFs 中,也可以违反互相作用的物理约束,而不会造成任何实际问题。此外,以一种真正正确的物理方式实现分层材质的对等性(Jakob2014)目前过于复杂和繁琐,无法在生产渲染器中实现。在实际生产中使用的实现互相作用的模型,如 Kulla 和 Estevez 的涂层方案[Kulla2017],通过引入类似于本文描述的非互相作用的方法,用强大的近似来实现互相作用,但不精确。

因此,目前我们并不认为在模型中加入互相作用是绝对必要的。

[/pay]

4.3 层模型 Layering model

我们的分层模式确保结构上节能,并在可能的情况下能量守恒。然而,作为一个相对简单的模型,仅仅是闭包的线性组合,并根据近似反射率 reflectance(…)函数调整权值,它并不是我们所描述的层间光传输的物理精确模拟。

最近出现了许多关于分层介质中,全光传输的更精确的处理方法[Jakob2014] [Belcour2018] [Zeltner2018]。这些模型包含了通过整个层堆栈的各种反射和传输模式的影响,从而生成最终的 BSDF(或一般的 BSSRDF),这不是每层 BSDFs 的简单线性组合。

在未来,我们将研究如何过渡到更精确的模型。然而,目前似乎所有可用的模型计算起来都更加昂贵,实现起来也更加复杂。

我们尝试至少在我们的模型中包含一些最重要的影响,这些影响是由手工的层间交互产生的。例如,我们允许涂层的粗糙度影响(一些)底层的粗糙度。

4.4 表面方向 Surface orientation

在透射的情况下,光可以从正常的表面上方或表面下方入射。透射层对此很敏感,并确保光线通过介质正确折射。然而,其他层是面向 w.r.t.法向的,所以当物体从外部和内部被击中时,散射行为是相同的。这也是一种非物理近似,在实践中非常有用,因为它简化了逻辑,而没有引入明显的人工痕迹视觉。

4.5 用户友好性和灵活性 User-friendliness vs. flexibility

我们的模型目前有固定的层数,其中只包括两个镜面层,而其他一些流行的模型(例如皮克斯的 PxrSurface [Hery2017])允许更多的可配置层。在生产环境中,这种将模型对于自由度,在某些情况下是有用的。

然而,正如前面提到的,我们这里的一般原则是,最好提供一组具有直观意义、相对最少、对用户友好的参数,并使用一种组合方案来确保任何给定的参数集都在物理合理性的范围内。在模型不能产生所需结果的边缘情况下,可以创建自定义着色器图像。

五、结论 Conclusion

在本文档中,我们描述了一个标准的、通用的表面着色器的建议,该着色器可用于各种生产渲染环境。该模型基于 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. Physical Material (v1.01). Autodesk white paper.
[Belcour2017] Laurent Belcour and Pascal Barla. 2017. A Practical Extension to Microfacet Theory for the Modeling of Varying Iridescence. ACM Transactions on Graphics, 36, 4.
[Belcour2018] Laurent Belcour. 2018. Efficient Rendering of Layered Materials using an Atomic Decomposition with Statistical Operators. ACM Transactions on Graphics, 37, 4.
[Burley2012] Brent Burley. 2016. Physically-based Shading at Disney. In ACM SIGGRAPH 2012 Courses: Practical Physically Based Shading in Film and Game Production.
[McDermott2018] Wes McDermott. 2018. The PBR Guide. Allegorithmic. https://www.allegorithmic.com/pbr-guide.
[Estevez2017] Alejandro Conty Estevez and Christopher Kulla. 2017. Production Friendly Microfacet Sheen BRDF. Sony Pictures Imageworks technical report.
[Georgiev2019] Iliyan Georgiev, Jamie Portsmouth, Zap Andersson, Adrien Herubel, Alan King, Shinji Ogaki, Frederic Servant. 2019. A Surface Standard: OSL reference implementation. https://github.com/Autodesk/standard-surface/blob/master/reference/standard_surface.osl.
[Gritz2010] Larry Gritz, Clifford Stein, Chris Kulla, and Alejandro Conty. 2010. Open Shading Language. In ACM SIGGRAPH 2010 Talks.
[Gulbrandsen2014] Ole Gulbrandsen. 2014. Artist Friendly Metallic Fresnel. Journal of Computer Graphics Techniques, 3, 4.
[Hery2017] Christophe Hery, Ryusuke Villemin, Junyi Ling. 2017. Pixar's Foundation for Materials. Pixar technical report.
[Jakob2014] Wenzel Jakob, Eugene d'Eon, Otto Jakob, and Steve Marschner. 2014. A Comprehensive Framework for Rendering Layered Materials. ACM Transactions on Graphics, 33, 4.
[Langlands2014] Anders Langlands. 2014. Physically Based Shader Design in Arnold. In ACM SIGGRAPH 2014 Talks.
[Kulla2017] Christopher Kulla and Alejandro Conty Estevez. 2017. Revisiting Physically Based Shading at Imageworks. In ACM SIGGRAPH 2017 Courses: Physically Based Shading in Theory and Practice.
[Zeltner2018] Tizian Zeltner and Wenzel Jakob. 2018. The Layer Laboratory: A Calculus for Additive and Subtractive Composition of Anisotropic Surface Reflectance. ACM Transactions on Graphics, 37, 4.

注释:为了方便起见,我们闭包列表允许的不仅仅是 BSDF,而且还包括一个发射分布函数(EDF)和一个双向次表面散射分布函数(BSSRDF)。渲染器理解为识别这些,并适当地处理它们。

相关推荐:

【R 站出品】中文字幕 《Arnold5 阿诺德渲染器终极指南》The Ultimate Introduction to Arnold 5 for Cinema 4D 视频教程 强烈推荐!!!

【R 站翻译】中文字幕 C4D《Aronld(C4DtoA)阿诺德真实材质渲染宝典》视频教程(含工程) 强烈推荐

Arnold(C4DtoA)

【R站译制】中文字幕 《Arnold5阿诺德渲染器终极指南》强大的3渲2卡通材质 02自定义风格 Toon Shader 视频教程

2019-5-21 8:08:57

Arnold(C4DtoA)

【R站译制】中文字幕 《Arnold5阿诺德渲染器终极指南》强大的3渲2卡通材质 03复杂风格&像素风格 Toon Shader 视频教程

2019-5-28 19:29:32

17 条回复 A文章作者 M管理员
  1. 谢谢分享

  2. 谢谢分享

搜索