Substrate 材质
Substrate Materials
Substrate 用一种更有表现力、更模块化的框架,取代旧材质系统里固定的一组着色模型和混合模式(Default Lit、Clear Coat 等)。材质被看作一块块「物质板 (Slab)」,每块是用有明确单位的物理量参数化的原则化 BSDF,再通过混合、垂直分层等运算组合成图。代价是光照评估更贵,所以提供参数混合和两种 GBuffer 格式(Blendable / Adaptive)来在速度和画质之间取舍。新项目默认启用 Substrate;升级到 5.7 及以后的老项目默认不启用。
原理:从「着色模型」到「物质板」
旧系统(官方称为 legacy 或非 Substrate 路径)用一组固定的着色模型,见 材质系统。Substrate 去掉了旧系统中的某些抽象,换成可以测量的物质属性;材质是「物质板」构成的图,每块 Slab 是一个原则化的 BSDF,用有明确单位的物理量参数化,图中的运算包括混合和分层。由于表示方式是原则化的,Substrate 材质可以按平台能力自动简化,用画质换性能。分层也更容易做,例如金属上的液体,或次表面散射材质上的清漆。(Overview of Substrate Materials in Unreal Engine)分层材质的理论见 薄膜干涉与分层材质,BSDF/BRDF 见 双向反射分布函数。
运算节点
| 运算 | 作用 | 注意 |
|---|---|---|
| Vertical Layer | 把 Top 层叠在 Bottom 层上,底层外观受顶层属性影响;Top Thickness 控制顶层厚度 | 适合车漆、木器清漆、表面湿润 |
| Horizontal Mixing | 在表面上混合两种材质(不是叠一层物质) | — |
| Coverage Weight | 控制分层中某块 Slab 的覆盖比例;也可以用来做半透明(alpha 作覆盖率或不透明度) | — |
| Add | 把两块 Slab 相加 | 不符合物理:出射能量多于入射能量,应尽量避免 |
| Select | 在两条路径中选一个,最终只剩一块 Slab | 每像素只评估一个闭包 (closure),性能好;可以用蓝噪声随机选择 |
(Overview of Substrate Materials in Unreal Engine)
flowchart BT B["Bottom Slab:金属"] --> V["Vertical Layer"] T["Top Slab:清漆,Top Thickness"] --> V V --> R["材质根节点 Front Material"]
图中清漆 Slab 通过垂直分层叠在金属 Slab 上,结果接到根节点。
- 参数混合 (Parameter Blending):混合和分层会让光照评估变贵;打开 Use Parameter Blending 后,运算节点会先把输入的 Slab 参数混合成一块 Slab,用视觉准确度换更便宜的光照评估。(Overview of Substrate Materials in Unreal Engine)这和 RTR4 里「先混合参数、只着色一次」的思路一致,见 基于物理的着色。
GBuffer 格式:速度 vs 画质
| Blendable GBuffer | Adaptive GBuffer | |
|---|---|---|
| 目标 | 固定内存占用、可预测的速度,主要面向 60Hz 项目 | 画质,发挥 Substrate 的全部能力 |
| 性能 | 与非 Substrate 路径相当 | 更高,取决于屏幕上可见材质的复杂度 |
| 功能 | 有限,类似非 Substrate 路径;所有平台视觉一致 | 支持更复杂的着色;可以设置闭包数和每像素字节数(默认 80 字节/像素) |
| 烘焙 | 无额外开销 | 比 Blendable 多约 15%,复杂材质更多 |
| 贴花 | 支持可混合贴花和 DBuffer 贴花 | 只支持 DBuffer 贴花(会强制启用) |
| 平台 | 所有平台 | 只在 Xbox Series X/S、PS5/PS5 Pro、SM6 的 Windows/macOS/Linux 上可用;其他平台简化并回退到 Blendable |
(Overview of Substrate Materials in Unreal Engine)新项目默认用 Blendable;汽车、建筑等模板默认用 Adaptive。GBuffer 的背景见 延迟着色,贴花见 贴花渲染。
迁移的坑
- 老材质无需修改就能用:它们仍用非 Substrate 的根节点参数,在编译时转换成 Substrate,避免修改或重存资产,也有助于降低烘焙成本。(Overview of Substrate Materials in Unreal Engine)
- 在根节点上右键 Convert to Substrate 会自动生成 Slab 并接线,但这种显式转换是永久的、不可撤销,转换后的材质与非 Substrate 项目不兼容;在禁用了 Substrate 的项目中,Substrate 材质会渲染成黑色。(Overview of Substrate Materials in Unreal Engine)