摘要
计算机图形学场景资产的交换,尤其是表面外观方面,由于不同渲染器和 3D 引擎使用了多样的着色系统、语言与流程管线,仍然是一个重要挑战。OpenPBR 通过提供一种标准化 uber-shader 模型的规范来解决这一问题,以满足从事基于物理渲染行业的需求。该模型由 Autodesk 与 Adobe 合作开发,建立在此前定义的 Autodesk Standard Surface 与 Adobe Standard Material 模型之上。它通过对 slab 的分层与混合形式主义进行定义,这种方式易于在现有材质框架中实现,例如 MaterialX、Open Shading Language (OSL) 和 Material Definition Language (MDL)。该规范旨在创建一种基于物理、对艺术家友好的模型,它既足够强大,能够表示复杂的表面外观,又足够实用,适用于实时应用。由于其开放治理,这一项目已经获得了显著的行业采纳与协作,并已在主要软件中得到实现,例如 Autodesk 的 Maya、3ds Max 和 Arnold,Adobe 的专有路径追踪器,Blender 的 Cycles,以及 Maxon 的 Redshift。

OpenPBR “Shader Playground” 测试场景,由 Autodesk Arnold(左)和 Adobe 专有渲染器(右)渲染。OpenPBR 模型使得在不同渲染器之间实现这种一致的材质交换变得容易,并以很高的保真度保留基于物理的外观(美术作品由 Nikie Monteleone 创作)。
1 引言
定义和交换计算机图形学着色资产并非一个简单的问题。虽然已经存在用于基于物理材质定义的通用框架(例如 MaterialX Smythe and Stone, 2016、Open Shading Language (OSL) Gritz et al. 2010,以及 Material Definition Language (MDL) Kettner et al., 2015),这些框架提供了表示大量不同材质的灵活性与能力,但如果艺术家每次都要从零开始重建复杂材质,那将极不实际。即便使用模板或预设,每一种材质的行为仍然必须被专门记录,用户也需要重新培训。从零开始创作物理准确的材质同样具有挑战性。此外,由于不同渲染器和 3D 引擎使用不同的着色系统、着色语言和固定功能管线,而它们之间并不容易互操作,同时基于物理渲染的最先进技术又在不断发展,因此也存在标准化的需求。
定义一个行业标准的 “uber-shader” 可以解决这些问题,为用户提供一种广为熟悉的参数化方式和材质结构,并在不同项目、工作室和应用程序之间保持一致。这样的着色器可以在像 MaterialX 这样更通用的外观框架中实现,也可以在不支持此类框架的系统中实现为固定功能着色器,或者出于优化目的进行实现。尽管在特殊情况下仍可能需要临时性的分层着色器或定制着色器,一个优秀的 uber-shader 应当能够表示绝大多数典型的表面外观,从喷漆金属和织物到塑料和皮肤,覆盖制作中最常见的写实或风格化材质场景。OpenPBR 的目标就是提供这样一种着色器,并通过开放治理促进广泛的行业采纳。
1.1 uber-shader 的谱系
此前已经有很长一段关于这类基于物理 uber-shader 的提案历史。图 2 展示了一个近似的谱系,其中包括 Disney 的 Principled Shader Burley, 2012、Allegorithmic 的 PBR shading model McDermott, 2018,以及最近的 Autodesk Standard Surface 着色器 Georgiev et al., 2019 和 Adobe Standard Material Kutz et al., 2021。Adobe Standard Material 是 Allegorithmic PBR 模型的一次演进。Autodesk Standard Surface 则在精神上有一个强有力的前身,即 3ds Max 的 Physical Material Andersson, 2016,而它又深受 Anders Langlands 的 alSurface Langlands, 2014、Disney 的 Principled Shader 以及 Mental Ray 的 mia_material Andersson, 2013 的启发。

通向 OpenPBR Surface 的着色模型谱系
这些 uber-shader 模型中有许多文档完备,有时还提供带有宽松开源许可的示例实现。然而,所有这些模型都起源于某个个人或单一公司,因此不太可能看到一种能够兼容不同供应商使用场景的演进,这也限制了它们更广泛的采用。OpenPBR Andersson et al., 2024 通过将项目置于 Academy Software Foundation (ASWF) 之下,并采用有组织的开放治理来解决这个问题,从而维护并演进这一标准。
1.2 目标与指导原则
这个项目设定了明确目标:创建一个基于物理、对艺术家友好的模型,满足媒体与娱乐行业的需求,并且对实时应用也具有实用性,同时确保开放治理。我们识别出若干关键原则,并以 alSurface 模型中提出的类似原则为灵感,来指导模型设计:
- 标准化:该规范旨在为艺术家和厂商定义一个通用接口和参数,促进设施与应用之间的资产交换,以及用户入门与教育。
- 简洁性:模型应尽可能简单,同时提供足够的功能以覆盖最常见的使用场景。
- 可预测性:用户指定的数值和颜色应尽可能直观地导向最终外观,具有线性行为,并避免意外的颜色偏移。
- 合理性:模型应基于物理光传输来定义,使其外观在物理材质意义上合理接近现实并满足能量守恒。这种物理上合理的外观应当是默认行为,从而让用户不必担心如何实现它。不过,在某些定义明确的场景中,我们允许用户显式地“打破”物理,以实现有用的视觉效果。
OpenPBR 与前述所有模型之间的一个关键差异是,除了 alSurface 以外,在 OpenPBR 中,材质被指定为一种特定的物理结构,由具有特定 BSDF 的分层 slab 材质构成。随后,模型的 ground truth 外观就被定义为通过这一结构进行光传输所得到的结果,除了前面提到的某些定义明确的破坏物理的边界情况之外。对于实现者而言,这使得最终目标外观不再含糊,从而明确了它“应该”看起来如何,即使在实践中可能并不总能精确达到,只能近似实现。每个实现都可以根据其使用场景的约束,例如需要实时运行,而基于标准理论自由地作出近似(例如对分层的建模)。
该规范面向开发者,包含了在其渲染器中实现 OpenPBR surface 所需的全部信息。我们推荐具体的技术,并引用描述所选模型的科研论文。在许多情况下,我们也提出了实用近似,使实现更易处理。
我们还承诺提供一个 MaterialX 参考实现,使支持 MaterialX 的渲染器能够快速集成并测试 OpenPBR Surface,或者通过 MaterialX 的着色器生成后端导出着色器,例如 GLSL、OSL 或 MDL。
2 编写规范
在 2022 年初,Autodesk 和 Adobe 开始接触,因为两家公司都在考虑改进各自现有的材质模型。由于他们拥有许多相同客户,因此确保这些模型保持兼容以便促进工具之间的资产交换十分重要。由于 Autodesk Standard Surface 与 Adobe Standard Material 模型有许多相似之处,这两个团队决定联手,不仅合并这些模型,也识别可能的改进点。
最初的讨论包括对两份规范进行详细比较,进而找出了共同基础以及可相互借鉴的增强点。两个团队很快就各自认同了对方模型的优势,选择了其中最好的元素,并识别出可以通过采用新方法来改进两者的领域。经过数月合作之后,Autodesk 与 Adobe 认为规范草案已经准备好公开披露,并作为 MaterialX 的一个子项目置于 Academy Software Foundation 的 umbrella 之下。
在项目进行期间,团队采用了基于 GitHub 的成熟开放协作模式。他们使用了 pull request、issue 跟踪、Markdeep (https://casual-effects.com/markdeep/)、Slack 以及 GitHub Pages 部署等工具。这种方式促进了透明、高效且有组织的协作,确保所有利益相关者都能有效参与并跟踪进展。反过来,这也使其更容易吸收行业反馈,并就不断演化的标准进行公开沟通。
该项目的时间线由若干关键里程碑构成(图 3)。在 2022 年 11 月,Autodesk 和 Adobe 在其现有材质分层模型之间建立了共同基础。到 2023 年 4 月,团队已经为这一材质标准创建出一份新规范。

OpenPBR 项目时间线
2023 年 6 月,项目与 Academy Software Foundation 展开合作并与 MaterialX 集成,从而确保了开放治理。纳入 MaterialX 既确保了一个标准实现,也使其能够与 MaterialX 委员会密切合作,以改进并补充 MaterialX 本身缺失的功能。
该项目于 2023 年 8 月在 SIGGRAPH 上公开宣布,随后又与 NVIDIA、Pixar、Epic Games、Blender 等主要行业厂商进行了私下评审。这些评审者推动了关键修改,并提供了重要反馈,最终进入正式规范。该标准的公开预览版于 2023 年 10 月发布,并在 2024 年 8 月以 1.0 版本正式发布达到高潮。
自发布以来,团队一直专注于在生产环境中交付完整实现,同时将用户与实现者反馈纳入规范本身,这促成了 1.1 版本的发布,以及 OpenPBR 被集成进 MaterialX 1.39。
3 OpenPBR Surface 模型
OpenPBR Surface 采用了一种结构,它是在 Autodesk Standard Surface 与 Adobe Standard Material 所使用结构基础上的演进,并做出了若干关键变更,以提升表达能力与易用性。这两个早期模型都以一种假定的材质层结构来定义,即材质层沿着表面“垂直”叠加,如图 4 与图 5 所示。

Autodesk Standard Surface 分层模型

Adobe Standard Material 分层模型
3.1 对既有分层模型的比较分析
Autodesk Standard Surface 与 Adobe Standard Material 的分层模型都被设计为提供一组固定功能,包括:
- 两个模型中都具有一个由金属或 dielectric 组成的基础基底。当它足够光滑时,会产生一个强而锐利的高光,称为“primary” specular lobe。在 PBR 工作流中,让基础层充当 dielectric 或 metal 都很常见,也便于模型复用现有纹理资产。
- 在两个模型中,dielectric 组件都进一步被拆分为透明材质(例如玻璃)与不透明材质(例如木头)的混合,后者产生漫反射与透射。透明材质中还嵌入了一个体积,用于吸收与散射效果(例如蜂蜜)。在 Autodesk Standard Surface 中,还有一个专门的 subsurface scattering (SSS) lobe,用于表示极其致密的散射材质,例如大理石。
- 两个模型都具有一个 “sheen” lobe,用于表示织物或绒毛的外观,并位于 base 之上。其位置有所变化:在 Autodesk Standard Surface 中,sheen 只位于 diffuse base 之上;而在 Adobe Standard Material 中,它位于整个 base substrate 之上。
- 两个模型的顶层都是一个 dielectric coating,其中可能包含一个吸收介质,从而提供第二个 specular lobe(例如位于基底之上的清漆、clear-coat 或水层)。
- 此外,表面还可以被设置为 emissive,作为表示灯泡等发光物体的一种便捷方式,方法是将发射视为发生在表面本身。
- 最后,iridescence,也就是薄膜涂层材质中的彩虹边缘现象(如肥皂泡、油污表面或回火金属),在 Autodesk Standard Surface 中被建模为光在 base 层上方一层薄的 dielectric film 中的波干涉。这一效果尚未被纳入 Adobe Standard Material。
BSDF 通常假定为标准模型,例如 GGX microfacet 模型的各种变体或 Oren-Nayar diffuse。并且有一组直观参数来控制模型各个组成部分的详细属性,整体结构就在这一图景下建立。
这一总体结构已被证明是在媒体与娱乐行业中有用且灵活的通用模型,因此我们在 OpenPBR 中基本保留了它。
需要指出的是,在这些早期模型中,这种层结构在模型定义中多少是隐含的。在 Autodesk Standard Surface 中,模型被定义为一组 BSDF lobes 的特定线性组合,而这种组合可以被解释为该结构。在 Adobe Standard Material 中,模型结构没有被形式化定义,而是由对结构及参数含义的文字描述构成。
3.2 新的分层设计
我们将 OpenPBR Surface 的模型结构开发为 Autodesk 与 Adobe 原始模型的一种综合。这个新模型的分层结构如图 6 所示。尽管 slab 的概念会在 3.3 节中被正式引入,我们在此会较为自由地使用这个术语,以讨论促成这一设计的思路。

OpenPBR surface 模型的分层示意图
在图 6 的层图中,我们将 dielectric base 在概念上描绘为一个单一统一的 dielectric,其中嵌入了不同的介质,即 translucent volume、近乎不透明的 subsurface,以及完全不透明的 diffuse scattering medium。从本质上说,base 的这三个组成部分可以被视为同一种材质处于不同密度区间的表现。因此,translucent base slab、subsurface slab 和 diffuse slab 共享同一个 dielectric BSDF。
不过,Autodesk Standard Surface 中对嵌入体积的两种不同表示方式(即由 transmission 控制的 base dielectric 嵌入体积,以及专门的 subsurface)被保留了下来,而不是像 Adobe Standard Material 那样切换到统一体积。虽然统一体积的概念在理论上很吸引人,但 transmission volume 参数化对于更透明的介质(例如液体)很有用,而 subsurface 参数化则是专门为极其致密的介质(例如皮肤)设计的,艺术家发现两者都很有价值。
在 Autodesk Standard Surface 和 Adobe Standard Material 中,dielectric specular reflection 和 transmission 在图中被表示为具有不同界面的独立物理层(因为相应的 BRDF 与 BTDF lobe 被分别处理),而实际上它们仅仅对应于同一个 dielectric base 界面上的反射与透射。在 OpenPBR 模型中,这一点得到了澄清,因为如前所述,整个 dielectric base 明确共享同一个界面。
在 Autodesk Standard Surface 和 Adobe Standard Material 中,(non-metallic) specular 与 diffuse reflection 的组合被表示为位于 diffuse base 之上的 dielectric “gloss” 层。在 OpenPBR 中,我们选择以同样的方式表示它(称为 “glossy-diffuse”),但由于从物理上讲这样的层会因内部多次反射而产生变暗效果,我们定义了 base albedo 来补偿这一点,并产生无色偏的结果(符合可预测性原则)。
sheen slab 被移动到了堆栈顶部,并更名为 “fuzz”,以表明它现在也涵盖了一种落尘、绒毛状的观感。这样做在实践上是合理的,因为它允许 fuzz 呈现出同时覆盖在 base 与 coat 之上的灰尘外观,这是一个常见使用场景。
thin-film 被定义为存在于整个 base 正上方的一层光学上很薄、且在 microfacet 层面上光滑的 dielectric 层。由于在实践中,作为一种波动光学效应,它是通过修改 base metal 与 dielectric 的 microfacet BSDF 来实现的,因此没有必要在模型结构中将其引入为独立的 slab。
3.3 Slab
在 OpenPBR 中,我们通过显式定义物理结构来形式化这些模型,而不是定义任何特定的近似 BSDF,并将 BSDF 的推导视为由结构隐含给出。这个形式主义很简单,即定义一组物理 “slab” 来表示上述图中的组成部分。其中,一个 slab 被认为表示一块均匀的导体或 dielectric 介质(可选地包含嵌入体积),其上方由一个具有给定 interface BSDF 的表面所界定。这些 slab 通过物理上的 layer 与 mix 操作(图 7)进行组合,其中:
- layer:将一个 slab 放置在某个 substrate 材质之上,垂直叠加它们。此时,“三明治”中间的界面由 substrate 的顶部给出,而该界面又会受到上方 slab 所邻接介质的影响,从而修改 substrate BSDF。其外观将由顶层 slab 的 BSDF,加上因上层 slab 内部透射与反射效应而改变后的 substrate 外观共同组成。
- mix:以“统计学”的方式将两个相邻材质结合,即表面由两种材质的小块区域混合构成,而各自密度与混合权重成正比。因此,其外观将是两个组成部分 BSDF 的混合。
用于构建 OpenPBR 模型的 slab 基本操作。
每个 slab 还可以被定义为“部分存在”,即对“有这个 slab”与“没有这个 slab”两种情况进行统计混合,并附带一个 presence weight。这个简单的形式主义已经足够强大,能够无歧义地描述我们所需的结构。
3.4 分层树
完整模型被形式化为一棵由 layer 与 mix 操作构成的树,如图 8 所示,它与 MaterialX 分层系统中的表示形式非常接近。

定义 OpenPBR Surface 模式的 slab 操作树。
对于 MaterialX 而言,layer 与 mix 操作本身已经可用,因此将其转换为 MaterialX graph 的形式是直接的。如果从零开始实现,所谓的 “albedo-scaling” 方法是一种简单的分层近似,也被 MaterialX 内部使用。使用它还可以从 OpenPBR 结构推导出 BSDF 混合模型。OpenPBR 规范中给出了这一推导的大纲。这种混合模型形式,即 BSDF 的线性组合,随后便适合用传统技术进行求值与采样。
3.5 参数化
有一组参数能够有效定义所有 slab BSDF 与体积的属性,以及图 8 所定义树结构中的混合权重。OpenPBR Surface 外观模型的参数化遵循若干指导原则,以确保易用性与一致性。对于艺术家而言,该模型由表 1 中的一组参数构成,这组参数旨在以直观方式呈现。
| 标识符 | 标签 | 类型 | 范围 | 建议范围 | 默认值 | 单位 |
|---|---|---|---|---|---|---|
| base_weight | 权重 | float | [0, 1] | 1 | ||
| base_color | 颜色 | color3 | [0, 1] 3 | (0.8,0.8,0.8) | ||
| base_metalness | 金属度 | float | [0, 1] | 0 | ||
| base_diffuse_roughness | 漫反射粗糙度 | float | [0, 1] | 0 | ||
| specular_weight | 权重 | float | [0, ∞) | [0, 1] | 1 | |
| specular_color | 颜色 | color3 | [0, 1] 3 | (1,1,1) | ||
| specular_roughness | 粗糙度 | float | [0, 1] | 0.3 | ||
| specular_roughness_anisotropy | 各向异性 | float | [0, 1] | 0 | ||
| specular_ior | IOR | float | (0, ∞) | [1, 3] | 1.5 | |
| transmission_weight | 权重 | float | [0, 1] | 0 | ||
| transmission_color | 颜色 | color3 | [0, 1] 3 | (1,1,1) | ||
| transmission_depth | 深度 | float | [0, ∞) | [0, 1] | 0 | length |
| transmission_scatter | 散射 | color3 | [0, 1] 3 | (0,0,0) | ||
| transmission_scatter_anisotropy | 各向异性 | float | [−1, 1] | 0 | ||
| transmission_dispersion_scale | 色散比例 | float | [0, 1] | 0 | ||
| transmission_dispersion_abbe_number | Abbe 数 | float | (0, ∞) | [9, 91] | 20 | |
| subsurface_weight | 权重 | float | [0, 1] | 0 | ||
| subsurface_color | 颜色 | color3 | [0, 1] | (0.8,0.8,0.8) | ||
| subsurface_radius | 半径 | float | [0, ∞) | [0, 1] | 1 | length |
| subsurface_radius_scale | 半径缩放 | color3 | [0, 1] 3 | (1.0,0.5,0.25) | ||
| subsurface_scatter_anisotropy | 各向异性 | float | [−1, 1] | 0 | ||
| coat_weight | 权重 | float | [0, 1] | 0 | ||
| coat_color | 颜色 | color3 | [0, 1] 3 | (1,1,1) | ||
| coat_roughness | 粗糙度 | float | [0, 1] | 0 | ||
| coat_roughness_anisotropy | 各向异性 | float | [0, 1] | 0 | ||
| coat_ior | IOR | float | (0, ∞) | [1, 3] | 1.6 | |
| coat_darkening | 变暗 | float | [0, 1] | 1 | ||
| fuzz_weight | 权重 | float | [0, 1] | 0 | ||
| fuzz_color | 颜色 | color3 | [0, 1] 3 | (1,1,1) | ||
| fuzz_roughness | 粗糙度 | float | [0, 1] | 0.5 | ||
| emission_luminance | 亮度 | float | [0, ∞) | [0, 1000] | 0 | nits |
| emission_color | 颜色 | color3 | [0, 1] 3 | (1,1,1) | ||
| thin_film_weight | 权重 | float | [0, 1] | 0 | ||
| thin_film_thickness | 厚度 | float | [0, ∞) | [0, 1] | 0.5 | μm |
| thin_film_ior | IOR | float | (0, ∞) | [1, 3] | 1.4 | |
| geometry_opacity | 不透明度 | float | [0, 1] | 1 | ||
| geometry_thin_walled | 薄壁 | boolean | {false, true} | false | ||
| geometry_normal | 法线 | vector3 | N/A | unp. normal | ||
| geometry_tangent | 切线 | vector3 | N/A | unp. tangent | ||
| geometry_coat_normal | Coat 法线 | vector3 | N/A | unp. normal | ||
| geometry_coat_tangent | Coat 切线 | vector3 | N/A | unp. tangent |
完整的 OpenPBR 1.1 参数集
每个参数都有一个唯一的标识名。与 Autodesk Standard Surface 和 Adobe Standard Material 保持一致,参数名按照它们影响的 BSDF lobe 直观分组,并带有相应前缀,如 specular 或 subsurface。建议在用户界面中使用这一前缀对参数进行分组。每个参数还对应一个更简单、首字母大写的标签,用于用户界面。
规范同时给出了绝对范围与建议的实用范围(即软范围),以帮助提供一致的用户体验。大多数参数最好处于 0 到 1 之间,以便于贴图和操作。本着同样的精神,每个颜色都被系统性地拆分为 albedo 和 intensity,分别以后缀 color 和 weight 表示。这也避免了为了调制颜色纹理强度而必须在颜色纹理及其输入之间插入一个着色器,从而无需要求适配渲染器实现 shader network。
默认值被选取为使该模型在默认情况下具有物理行为,同时仍允许用户在制作中根据需要偏离写实外观。每个参数都指定了单位,以便在不同格式之间进行轻松转换。
规范还努力避免那些必须通过设置另一个参数后才能见效的参数。随着参数化越来越复杂,重要的是要克制添加由下拉菜单启用或禁用的模态参数的冲动,因为那样会不必要地复杂化用户体验。
3.6 选取的改进
正如前文所述,OpenPBR 建立在已被制作验证过的现有模型之上,但由于表面外观技术与制作需求都在演进,它也对先前工作进行了改进。改进既包括对底层模型和外观进行更明确、更谨慎的规范定义,也包括对其中部分模型的更新与扩展。下面列举一些展示关键新增内容的示例。有关 OpenPBR surface 中使用的所有模型的完整说明,请参阅规范:https://academysoftwarefoundation.github.io/OpenPBR。
3.6.1 更新后的 fuzz 模型
Fuzz 或 sheen 用于建模纺织品或灰尘的外观,在这类材质中,表面由不透明的有色微纤维组成。OpenPBR 建议使用 Zeltner et al., 2022 中提出的模型,而不是此前在 Autodesk Standard Surface 中使用的 microfacet 模型 Kulla and Conty Estevez, 2017,或 Adobe Standard Material 中使用的 single-scattering microflake 模型 Kutz et al., 2021。在参数化相似的前提下,这个新模型扩大了可实现外观的范围(图 9),尤其能够表示深色纤维,并实现更真实的落尘外观。作为 OpenPBR 项目的一部分,这个新模型已在 MaterialX 中实现。

OpenPBR 中使用的 [ Zeltner et al., 2022 ] sheen/fuzz 模型(上排)与 Autodesk Standard Surface 中使用的 [ Kulla and Conty Estevez, 2017 ] sheen 模型(下排),其 fuzz roughness 从 0 变化到 1。Zeltner 模型能够表达更宽范围的外观。
粗糙 fuzz 的存在在物理上还会导致底层表面变得更粗糙(图 10)。在 OpenPBR 的实现中,这必须由于物理光传输而发生;而在许多早期模型中,这一点并未被明确说明,因此实际上被省略了,导致 fuzz 之下出现不合理地锐利高光。

随着 fuzz roughness 从 0.5 增加到 1,fuzz 层对光滑金属产生的粗糙化效果。
类似地,如果存在粗糙的 coat 层,它也应当使其下方的 base 变粗糙。这一效果在 Autodesk Standard Surface 中是明确的,不过当时建议的近似非常粗糙。我们已经为 coat 与 fuzz 的粗糙化效应开发了更符合物理的近似,并计划在未来版本中将其作为建议实现提供。
3.6.2 面向金属的改进 Edge-Tint 模型
OpenPBR 使用 “F82-tint” 模型来计算金属 Fresnel 因子,这一模型曾在 Adobe Standard Material 中使用 Kutz et al., 2021。为了更好地逼近金属真实的 Fresnel 行为,Schlick Fresnel 近似被增强,以允许控制金属在掠射角处的反射率,具体来说是为了匹配真实金属在轮廓边缘附近(约 82 度)观察到的特征性反射率下陷。正如 Hoffman, 2019 所论证的,与此前使用的 Gulbrandsen, 2014 模型相比,在 RGB 渲染器中工作时,这个模型更好地捕捉了导体的 Fresnel 行为(图 11)。

Gulbrandsen(左)与 F82-tint(右)edge tint 模型,在给定相同 base color 和 edge tint color 的情况下的对比
Kutz et al., 2021 中引入的 tint 变体的好处在于,它允许 edge color 使用合理的白色默认值(在 OpenPBR 中由 specular_color 指定),此时会退化为标准 Schlick。这个新模型也已作为 generalized_schlick_bsdf 节点上的一个新参数成为 MaterialX 的一部分。
3.6.3 Coat darkening
表面上存在 dielectric coat 时,会因为光在线性涂层中的内部反射而使 base color 变暗,并且这种变暗会随着 coat IOR 的提高而增强。例如,当给木材添加 clear-coat 清漆时,这一点会很明显。精确模拟这一效果很复杂,因此规范中给出了一个实用近似。在这种情况下,我们认为如果有需要,应当可以消除这一效果,因为即便它符合物理,有时在艺术上也未必理想,用户可能希望保留 base color 的强度。为实现这一点,规范引入了 coat_darkening 参数,其默认值为 1,但如果需要,可以用它来降低由内部多次反射引起的物理变暗(图 12)。其定义方式在技术上并不破坏物理,因为该参数可以被视为自动改变底层 base 的 albedo,从而有效抵消物理上的变暗效应。

coat darkening 参数从 0 变化到 1。最左侧渲染没有 clear-coat,用于展示当 darkening 为 0 时,带有 coat 的结果与原始颜色实现的匹配。
3.6.4 能量守恒的 Oren Nayar
glossy-diffuse slab 的 diffuse 组件基于经典的 Oren-Nayar 模型 Oren and Nayar, 1994、Pharr et al. 2023。然而,该模型在粗糙度增大时并不守恒能量,会导致高粗糙度下外观更暗、饱和度更低,我们认为这是一个严重缺陷。为解决这一问题,OpenPBR 规范为 Oren-Nayar 引入了一个全新的互易能量补偿项,称为 EON(图 13),随后发表于 Portsmouth et al., 2025。

能量守恒的 Oren Nayar(EON)与经典 Oren Nayar(QON)的比较。右侧面板展示了 white furnace test,说明了 QON 的能量损失,而 EON 修复了这一问题。
3.6.5 subsurface 颜色重映射
根据可预测性原则,艺术家定义的颜色应尽可能在最终材质中可见。因此,我们在 subsurface 模型中也确保了这一点,明确规定所指定的 subsurface 颜色应与观察到的反射颜色相匹配(图 14)。

上排 shaderball 是 diffuse,而下排是致密 subsurface,它们具有与 diffuse base_color 相同的 subsurface_color。规范定义了两者表观颜色应当匹配,而这要求对 subsurface 底层体积属性进行谨慎选择。
要强制实现这一点,需要为体积所需的底层 albedo 做一些计算,而我们建议使用一种特定近似。在许多早期模型中,并未准确说明 subsurface 的体积参数如何被定义,因此最终目标外观以及其实现方式都不是完全清晰的。
4 实现
OpenPBR Surface 规范的主要受众是实现者。目标是在模型定义上做到尽可能清晰,同时让它易于集成进任何渲染器。下面讨论的 MaterialX 参考实现简化了这一过程,前提是目标渲染器支持它。接下来我们将考察 OpenPBR Surface 当前在业界中的采纳情况与已有实现。
4.1 MaterialX
MaterialX 的 OpenPBR 参考实现与规范同步开发,以确保对新功能有良好覆盖;针对规范文本的 pull request 也会包含对参考实现的对应修改。该实现是一个使用标准节点构建的 node graph(图 15)。

Autodesk Maya 的 LookdevX 编辑器中的 OpenPBR Surface MaterialX node graph
当某些新功能(例如附加 BSDF 与新参数)无法直接在 graph 中表示时,它们会被添加到 MaterialX 中。这些功能得以加入,离不开 OpenPBR 与 MaterialX 工作组之间的密切合作。OpenPBR 现已集成进 MaterialX 1.39,并已回移植到 MaterialX 1.38.10,同时在支持这些 MaterialX 版本的 USD 版本中可用。它也可在规范仓库中直接获得,以便访问 bleeding edge 版本以及配套验证预设。着色器生成可用于在任何支持 GLSL、MDL、Metal 或 OSL 的渲染器中对其进行渲染。
MaterialX 还包含与 Autodesk Standard Surface 相互转换的 translation graph,这也可用于将 OpenPBR 与其他模型(如 glTF PBR)相互转换。
4.2 采纳情况
来自同行与同事的行业采纳和协作是这里的关键衡量指标。在开放的双周会议中,以及 GitHub 仓库中的工单和 PR 活动中,来自许多厂商与工作室的参与都很活跃,包括 Adobe、Apple、Autodesk、Blender Foundation、Epic Games、Lucasfilm、NVIDIA 和 SideFX。
Autodesk 已在 Maya(图 16)、3ds Max 和 Arnold 中实现并发布 OpenPBR,而自 2026 版本起,它已成为默认材质。Adobe 也同步在其专有渲染器中实现了 OpenPBR(图 1)。
尽管这仍处于早期阶段,但以下是一些已经快速实现或发布了 OpenPBR Surface 支持的渲染器:
- Blender Cycles (https://docs.blender.org/manual/en/latest/render/shader_nodes/shader/principled.html)
- Chaos Vray (https://docs.chaos.com/display/APPSDK/OpenPBR+Shading+Model)
- Epic Games Unreal Engine (https://dev.epicgames.com/documentation/en-us/unreal-engine/interchange-materialx-reference-in-unreal-engine)
- Maxon Redshift (https://help.maxon.net/r3d/maya/en-us/#html/Material+OpenPBR.html)
- NVIDIA Omniverse (https://docs.omniverse.nvidia.com/kit/docs/omni.materialx.libs/latest/Overview.html)
- SideFX 是最早分享展示 Karma 中 OpenPBR Surface 早期渲染结果的团队之一
Autodesk Maya 2026 中的 OpenPBR Surface
5 结论
总而言之,OpenPBR Surface 着色模型的开发产生了以下主要贡献:
- 综合了 Autodesk Standard Surface 与 Adobe Standard Material 着色模型,产出了一个新的基于物理的 uber-shader 模型,汲取两者最佳理念,并被设计为覆盖制作中的大多数使用场景。
- 精心整理出一组直观参数,用于艺术家控制该模型。
- 将新模型定义为一种具体的物理结构,明确规范了 BSDF 与体积的所有相关物理属性,以及这些属性如何由参数化定义。由此,借助光传输定义了一个无歧义的目标外观,并为实现者增加了清晰度。
- 更新既有模型以采用更现代的 BSDF。
- 提供了一个 MaterialX 参考实现。
5.1 经验教训
编写 OpenPBR 规范的过程带来了若干宝贵经验。首先,很明显边界控制至关重要;不可能渲染所有可设想的表面,也不可能满足从个人艺术家到从事高端制作的大型工作室的每一种需求。因此,该规范旨在只覆盖最常见、最核心的材质,并尽可能有效地支持它们。如果从一开始就试图解决每一个案例,就很难避免让标准变得过于复杂和笨重。在实现一个复杂 uber-shader 与把工作卸载到额外节点之间取得平衡也同样重要,这样既能让模型足够完整,又不会过于复杂,同时也不会把实现限制在必须支持 node graph 的渲染器上。
在结合这两套标准时,工作组决定:当现有方案都无法令各方完全满意时,就定义新功能。在某些情况下,我们成功设计出了新的解决方案,而在另一些情况下则以失败告终。一个例子是 subsurface scattering 的参数化,它与 dielectric transmission scattering 的参数化在某种程度上是冗余的,但对艺术家来说非常有用且熟悉。我们曾提出一种新的参数化方式,将观察到的 subsurface diffusion radius 与 phase function anisotropy 解耦,并认为这会是一个有益变化。它几乎进入最终规范,但在测试过程中遭到了强烈反对,因为它在许多边界情况下会产生不受欢迎且不可预测的颜色,也会产生不熟悉的 anisotropy 行为。最终我们回退到一种更易理解的参数化,本质上与 Autodesk Standard Surface 的 subsurface 行为相匹配。
最初的工作组由研究人员、工程师、艺术家以及拥有丰富行业经验、参与产品设计与制作的人组成。贡献者构成保持良好平衡,对于在物理正确性、艺术表达力和参数简洁性之间取得平衡至关重要,这样既不会使模型过于僵硬,也不会让它太容易生成不真实的外观。
同时,识别哪些功能必须从一开始就正确处理,哪些功能可以在不破坏整体设计的前提下后续添加,也非常重要。我们优先实现关键功能,同时为未来的演进、优化和近似保留空间。最后,快速响应实现者和早期采用者的反馈,并处理 bug、澄清说明和更大规模的改进,对于打磨规范、增强其健壮性同样至关重要;这也有助于推动厂商和用户的采纳,并吸引更多贡献者加入。
5.2 未来工作
社区反馈表明,人们希望向模型中加入某些功能。工作组的任务是在这些请求形成共识时识别出来,而其中已有若干特性由于足够受欢迎,极有可能在未来版本标准中被纳入。以下这些功能目前正在积极推进中。
5.2.1 Dual specular
Dual 或 “hazy” specular 已在其他一些着色模型中提供,它为金属 specular highlight 添加一条粗糙度“尾巴”提供了手段,从而形成更丰富的外观范围,而这在制作中有时非常有用。
5.2.2 Retro-reflectivity
该功能被请求用于建模强烈后向散射材质的外观,例如常见于交通锥和路牌等安全应用中,也适用于产品可视化与电商中服装和鞋类的渲染。
5.2.3 解耦的 IOR
虽然 specular_weight 是创作 dielectric reflectivity 的一种便捷方式,但它当前是通过改变 base 的 IOR 来工作的,因此会导致折射发生变化。有人请求将这两种效应解耦,以防止 weight 影响折射。
5.2.4 实时实现
OpenPBR 的目标之一,是能够在广泛的平台上被渲染,从离线路径追踪器一直到移动设备上的实时游戏引擎。定义一个兼容如此不同平台的模型会带来挑战,主要原因在于这些平台固有的技术约束。虽然 OpenPBR 并不规定如何在渲染器中实现它,但必须小心不要作出那些会无意间限制实现决策空间的规范决策。在这方面,寻求处于不同语境下工作的行业厂商反馈至关重要。
尽管 OpenPBR 已经通过 MaterialX 的 GLSL、MDL 和 MetaSL 生成器提供了一个实时实现,但生成出的代码对于某些硬件目标来说可能仍然过于昂贵,或者其近似对于更高端平台而言又过于粗糙。总体而言,社区希望获得开箱即用、性能良好的参考实现,以加快采纳。我们呼吁社区帮助改进这些实时场景中的性能和视觉保真度。需要指出的是,由于硬件本身的持续进步以及图形技术的发展,这是一项不断演进的工作。今天被视为离线的内容,未来很可能能够以实时速度运行。对 OpenPBR 来说,重要的是要准确描述模型,以便无论技术和渲染器实现如何演进,资产的 look intent 都能被长期保留。
5.2.5 超越表面
虽然 surface shader 很可能是许多场景中最常见的一类材质,但制作资产还需要其他一些基础着色模型。未来,我们希望为 hair 和 fur 以及 volumetric effects 添加类似的着色模型,因为在制作环境中,无论是角色、生物、特效还是环境,这些都至关重要。
5.2.6 征集贡献
我们感谢社区提出前文提到的这些议题,另外还有许多讨论正在 GitHub 仓库中进行:https://github.com/AcademySoftwareFoundation/OpenPBR。我们鼓励你通过提交 issue、pull request 和评论来参与。若要参加实时讨论,欢迎出席双周举行的 OpenPBR 公开会议,可在 ASWF 日历中查看日程与连接说明:https://www.aswf.io/meeting-calendar/。最后,如果想进行轻松交流,也欢迎加入 ASWF server 上的 #openpbr Slack 频道:https://slack.aswf.io/。
致谢
作者还要感谢 François Beaune、Eric Bourque、Céline Dameron、Henrik Edstrom、Eugene d’Eon、Jerry Gamache、Romain Gardet、Iliyan Georgiev、Lee Griggs、Niklas Harrysson、Miloš Hašan、Stephen Hill、Alan King、Chris Kulla、Anders Langlands、Frankie Liu、Thomas Makryniotis、André Mazzone、Nikie Monteleone、Michael Nickelsky、Anton Palmqvist、Guido Quaroni、Nathan Reed、Anthony Salvi、Lukas Stockner、Masuo Suzuki、Brecht van Lommel、Andrea Weidlich 和 Nicolas Wirrmann,感谢他们所作出的宝贵贡献。