这篇是对 Unity HDRP 中 StackLit Shading Model 的拆解整理。原始资料以“车漆技术分析”PDF 形式保存,这里把它整理成更适合网页阅读的技术文,重点放在复杂材质的结构、BRDF 路径和工程裁剪思路上。

为什么拆 StackLit
StackLit 是 HDRP 里表达能力很强、但代码路径也很重的 Lit 模型。它适合车漆、涂层、各向异性金属、多层高光和需要更复杂能量分配的材质。问题在于它不像普通 Lit 那样容易一眼看清:输入项多、宏分支多、BSDF 数据结构长,材质表现和性能成本都藏在多个 include 与 feature switch 里。
拆它的目标不是完整复刻 HDRP,而是回答三个工程问题:哪些输入真正决定车漆层次,哪些 BRDF 路径是视觉核心,哪些特性在项目里可以被裁剪或改写。
车漆材质的层级
车漆不是一个单层高光材质。更合理的理解方式是把它拆成三个层次:
- Base Coat:负责主体颜色、粗糙度和基础漫反射/镜面反射,是材质的底层观感。
- Flakes / Pigment:负责金属颗粒、细碎闪点和视角变化,通常需要噪声、法线扰动或额外 mask 控制。
- Clear Coat:负责最外层清漆高光,粗糙度更低,Fresnel 更明显,是车漆“亮”和“厚”的主要来源。
StackLit 的价值在于它能把这些层次放在一个材质模型里做能量分配,而不是简单把几层高光叠加到过曝。
源码阅读路径
阅读 StackLit 时可以按数据流切,而不是从文件第一行硬读。一个更稳定的路径是:
- Material Inputs:先看 ShaderGraph / 材质面板能暴露哪些输入,包括 base color、smoothness、coat、anisotropy、iridescence 等。
- SurfaceData:确认贴图和材质参数如何被打包成表面数据,这一步决定美术输入和 shader 计算之间的边界。
- BSDFData:继续看 SurfaceData 如何转换成光照阶段真正使用的数据,重点观察粗糙度、法线、Fresnel、coat mask 等字段。
- LightLoop / EvaluateBSDF:最后看直接光、IBL、阴影和多层高光如何参与最终输出。
这样拆可以避免陷在宏和平台分支里,也更容易把结论转成项目里的材质调试规则。
关键 BRDF 模块
StackLit 的复杂度主要来自多个高光 lobe 和额外材质现象。对车漆来说,最值得关注的是:
- Specular Lobe:决定基础高光宽度和强度,通常与 roughness、normal、F0 强相关。
- Clear Coat Lobe:表现外层清漆。它应该更锐利,也要影响底层能量,避免简单相加导致能量不守恒。
- Anisotropy:用于拉伸高光方向,适合刷痕金属或某些特殊涂层,车漆中需要谨慎使用。
- Flakes:更像表现层控制,通常依赖噪声、mask、normal variation 或额外闪点逻辑,而不是单靠标准 BRDF。
- Fresnel:控制掠射角反射增强,是车漆边缘质感的重要来源。
工程裁剪思路
项目里不一定需要完整 StackLit。拆解后的价值,是知道哪些功能可以按材质目标裁剪。
| 模块 | 视觉收益 | 成本/风险 | 建议 |
|---|---|---|---|
| Clear Coat | 明显提升车漆厚度和高光层次 | 增加一次高光计算和参数管理 | 车漆主材质保留 |
| Anisotropy | 能做方向性高光 | 需要 tangent 数据和额外调试 | 只在明确需要时开启 |
| Iridescence | 特殊变色效果明显 | 美术可控性和性能都更复杂 | 默认关闭,做变体彩蛋/特殊皮肤时再开 |
| Flakes | 增强近景细节和材质识别度 | 噪声采样、闪烁和 mip 稳定性问题 | 需要配套距离衰减和 mip 策略 |
| 多层法线 | 细节丰富 | 采样数上升,移动端不稳定 | 按平台拆 quality level |
调试方法
调 StackLit 类复杂材质时,最忌讳只看最终 Beauty。建议保留一组 debug view:
- BaseColor / Smoothness / Metallic / CoatMask 分通道检查。
- Normal 与 Bent Normal 对比,确认高光方向没有异常。
- 单独查看 base specular、clear coat specular、IBL contribution。
- 固定光照和固定曝光,避免自动曝光掩盖材质问题。
- 近景、远景、动态旋转三种情况下检查 flakes 是否闪烁。
作品集结论
这篇文章真正想表达的不是“会用 HDRP 的 StackLit”,而是把复杂 shader 模型拆成可解释、可裁剪、可调试的工程资产。对实时渲染 TA 来说,这类能力比单纯把效果调出来更重要:它连接了美术目标、材质模型、源码阅读和性能取舍。