Maya 学习日志:Arnold(阿诺德)aiStandardSurface(标准曲面着色器)

标准曲面

标准曲面着色器是一种基于物理的着色器,能够生成许多类型的材质。它包括漫反射层、适用于金属的具有复杂菲涅尔的镜面反射层、适用于玻璃的镜面反射透射、适用于皮肤的次表面散射、适用于水和冰的薄散射、次镜面反射涂层和灯光发射。

此着色器对包含十个组件的材质进行建模,这些组件会进行分层并按层次结构进行混合,如下图所示。各个组件的特性在曲面上会发生变化。
standard_surface 模拟的理想化材质模型的示意图。组件的水平堆叠表示统计混合,垂直堆叠表示分层。标有星号的组件是可选组件。

材质类型

默认情况下,这些参数适用于塑料、木材、石头等材质。通过将几个关键参数设置为 1,可以快速创建不同类型的材质:

  • Metalness(金属度):金、银、铁、汽车涂料。
  • Transmission(透射):玻璃、水、蜂蜜、肥皂泡。
  • Subsurface(次表面):皮肤、大理石、蜡、纸、树叶。
  • Thin Walled(薄壁):纸、树叶、肥皂泡。

介于 0 和 1 之间的参数值可用于创建由基本材质类型混合而成的比较复杂的材质。

能量守恒

默认情况下,标准曲面着色器能量守恒。其所有层是保持平衡的,以使离开曲面的光量不超过入射光的量。例如,随着曲面的金属特性增强而使镜面反射层贡献增加,漫反射层贡献会随之减小以确保能量守恒。
Arnold 中提供的标准曲面材质预设示例

使用值大于 1 的层权重或颜色时,能量守恒会被打破。建议不要创建此类材质,因为在不同的照明下,它们的表现不可预料,并可能导致噪波增加及渲染性能降低。

由于控件数量较多,标准曲面着色器分为若干个组。以下将分别详细介绍每个组的设置。

属性编辑器

Base(基础)

  • Weight(权重)

    基础颜色权重(默认值为 0.8)。

    0
    0.5
    1
  • Color(颜色)

    基础颜色设置使用白色光源(强度为 100%)直接照亮时的曲面亮度。它定义灯光在曲面下散射时,未被吸收的 RGB 光谱的每个分量百分比。金属的基础颜色通常为黑色或非常暗,但是,生锈的金属需要一些基础颜色。通常需要基础颜色贴图。

    红色
    绿色
    蓝色
  • Diffuse Roughness(漫反射粗糙度)

    基础组件会遵循具有曲面粗糙度的 Oren-Nayar 反射模型。如果值为 0.0,则相当于 Lambert 反射。值越高,会产生越粗糙的曲面,看起来更适用于混凝土、灰泥或沙子等材质。

    0(默认值)
    0.5
    1
  • Metalness(金属度)

    金属度为 1.0 时,曲面的表现类似于金属,使用完全镜面反射和复杂菲涅尔。

    0(默认值)
    0.5
    1
    要获得非常清晰、堪比镜子的反射,请将“金属度”(Metalness)增加到 1 并将镜面反射的“粗糙度”(Roughness)降低到 0。将基础“权重”(Weight)设置为 1。
    启用了“金属度”(Metalness)时,镜面反射的“权重”(Weight)和“颜色”(Color)仅控制边染色,而“基础”(Base)仍受粗糙度影响。
  • 金属外观由“基础颜色”(Base Color)(朝向)和镜面反射的“颜色”(Color)(边染色)参数控制。这些会自动转换为物理 η 和 κ 值以达到相同的外观,但具有可轻松调整和设置纹理的颜色。下面是金属的一些实际值示例。

    金属色块基础颜色(Base Color)色块镜面反射颜色(Specular Color)
    铝 (Al)0.912 0.914 0.9200.970 0.979 0.988
    铜 (Cu)0.926 0.721 0.5040.996 0.957 0.823
    金 (Au)0.944 0.776 0.3730.998 0.981 0.751
    铁 (Fe)0.531 0.512 0.4960.571 0.540 0.586
    铅 (Pb)0.632 0.626 0.6410.803 0.808 0.862
    汞 (Hg)0.781 0.779 0.7790.879 0.910 0.941
    镍 (Ni)0.649 0.610 0.5410.797 0.801 0.789
    铂 (Pt)0.679 0.642 0.5880.785 0.789 0.784
    银 (Ag)0.962 0.949 0.9220.999 0.998 0.998
  • 铝铜金铁铅汞镍铂银

Specular(镜面反射)

  • 权重(Weight)

    镜面反射权重。影响镜面反射高光的亮度。

    0
    0.5
    1(默认值)
  • Color(颜色)

    用于调整镜面反射的颜色。使用此颜色为镜面反射高光“染色”。您仅应对某些金属使用彩色镜面反射,而非金属曲面通常应采用单色镜面反射颜色。非金属曲面通常没有彩色镜面反射。

    红色
    绿色
    蓝色
  • Roughness(粗糙度)

    控制镜面反射的光泽度。值越小,反射越清晰。对于两种极限条件,值为 0 将带来完美清晰的镜像反射效果,而 1.0 则会产生接近漫反射的反射效果。

    0.2(默认值)
    0.4
    0.6

    曲面的“微小”特征会影响灯光的漫反射和反射。这种“微曲面”的细节对镜面反射的影响最为明显。 在下图中,当每束光线以不同方向射到曲面的某个部位时,平行入射光在从粗糙曲面反射之后开始变得发散。总之,曲面越粗糙,反射光越发散或越“模糊”。
    通常用来衡量粗糙度的“微曲面”细节(此曲面的镜面反射“粗糙度”(Roughness)值较高)。

  • IOR(折射率)

    IOR(折射率)参数定义了材质的菲涅尔反射率,并且默认情况下使用角函数。实际上,IOR 将定义曲面上面向查看者的反射与曲面边上的反射之间的平衡。您可以看到反射强度保持不变,但前侧的反射强度发生很大变化。

    1
    1.1
    1.5(默认值)
    使用非常高的 IOR 值的效果与使用“金属度”(Metalness)非常相似。如果将“基础颜色”(Base Color)设置为镜面反射的“颜色”(Color),并将镜面反射的“颜色”(Color)设置为黑色,则看起来相同。区别在于,边上会有额外的反射,且由镜面反射的“颜色”(Color)控制边染色。金属菲涅尔的工作方式与新的复数折射率着色器相同,并使用适合艺术家的参数。
    通常,应该为塑料、玻璃或皮肤等材质(绝缘体菲涅尔)使用 IOR,为金属(传导菲涅尔,使用“复数折射率”(Complex IOR))使用“金属度”(Metalness)。另一个原因在于,“金属度”(Metalness)更易于设置纹理,因为它在 0 到 1 的范围内,并且在使用“金属度”(Metalness)而非 IOR 时,使用应用程序(例如 Substance Painter)中的纹理最适合。
  • 镜面反射 IOR 与透射
    默认值 1.0 是真空的折射率,也就是说,真空空间中 IOR 为 1.0 的对象不会折射任何光线。简而言之,1.0 表示“无折射”。标准曲面着色器假定任意几何体的法线朝外,对象处于大气之中(IOR 为 1.0),并假定没有重叠曲面。

    11.11.21.31.41.5
    1
    1.5(默认值)
  • Anisotropy(各向异性)

    “各向异性”(Anisotropy)在反射和透射灯光时具有方向偏差,使得材质在某些方向上显得更粗糙或更光亮。“各向异性”(Anisotropy)的默认值为 0,表示“各向同性”。当您移动控制柄接近 1.0 时,曲面将在 U 轴上变得更具各向异性。

    0(默认值)
    0.6
    0.9

    “各向异性”(Anisotropy)适用于具有清晰笔刷方向的材质。例如,具有微小凹槽的拉丝金属,其中将形成“拉伸”各向异性反射。
    许多小圆盘放在一起形成各向异性高光效果

    0(默认值)
    0.6
    0.9

    各向异性反射有助于形成拉丝金属效果,如下例所示:
    为各向异性旋转指定了纹理

  • Rotation(旋转)

    旋转值将更改 UV 空间中各向异性反射的方向。值为 0.0 时,不会出现任何旋转。值为 1.0 时,呈现效果将旋转 180 度。对于采用拉丝金属的曲面,这将控制拉丝材质的角度。对于金属曲面,各向异性高光应在与拉丝方向垂直的方向上拉伸。

    0(默认值)0.250.50.751

Transmission(透射)

  • 权重(Weight)

    对于玻璃或水等材质,透射允许灯光穿过表面发生散射。

    0(默认值)
    0.5
    1
    请注意,对于已指定标准曲面着色器的网格,还必须禁用“不透明”(Opaque)属性。
    如果在应该透明的地方只能看到黑色,则可能是折射光线深度值(位于“渲染设置”(Render Settings)的“光线深度”(Ray Depth)部分)不够高。默认值为 2。
  • Color(颜色)

    此项会根据折射光线的传播距离过滤折射。灯光在网格内传播得越长,受透射颜色的影响就会越大。因此,光线穿过较厚的部分时,绿色玻璃的颜色将更深。此效应呈指数递增,可以使用比尔定律进行计算。建议使用精细的浅颜色值。

    如果使用完全饱和的颜色(例如 (1, 0, 0)),解释方式为允许所有红色灯光穿过,而不允许绿色和蓝色灯光穿过。如果透射的“颜色”(Color)值接近 0,则网格内部非常密集以至于阻止所有灯光,之后将“深度”(Depth)倍增设置为较小值(例如 0.001)可能不会产生多大差异,因为“深度”(Depth)还是很大。不建议透射颜色使用完全饱和的颜色。
    红色
    绿色
    蓝色
  • 如果该值具有某种颜色,并且需要使用该颜色进行染色的阴影,则对指定了标准曲面着色器的网格禁用“不透明”(Opaque)属性。在下面的示例中可以看到,当启用“不透明”(Opaque)时,光线无法穿过球体。 反之,当禁用“不透明”(Opaque)时,光线可以穿过球体并吸收透射“颜色”(Color)设置的颜色,从而创建彩色阴影的效果。

    不透明(Opaque):启用
    不透明(Opaque):禁用
    请注意,除非启用“薄壁”(Thin Walled),否则透射“颜色”(Color)将不适用于单面几何体。
    禁用
    启用。透射颜色可见。
  • Depth(深度)

    控制透射颜色在体积中达到的深度。 增大此值会使体积变薄,这意味着吸收和散射减少。它是一个比例因子,使您可以设置透射颜色,然后调整“深度”(Depth),以适合对象大小。

    1
    2
    10

    可以在下面的动画中看到增加透射“深度”(Depth)后的效果。请注意,在本例中也使用了透射散射颜色。

    深度依赖于场景比例,可以对其外观产生显著影响。 透射“颜色”(Color)和“深度”(Depth)控制透射/吸收,并且与对象比例有关。 因此,对于要查看任何内容的小对象,可能需要设置非常低的“深度”(Depth),而对于大对象,则需要设置较大“深度”(Depth)。如果您无法看到“深度”(Depth)的效果,则可能需要检查场景的大小。

    如果场景比例太小,透射“深度”(Depth)为 1 时,透射“颜色”(Color)(橙色)看起来不正确(左图)。降低透射“深度”(Depth)可修复此问题(右图)。建议按真实世界比例进行建模,以避免这些情况的发生。

    1
    0.01
  • Scatter(散射)

    透射散射适用于各类相当稠密的液体或者有足够多的液体能使散射可见的情况,例如深水体或蜂蜜。 如果是一杯水,没有多少散射,但如果是海洋,它是必需的。其他示例包括冰、乳白色玻璃或奶白色玻璃等材质。

    黑色(默认值)
    橙色(适合厚粘性液体,如蜂蜜)
    为了使散射发挥作用,应对已指定标准曲面着色器的网格禁用“不透明”(Opaque)。
  • Scatter Anisotropy(散射各向异性)

    散射的方向偏差或各向异性。默认值零表示等向散射,灯光在所有方向上均匀散射。正值在灯光方向上向前偏差散射效果,而负值则朝灯光向后偏差散射效果。

    -0.5
    0(默认值)
    0.5
  • Dispersion Abbe(色散系数)

    指定材质的色散系数,用于描述折射率随波长变化的程度。对于玻璃和钻石,此值通常介于 10 到 70 之间,值越小,色散越多。默认值为 0,表示禁用色散。通过增加全局摄影机 (AA) 采样或折射采样,可以减少色度噪波。

    1
    3
    6
  • 透射色散非常适用于钻石等宝石材质。

  • Extra Roughness(附加粗糙度)

    对使用各向同性微面 BTDF 所计算的折射增加一些额外的模糊度。范围从 -1 到 1,其中 0 表示无粗糙度。其计算方式为:

    • 透射粗糙度 = 镜面反射粗糙度 + 透射附加粗糙度
      0(默认值)
      0.5
      1
    • 如果值为负,透射粗糙度将低于反射粗糙度。
      0(默认值)
      -1
  • Transmit AOVs(透射 AOV)

    如果启用,透射将穿过 AOV。 如果背景是透明的,透射曲面将变得透明,以便可以合成到另一个背景上。透射将穿过灯光路径表达式 AOV,因此透过透射曲面观察时,漫反射曲面最终将在 diffuse AOV 中。另外,透射还可直接穿过其他 AOV(无需任何不透明度混合),这可以用来创建遮罩。
    Alpha 遮罩


Subsurface(次表面)


次表面散射 (SSS) 用于模拟灯光进入物体并在其表面下方散射的效果。并非所有灯光都会从表面反射回来。其中有些灯光将穿透到照明对象的表面下方。这些灯光将会被材质吸收并在内部散射。其中一部分散射灯光将返回到表面之外,并对摄影机可见。这称为“次表面散射”或“SSS”。要实现大理石、皮肤、树叶、蜡和牛奶等材质的逼真渲染,SSS 必不可少。此着色器中的 SSS 组件将使用暴力式光线跟踪方法计算得出。

  • 权重(Weight)

    在漫反射与次表面散射之间“混合”。设置为 1.0 时,只有次表面散射;设置为 0 时,只有 Lambert。大多数情况下,应将此属性设为 1.0(完全次表面散射)。

    0(默认值)
    0.5
    1
  • SubSurface Color(次表面颜色)

    用于确定次表面散射效果的颜色。例如,复制皮肤材质时,意味着将其设置为肉色。

    苹果鸡肉奶油蕃茄酱大理石
    土豆脱脂牛奶皮肤 1皮肤 2全脂牛奶
  • Radius(半径)

    可简单理解为整体的透光度,可更改颜色(类似于透光滤镜)。光线在曲面之下可以散射的大概距离,也称为“平均自由程”(MFP)。此参数影响光线在再度散射出曲面前在曲面下可能传播的平均距离。您可以分别为每个颜色分量指定这种距离效果。增大此值,次表面散射的外观将变得平滑,减小此值则会使外观更加浑浊不清。
    0.25
    0.5
    1(默认值)

    颜色越浅,散射的灯光越多。值为 0 时不会产生任何散射效果。

    渲染皮肤时,您应使用类似 1.0, 0.35, 0.2 的值,表示红色应该散射得最深,绿色和蓝色应该散射得较浅。这将替换皮肤的三层式工作流(深层、中等层和浅层),使深层为红色,以表示深层应在更大的半径范围内散射。只需将 scatter_radius.R 设置为较大的值即可。
    红色
    白色(默认值)
  • Scale(比例)

    此参数控制灯光在再度反射出曲面前在曲面下可能传播的距离。 它将扩大散射半径,并增加 SSS 半径颜色。

    0
    1(默认值)
    2
    如果场景以米为单位,则可将“SSS 比例”(SSS Scale)设置为 0.01 来指定以厘米为单位的“SSS 半径”(SSS Radius)。 例如,对于皮肤,“SSS 半径”(SSS Radius)可以是 0.37cm0.14cm0.07cm
  • 类型

    • 散射
      使用单一层时,可以捕捉曲面细节和深散射。设计为非常接近完全 Monte-Carlo 模拟的特征,同时保留近似值,这样,与完全随机行走相比,求值开销小很多。
    • 随机行走(默认值)
      与基于漫反射理论的经验性 BSSRDF 方法不同,“随机行走”(Randomwalk)方法实际使用真实的随机行走在曲面下进行跟踪,并且不假设几何体是局部平坦的。这意味着它可以照顾到暴力式体积渲染这样的各向异性散射,并且在凹处和小细节周围生成的效果要好得多。另外,对于较大的散射半径(即较大的平均自由程),它也比漫反射要快得多。但是,“随机行走”(Randomwalk)在致密介质(即较小的 mfp)中速度更慢,不支持使用 sss_setname 将两个曲面融合在一起,可能需要重新整理材质才能获得相似的外观,并且对非闭合网格、“开口袋”和可能会投射阴影的内部几何体更加敏感。
    • 随机行走 v2
      此方法可穿过高度透明/光学薄对象更加准确深入地进行散射,从而产生 SSS,且对象的精细曲面细节和背光严重的区域周围的颜色更加饱和。请注意,与使用原始方法相比,渲染的开销和噪波将会增加,因为随机行走的平均时间和随机性将会增加。
  • 散射
    随机行走(默认值)
    随机行走 v2
  • Anisotropy(各向异性)

    Henyey-Greenstein 各向异性系数介于 -1(完全背向散射)和 1(完全正向散射)之间。 默认值 0 表示各向同性散射介质,这种情况下,灯光在所有方向均匀散射,从而产生一致的效果。 正值在灯光方向上向前偏差散射效果,而负值则朝灯光向后偏差散射效果。

    此参数仅适用于“随机行走”(randomwalk)这种 SSS 方法。
    -0.7
    0(默认值)
    0.7

Geometry(几何体)

  • Thin Walled(薄壁)

    薄壁还可以提供从背后照亮半透明对象的效果(着色点由指定的一部分灯光“照亮”,这些灯光会在该点照射到对象的背面)。 建议仅将此功能用于较薄的对象(单面几何体),因为具有厚度的对象可能无法正确渲染。

    启用。对象背后的背景不折射。
    禁用
  • “薄壁”(Thin Walled)非常适用于薄(单面)对象,例如气泡。

    禁用(默认值)
    启用
  • 薄壁半透明
    这种效果的外观类似于薄纸片,让一部分光线穿到背面。
    对于漫反射曲面(例如纸),启用“薄壁”(Thin Walled),并设置次表面“权重”(Weight)(例如设置为 0.5),则会反射一半灯光,透射一半灯光。

    禁用(默认值)
    启用

    在某些情况下,“薄壁”(Thin Walled)可能适合于有厚度的情况。 但是,对具有厚度的对象使用“薄壁”(Thin Walled)时,应确保漫反射光线深度级别大于 1。

    漫反射光线深度:1(默认值)
    漫反射光线深度:2。蓝色自发光可见。
  • Opacity(不透明度)

    控制不允许灯光穿过的程度。与透射(其中的材质还要考虑漫反射、镜面反射等)不同,不透明度将影响整个着色器。它对于保留对象的阴影定义非常有用,同时使对象本身对摄影机不可见。

    使用“不透明度”(Opacity)时,您必须确保对指定了标准曲面着色器的网格禁用“不透明”(Opaque)。
    1(默认值)
    0.5
    0

    棋盘格贴图 -> 不透明度

  • Bump Mapping(凹凸贴图)

    凹凸贴图属性接受扰动法线以进行凹凸贴图的着色器。

    • bump2d 节点

      • 法线贴图

        法线贴图在工作时会将插值曲面法线替换为从 RGB 纹理求出的法线,在该 RGB 纹理中,每个通道(红色、绿色、蓝色)表示凹凸的一个轴和强度。它的速度比凹凸贴图更快,原因是凹凸贴图需要对下面的着色器进行三次或三次以上的求值。
        在 Maya (2017) 中使用颜色管理时,应将法线贴图设置为“未经处理”(RAW)。
        请注意,调整“凹凸深度”(Bump Depth)属性不会影响法线贴图。
        连接到 Maya“bump2d”节点的法线贴图。 2D 凹凸设置为“切线空间法线”(Tangent Space Normals)(变换图像)
      • FlipR

        FlipR 按钮将翻转法线贴图的红色通道。
      • FlipG

        FlipG 按钮将翻转法线贴图的绿色通道。
      • Swap Tangents(交换切线)

        “交换切线”(Swap Tangents)将切换所选法线贴图的红色和绿色通道。
      • Use Derivatives(使用导数)

        允许使用导数法线贴图。使用切线空间法线贴图时,如果禁用“使用导数”(Use Derivatives),则凹凸着色器会使用网格上存储的切线和双切线数据。否则(默认情况下),凹凸着色器将使用来自 Arnold 着色全局参数的 UV 曲面导数。
    • 合并法线贴图和凹凸贴图

      要合并两个 bump2d 节点,您必须将第一个 bump2d 节点的 outNormal 连接到第二个节点的 normalCamera 。这可以通过连接编辑器来完成(请确保启用了“显示隐藏项”(Show Hidden),这样才能看到“normalCamera”属性)。

      必须先将凹凸节点连接到标准曲面着色器,然后才能向它添加法线贴图节点。
      OutNormal(第一个 bump2d 节点)连接到 normalCamera(第二个节点)