Autodesk Standard Surface

版本1.0.1.wip

本文档是一个surface shader的规范,旨在提供一种material描述,能够精确建立视觉效果和动画制作中使用的绝大多数material。它遵循Arnold渲染器中Standard Surface shader的设计,其实现相对简单,用户界面由一组具有直观含义和范围的参数组成。本文档已版本化,并将随着规范的发展而更新。

我们提供了一个OSL参考实现[ Georgiev2019 ],其目的是指定足够的细节,以允许在其他渲染器中实现,根据目的将外观与真实度相匹配。

本文内容源自https://autodesk.github.io/standard-surface/

历史背景和目标

不同平台之间的CG场景资产的交换仍然是当今的一个重要问题,特别是在表面外观方面。不同的渲染器和3D引擎使用不同的shading系统,shading语言和固定Pipelines。此外,精确构建表面外观仍然是一个复杂的问题,并且是活跃的科研课题。然而,业界现在迫切需要找到一种标准化的material model,它既涵盖了日常工作流程中的大多数常见用例,又易于使用。

多年来,随着不同的供应商达成了将material的定义与场景中的光传输模拟分离的共识,出现了某些事实上的标准外观定义框架。这样的通用框架包括MaterialX,Material Definition Language(MDL)和Open Shading Language(OSL)[ Gritz2010]],允许将material指定为primitive surface reflectance models的组合。然而,仅这些框架对于最终用户的look development来说是不够的,最终用户不应期望从头开始构建surface shaders以用于日常任务。需要一种标准的超级shader参数化,其具有明确定义的参数集,可以调整这些参数以表示大多数真实世界(以及虚构的)材料。在这个提案中,我们的目标是填补这一空白; 我们的参考实现是用OSL [ Georgiev2019 ] 编写的。

我们提出的shading models紧跟Arnold 5 Standard Surfaceshader,Anders Langlands的alSurface [ Langlands2014 ]和Autodesk 3ds Max的Physical Material [ Andersson2016 ]是其前身。alSurfaceshader已经成为行业事实上的标准,但不再积极开发。3ds Max的Physical Material反过来受到Allegorithmic的PBR着色模型[ McDermott2018 ],迪士尼Principled Shader [ Burley2012 ]以及几个实时3D引擎的行业发展趋势的启发,并在3ds Max的所有主要渲染引擎的支持下得到了生产验证。

在这个提议中,我们不是为每个可能的情况提供参数,而是有意地尝试将这组参数简化为仅在实践中最有用的参数。我们还修复了primitive reflectance models的组合,以确保用户尽可能在物理上合理的范围内工作。我们的目标是使整体行为简单,合理,直观且易于理解,以便该模型涵盖大多数日常用例。对于它没有涵盖的少数,可能需要使用特定于渲染器的shading,或构建定制的shading network。

Layered mixture model

我们的目标是创建一个能够忠实代表各种真实材料的surface shading model。金属,玻璃或墙面漆等基础材料表面的光散射特性得到了很好的研究,可以通过简单的分析models准确地表示出来。其他材料,例如成品木材,布料或皮肤,包括堆叠在彼此顶部的半透明物质层。这种材料的更复杂的行为是在这些层之间的界面处光散射并通过它们传播的结果,并且每个这样的散射界面通常可以由分析models表示。此外,许多现实世界的物体由几种不同的材料制成,例如金属和塑料,并且通过在其表面上纹理化每种材料的类型来方便地模拟这些对象的外观。虽然材料过渡通常是突然的,但是连续混合材料的能力对于艺术目的以及抗锯齿是有用的。

两个基本操作 - 分层和混合 - 提供了一种语言,用于对具有复杂外观的各种材料进行构建。对于一堆物理上有意义的层,它应该在底部具有不透明(例如金属)或透明(例如玻璃或表皮)的体积,在其顶部具有一组电介质板。任何未在两层之间的界面处反射的光向下透过下层,在其相应的介质内可选择地吸收。混合操作可以被认为是两种材料的统计混合,即使并非所有组合都具有物理意义。作为线性插值,该操作自动保持节能。

我们的shader模拟了由十个组件组成的材料,这些组件按层次分层和混合,如图1所示。各个组件的属性可以在整个表面上变化。

图1:shader模拟的理想化材质模型的示意图。组件的水平堆叠表示统计混合,垂直堆叠表示分层。标有星号的组件是可选的。

闭包混合物表示

给定shading point和视图方向,我们的shader的评估结果是双向散射分布函数(BSDF),其描述在该点和方向上的表面的光散射特性(加上发射分量和次表面散射分布1) 。由此产生的BSDF表示由于材料的整个结构内的传播和散射而在最顶部界面处的聚集光散射行为。

准确地模拟分层材料内的光传播通常是困难且计算上昂贵的,并且仍然是活跃研究的主题。我们的shader采用常见的实用方法,即所得到的BSDF可以表示为“原子”,构建块BSDF的简单混合(即线性组合) - 图1中的每个组件一个。我们仍然试图通过调整原子BSDF的属性和线性组合权重来模拟分层的最重要的物理效应 - color着色,反射/透射模糊和角度依赖的层透明度。

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

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

组件 闭包 描述
透明度 transparency 简单的传递(可以被认为是三角洲BTDF)
涂层 specular_brdf 电介质microfacet BRDF(GGX)
发射 emission 漫射发射
金属 metal_brdf 导体microfacet BRDF(GGX)
镜面反射 specular_brdf 电介质microfacet BRDF(GGX)
镜面透射* specular_btdf 电介质微平面BTDF(GGX)
Sheen* sheen_brdf 回归反射介质microfacet BRDF [ Estevez2017 ]
次表面散射* subsurface 次表面散射(例如扩散或随机游走)
漫反射传输* diffuse_btdf 弥漫微型BTDF(Oren-Nayar)
漫反射 diffuse_brdf 弥漫性微裂纹BRDF(Oren-Nayar)

 

 

 

 

 

 

 

 

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

闭包权重通过公式计算,该公式被设计成通过构造满足能量守恒,同时近似模拟层之间光传播的影响。可以说,最突出的这种效应是镜面(电介质)层的方向变化的透明度,这是由菲涅耳控制的半球方向反射(也称为方向反照率)的结果。我们根据反射率对相应的BRDF闭包与底层闭包进行权衡,我们的实现假设有一个reflectance(brdf)函数可用于计算它。当反射积分的解析表达式不可用于闭包时,可以近似,例如通过蒙特卡罗估算。

我们shader的闭包权重计算逻辑最容易被视为树,其中每个叶节点都是一个闭包,每个内部节点都是其两个子节点的线性组合,边缘指定了权重。我们在图2中说明了这种树结构。每个闭包的最终重量是沿其相应的叶子音符和根节点之间的路径的边缘权重的乘积。在下面的第3节 中,我们将更详细地描述各个闭包和边缘权重。

图2:我们的shader返回根闭包standard_surface,它是“原子”闭包的加权和,显示为树中的叶节点。每个闭包的权重是沿着从其相应叶片到根节点的路径的边缘权重的乘积。边缘权重由shader级参数参数化,以粗体显示。

兼容模式

我们的模型旨在对于生产级应用程序而言相对简单,但是它的闭包和参数数量对于实时引擎来说可能太多了。对于此类应用程序,我们定义了“预览”级别的兼容性,在典型情况下将我们的shader简化为合理的视觉相似度。简化相当于归零组合权重参数transmissionsheen以及subsurface,它有效地消除了specular_btdfsheen_brdfsubsurface,和diffuse_btdf封闭件。在此兼容模式中,我们还忽略其他闭包中的某些参数,这些闭包在下一节的参数表中用星号标记。

闭包

在本节中,我们将描述表1中列出的shader使用的各个闭包,它们的参数以及它们如何相互加权。一些参数在闭包中重复使用,因此它们在下面的小节中出现多次。我们用粗体字表示shader级参数,例如opacity

透明度

transparency闭包具有没有实例化参数,并在遮光点的表面完全透明,即输入射线被发送未偏转的和未着色的。效果如图3所示。所述opacityshader参数控制所有其他封闭包的相对重量(通过线性“阿尔法”共混物),因此透明度重量1-opacity

通过以下配方组合透明度和涂层闭包是顶级混合物,产生最终standard_surface闭包组合:

standard_surface = (1 - opacity) * transparency() + opacity * coat_layer

其中coat_layer闭包在以下小节中定义。

shader参数:透明度
Name 类型 默认 描述
opacity color 1,1,1 表面的(有色)不透明度(默认情况下完全不透明)

 

图3:不透明度与透射率。从左到右:仅具有透射的球体,(二元)不透明蒙板,具有透射的球体和具有遮罩的不透明度。

涂层

最顶部的散射层是具有GGX microfacet BRDF闭包的介电涂层coat_brdf。作为电介质,该BRDF不能保持能量(即其定向反射率通常小于1),因为它遵循菲涅耳反射定律。假设该层是无限薄的,并且剩余的非反射光直接传递到下面的层而没有折射。反射color固定为白色,但涂层中等color可由用户控制。

闭包组合方式是

coat_layer = coat * coat_brdf(...) + lerp(coat, white, coat_color * (1 - reflectance(coat_brdf))) * emission_specular_mixture

其中lerp(t, a, b) = (1 - t) * a + t * bemission_specular_mixture闭包在下一小节中定义。

在上述闭包中,white表示恒定的白色。然后,涂层实际上是“无操作”直通(当coat参数变为零时)和具有嵌入吸收介质的介电平板之间的统计混合。

在真实的物理材料中,当通过有色/粗糙涂层透射时,由下面的层散射的光被着色/模糊。在渲染器中准确捕获这些效果需要按顺序模拟各个层之间的光交互。由于我们的模型是独立评估的闭包的简单线性组合,我们模拟这两种效果:

  • 着色涂层下面的所有层是通过用coat_color参数缩放它们的闭包来实现的,这可以解释为涂层介质中的着色来自下层的反射(即,能量被着色的涂层吸收)。
  • 我们为镀层粗糙,增加其他GGX BSDFs,即粗糙度的选项metal_brdfspecular_brdf以及specular_btdf。其余的BSDF没有被调制,因为它们已经很粗糙。调制给定的公式roughness
    roughness = lerp(coat * coat_affect_roughness * coat_roughness, roughness, 1)
shader参数:涂层
Name 类型 默认 描述
coat float 0 反射重量(反射color固定为白色)
coat_color color 1,1,1 来自下面层的光的色调
coat_roughness float 0.1 涂层反射粗糙度; 在传递给BSDF之前在内部进行平方以获得更线性的感知响应[Burley2012 ]
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 下面的漫反射和次表面散射层的color有多大影响范围 [0,1]
coat_affect_roughness* float 0 对下面的镜面反射层的粗糙度有多大影响,范围 [0,1]

 

图4:通过组合涂层和镜面层可以实现的各种效果。从左到右:片状,雨滴,碳纤维。

发光

附加的定向均匀(即朗伯)发光闭包emission位于涂层下方,但是否则不受应用于其他闭包的组合重量的节能逻辑的影响。我们将发光放置在涂层下方,以允许渲染由反射表面(例如荧光棒)限制的低发光材料,而无需对发射器和边界物体进行明确建模。

涉及发光的闭包组合是

emission_specular_mixture = emission * emission_color * emission() + specular_mixture

其中specular_mixture闭包被定义如下。

shader参数:发光
Name 类型 默认 描述
emission float 0 发光color乘数
emission_color color 1,1,1 发光color

 

图5:表示连接到的热熔岩的纹理图emission_color。

金属

来自涂层下面的金属反射被建模为GGX微平面导体BRDF metal_brdf,其吸收系数和复杂折射率由更加用户友好的参数base_colorspecular_color[ Gulbrandsen2014 ]计算,定义如下。这允许通过在正常和掠入射时直接指定(可纹理的)color来实现期望的外观。注意,这两个color参数也用于非金属(即电介质)镜面和漫射BRDF,如下所述。

这种非透射金属BRDF作为统计混合物与非金属(即电介质)镜面层模型混合,如下一节所述,根据metalness参数如下:

specular_mixture = metalness * metal_brdf(...) + (1 - metalness) * specular_reflection_layer

其中specular_reflection_layer闭包被定义如下。

当厚度大约为光波长的薄折射膜放置在材料顶部时,由于干涉而发生彩虹状彩虹色效应。这些效果包含在微平面闭包中,其适用于金属或镜面反射和透射层,无论哪个存在。薄膜在逻辑上位于涂层和下层之间,但由于涂层被认为是无限薄的,因此薄膜外部的介质的折射率被认为是真空的,即1.0。假设它的内部是镜面层的内部。薄膜模型基于Belcour和Barla [ Belcour2017 ]的模型。

shader参数:金属
Name 类型 默认 描述
base float 0.8 标量乘数 base_color
base_color color 1,1,1 垂直入射时的反射color(即从直线上看的表面)
specular float 1 标量乘数 specular_color
specular_color color 1,1,1 掠入射时的反射color(即轮廓周围)
specular_roughness float 0.2 反射粗糙度; 在传递到BSDF之前在内部进行平方,以便在参数范围内获得更均匀的粗糙度
specular_anisotropy* float 0 反射各向异性metal_brdf,范围[0,1]
specular_rotation* float 0 各向异性的方向,范围[0,1](1意味着180°)
thin_film_thickness* float 0 薄膜厚度(纳米)
thin_film_IOR* float 1.5 薄膜的折射率

 

图6:通过设置base_color和specular_color参数由金属闭包产生的金属。从左到右:铝,铜,金。

 

图7:薄膜干扰对表面的影响。从左到右:多色调汽车漆,肥皂泡和烧铬。

镜面反射

该层模拟了GGX microfacet电介质BRDF specular_brdf,概念上恰好位于涂层下方。与涂层类似,由于菲涅耳定律,该BRDF本身不能节约能量,并且未反射的能量完全传递到下面的层。我们使用的闭包组合表达了反射和透射的镜面反射之间的能量平衡

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

其中transmission_sheen_mix闭包被定义如下。

shader参数:镜面反射
Name 类型 默认 描述
specular float 1 镜面反射重量
specular_color color 1,1,1 镜面反射color
specular_roughness float 0.2 反射粗糙度; 在传递到BSDF之前在内部进行平方,以在参数范围内获得更均匀的粗糙度
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 薄膜的折射率

 

图8:改变镜面折射率。从左到右:1.0,1.1,1.52(默认)。

镜面传输

该层模拟transmission通过GGX微平面BTDF通过镜面层底部传输的统计混合(根据参数)specular_btdf,或来自漫射基层的散射(base_layer)。闭包组合由下式给出

transmission_sheen_mix = transmission * transmission_color * specular_btdf(...) + (1 - transmission) * sheen_layer

其中sheen_layer闭包被定义如下。

传输闭包specular_btdf共享许多参数specular_brdf; 例如,粗糙度spec_btdf默认为相同specular_roughness。它可以通过transmission_extra_roughness参数另外增加或减少,但这在物理上是不正确的。就像镜面BRDF一样,通过重复使用相同的参数,可以通过薄膜调制该BTDF。

如果thin_walled布尔参数是false,则表面被认为是有限大小的实体对象的边界。因此,根据specular_btdf闭包,当进入和离开物体时,光折射。如果thin_walledtrue,则表面是双面的,表示无限薄的壳(例如理想化的树叶或纸),因此光在镜面传输到相对侧时不会经历折射。在这种情况下,折射率设定为周围介质的折射率(例如,真空为1.0),并且禁用色散和薄膜。

我们还允许指定对象内部的均匀介质的属性。这对于模拟相当厚的液体或者有足够的散射介质可见是有用的,例如蜂蜜,深水体,乳白玻璃或乳白玻璃。的transmission_colortransmission_depth参数对是一种常用的艺术家友好的方式来设定所述介质的吸收系数,而transmission_scatter直接设置介质的散射系数。这些参数允许渲染诸如彩色玻璃或暗水之类的物体。

shader参数:镜面传输
Name 类型 默认 描述
transmission* float 0 传动重量
transmission_color* color 1,1,1 透射色,由于吸收而着色
transmission_depth* float 0 在color完全transmission_color按比尔定律之前,白光在材料内部传播的距离
transmission_scatter* color 0,0,0 用于模拟对象内光散射的模糊度的color
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 如果true,物体被认为是无限薄的,表面是双面的

 

图9:效果transmission_scatter_anisotropy。从左到右:-0.5,0.0,0.5。

Sheen

所述sheen_brdf闭包是基于该埃斯特韦斯和库拉[的微面光泽BRDF Estevez2017 ]。它模拟了纺织品的外观,其中表面刻面是圆柱形“纤维”,其轴线主要平行于表面法线,在掠射角处产生镜面高光。从概念上讲,它位于基础衬底的顶部,因此传递到衬底的能量通过光泽反射率降低:

sheen_layer = sheen * sheen_color * sheen_brdf(...) + (1 - sheen * reflectance(sheen_brdf)) * base_mix

其中base_mix闭包被定义如下。

shader参数:光泽
Name 类型 默认 描述
sheen* float 0.8 反射重量 sheen_brdf
sheen_color* color 1,1,1 反射色 sheen_brdf
sheen_roughness* float 0.3 反射粗糙度sheen_brdf,范围[0,1]

 

图10:使用光泽封口呈现的各种纺织品。

漫反射

基础基底层由根据subsurface参数的Oren-Nayar漫反射成分和地下成分的统计混合物组成:

base_mix = (1 - subsurface) * base * base_color * diffuse_brdf(...) + subsurface * subsurface_mix

其中subsurface_mix闭包被定义如下。

shader参数:漫反射
Name 类型 默认 描述
base float 0.8 反射重量 diffuse_brdf
base_color color 1,1,1 反射色 diffuse_brdf
diffuse_roughness* float 0 反射粗糙度 diffuse_brdf

漫射传输

如果thin_walled是,则地下组分退化为扩散传输true。这代表一个无限薄的外壳(例如理想的粗糙纸),能量通过该外壳传递到漫射叶中。

漫反射传输通过Oren-Nayar microfacet BRDF模拟,在遮蔽法线上翻转,使其成为BTDF:

subsurface_mix = thin_walled * subsurface_color * diffuse_btdf(...) + (1 - thin_walled) * subsurface(...)

其中subsurface闭包进行说明。

shader参数:漫反射传输
Name 类型 默认 描述
subsurface* float 0 弥散传动重量
subsurface_color* color 1,1,1 漫透射色
diffuse_roughness* float 0 漫透射粗糙度

 

图11:通过thin_walled(右)启用不透明纸平面(左)与漫反射传输。

次表面散射

对于固体对象(其thin_walledfalse),表面散射模型的光传播和扩散的表面,其中,通常离开的光线离开以比入射光线不同的表面位置下的效果。该效果由subsurface闭包表示,对于该闭包,我们没有规定要使用的特定渲染模型,例如基于扩散轮廓表面照明模糊或强力次表面射线追踪。

shader参数:次表面散射
Name 类型 默认 描述
subsurface* float 0 次表面散射重量
subsurface_color* color 1,1,1 表面color,由subsurface(...)闭包使用
subsurface_radius* color 1,1,1 红色,绿色和蓝色通道的次表面半径(即平均自由程)
subsurface_scale* float 1 标量比例 subsurface_radius
subsurface_anisotropy* float 0 地下介质相函数的各向异性,范围 [-1,1]

 

图12:改变次表面散射半径(subsurface_radius)的影响。

讨论

在介绍了我们提出的模型之后,我们将在本节中讨论一些潜在的细微之处,警告和未来改进的领域。

标量与RGB闭包权重

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

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

这里包括specular_color因子乘法reflectance(specular_brdf)以确保能量保存。例如,如果反射是纯红色,则只有互补的青色被透射到底层中。这样可以防止组合模型中的能量损失,并创建具有高反照率的多层材料。但是虽然它在物理上是正确的,但它也可以使艺术家更难控制底层裂片中补色色调的外观。

我们考虑的另一种方法(例如,在3ds Max的物理材料模型中使用)是将乘法闭包因子保持为标量,例如在这种情况下specular_color将从闭包权重中省略。然后,这在技术上违反了能量保存(即能量是非物理耗散的),并且难以产生具有彩色镜面反射的高反照率材料。但是,这种行为对艺术家来说可能更直观。

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

互易性

物理上正确的BSDF必须满足互易性(即在传入和传出方向的交换下的对称性)。然而,在我们提出的模型中,即使叶级BSDF是倒数的,闭包组合也不是。这是由于引入了reflectance(...)仅依赖于传入方向的功能。如果将着色模型结合到某些光传输算法中,例如双向路径跟踪,这通常依赖于该属性来保持,则这可能存在问题。

然而,强制互惠可能会使我们模型的数学形式显着复杂化,而不会产生质量上更好的视觉外观。对于许多渲染器,包括单向路径跟踪器Arnold,即使在叶子BSDF中也可以违反互易性的物理约束,而不会引起任何实际问题。此外,以真实物理上正确的方式实施分层材料的互易性[ Jakob2014 ]目前在生产渲染器中实现太复杂和麻烦。在实际生产中使用实现互惠的模型,例如Kulla和Estevez [ Kulla2017 ] 的涂层方案,通过引入可能类似于此处描述的非互易方法的不准确性的粗略近似来实现。

因此,目前我们并不认为在我们的模型中纳入互惠是严格必要的。

Layering model

我们的分层模型通过施工确保节能,并尝试尽可能确保能量保存。然而,作为一个相对简单的模型,它只是根据近似reflectance(...)函数调整的重量的闭包的线性组合,它不是我们描述的层中光传输的物理精确模拟。

最近出现了对分层培养基中全光传输的一些更准确的处理[ Jakob2014 ] [ Belcour2018 ] [ Zeltner2018 ]。这些模型结合了通过整个层堆叠的各种反射和透射模式的效果,其产生最终BSDF(或通常BSSRDF),其不是每层BSDF的简单线性组合。

将来,我们希望调查过渡到更准确的模型,例如这个。但是,目前似乎所有可用的模型计算成本都更高,实现起来要复杂得多。

我们至少在我们的模型中尝试结合由于手工间的层间交互而产生的一些最重要的效果。例如,我们允许涂层的粗糙度影响下面层(某些)的粗糙度。

表面方向

在透射情况下,光可以从表面法线的上方或下方入射。传输层对此敏感并确保光线正确地折射通过接口。然而,其他层面法线,因此当从外部和内部击中物体时,散射行为是相同的。这又是一种非物理近似,这在实践中很有用,因为它简化了逻辑而不会引入明显的视觉伪像。

用户友好性与灵活性

我们的模型目前具有固定数量的层,其仅包括两个镜面层,而一些其他流行模型(例如,皮克斯的PxrSurface [ Hery2017 ])允许更多可配置的层数。在生产环境中,将模型调整到精细程度的自由在某些情况下可能很有用。

然而,如前所述,我们的一般理念是,最好提供具有直观含义的相对最小的用户友好参数集合,其组合方案确保任何给定的参数集合在物理合理性范围内。在模型无法生成所需结果的边缘情况下,可以创建自定义shader图形。

结论

在本文档中,我们描述了用于各种生产渲染上下文的标准通用表面shader的提议。此模型基于Arnold渲染器中标准曲面shader的当前实现。我们详细描述了构成模型的十个闭包,以及它们如何组合以生成最终shader。

我们希望此提案可以作为更广泛采用的标准表面shader实现的有用基础。

本文作者
Iliyan Georgiev,Jamie Portsmouth,Zap Andersson,Adrien Herubel,Alan King,Shinji Ogaki,Frederic Servant
参考书目
[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/standard_surface_reference.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.

1为方便起见,允许我们的闭包列表不仅仅是严格的BSDF,而且还包括发射分布函数(EDF)和双向次表面散射分布函数(BSSRDF)。渲染器被理解为识别这些并适当地处理它们。
2或者确实是EDF,或BSSRDF。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注