UE5.8 Substrate Glint 笔记 UE5.8 Substrate Glint 笔记1. Glint 是什么Glint 用于表现大量稀疏、细小、明亮的微表面闪点。适合金属粉末珠光漆钻石或宝石闪烁细小晶体湿润颗粒闪粉、亮片普通 GGX 高光会把大量微小高光平均成一个连续高光无法表现真实的颗粒闪烁。Glint 保留了这些离散的微晶体高亮事件。2. Glint 和普通高光的区别普通 GGX整个像素使用一个连续的微表面分布Glint一个像素覆盖多个微晶体 Cell 每个 Cell 拥有独立的随机微表面状态 分别评估后再过滤合成因此 Glint 的亮度会随着以下因素变化摄像机移动光源方向变化物体旋转UV 变化微晶体密度变化微表面粗糙度变化3. 微表面斜率是什么微表面不是完全平的每个微表面都有自己的倾斜方向。用两个数表示微表面倾斜程度slope (sx, sy)例如(sx, sy) (0, 0) 表示平面 (sx, sy) (0.3, 0) 向 X 方向倾斜 (sx, sy) (0, -0.2) 向 Y 负方向倾斜根据光线方向L和视线方向V先计算半角向量H normalize(L V);然后把半角向量转换成目标斜率slope_h float2( -H.x / H.z, -H.y / H.z );这个目标斜率表示微表面需要倾斜成什么样才能把光反射到摄像机。假设两个目标半角方向拥有相同的NoH目标 AH (0.6, 0.0, 0.8) 目标 BH (0.0, 0.6, 0.8)两者都有NoH 0.8如果你只使用D(NoH)那么 A 和 B 的微表面概率一定相同。但它们的斜率分别是Slope A (-0.75, 0.0) Slope B ( 0.0, -0.75)现在假设材质中有一种方向性微晶体分布X 方向容易出现长条微晶体 Y 方向几乎没有微晶体那么真实结果应该是P22(Slope A) 很高 P22(Slope B) 很低但NoH无法区分它们因为两者的NoH都是0.8。这就是斜率的实际好处NoH 只能表达“距离中心多远” Slope 还能表达“具体朝哪个方向”4. P22 是什么P22可以理解为微表面斜率的概率分布。它回答的问题是当前材质中有多少微表面拥有这个倾斜方向如果目标斜率在分布中很常见P22 较高 → 高光较强如果目标斜率很罕见P22 较低 → 高光较弱Glint 中的P22_M是针对某个具体 Cell 的局部斜率分布评估。5. Beckmann 在 Glint 中的作用UE5.8 Glint 使用 Beckmann 形式的微表面斜率分布。源码中会根据粗糙度创建 Beckmann 描述FBeckmannDesc Beckmann GGXToBeckmann(SafeRoughness);粗糙度较低微表面方向集中 高光更尖锐粗糙度较高微表面方向分散 高光更宽、更柔和Glint 并不是简单读取一张噪声贴图而是根据目标斜率评估微表面匹配概率。6. Glint 的完整处理流程Glint UV ↓ 计算 UVDDX / UVDDY ↓ 构建当前像素 footprint ↓ 把 footprint 近似成椭圆 ↓ 计算 major / minor 轴 ↓ 根据 minorLength 选择 LOD ↓ 遍历椭圆包围盒中的候选 Cell ↓ 计算每个 Cell 的 P22_M ↓ 根据椭圆距离计算 EWA 权重 ↓ 对所有 Cell 加权累积 ↓ sum / sumWts 归一化 ↓ 相邻 LOD 插值 ↓ 输出 Glint_D ↓ 进入 Substrate 的光照计算7. Footprint 是什么Footprint 表示当前屏幕像素在 Glint UV 空间中覆盖的区域。由于一个屏幕像素通常不只对应一个 UV 点而是覆盖一小片 UV 区域所以不能只采样一个微晶体。通过 UV 导数得到 footprintUVDDX ddx(GlintUV); UVDDY ddy(GlintUV);这两个导数描述屏幕像素向 X 方向移动时UV 如何变化屏幕像素向 Y 方向移动时UV 如何变化。它们形成一个 UV 平行四边形Glint 将其进一步近似为椭圆。8. 为什么要用椭圆 footprint椭圆可以表示footprint 的长轴footprint 的短轴footprint 的旋转方向当前像素覆盖的微晶体范围。Glint 会计算majorLength minorLength eccentricity并限制最大各向异性源码中使用MaxAnisotropy 4这样可以避免极端拉伸的 footprint 导致性能和稳定性问题。9. LOD 的作用根据 footprint 的大小选择微晶体分布的 LOD。源码逻辑大致是l NLevels - 1 log2(minorLength); il floor(l); w frac(l);得到il 当前 LOD il 1 相邻 LOD w 两个 LOD 的插值权重最后进行P22 lerp(P22_il, P22_il_plus_1, w);LOD 的作用footprint 很小时使用更细的微晶体分布footprint 很大时使用更粗的统计分布避免远处闪点过密减少远距离闪烁减少 LOD 切换跳变。10. Cell 遍历Glint 不会遍历无限范围而是先计算椭圆的包围盒。对于包围盒内的每个候选 Cell计算它相对于椭圆中心的位置ss Cell 局部坐标 X tt Cell 局部坐标 Y然后计算椭圆距离r2 A * ss * ss B * ss * tt C * tt * tt;判断r2 1只有在椭圆 footprint 内的 Cell 才参与计算。椭圆外的 Cell 会被直接跳过。11. P22_M 的处理内容每个候选 Cell 会进行局部微晶体评估主要包括稳定哈希随机序列生成随机旋转微晶体相对面积判断LOD 对应的微晶体密度目标斜率计算Beckmann 斜率分布评估Glint LUT 查询返回该 Cell 的局部响应。可以概括为P22_M 微晶体密度 × 斜率匹配概率 × 随机微晶体状态12. EWA 权重Glint 使用椭圆加权思想对 footprint 内的 Cell 进行空间过滤。源码中的权重大致为W exp(-2 * r2) - exp(-2);权重特点r2 越小 → 越接近椭圆中心 → 权重越大 r2 越接近 1 → 越接近边缘 → 权重越小 r2 ≥ 1 → 不参与计算累积过程sum P22_M * W; sumWts W;最后归一化filtered sum / max(epsilon, sumWts);这样可以把一个像素覆盖的多个闪点合成为稳定结果。13. Glint 为什么不会简单地闪烁失控Glint 不是简单地给每个像素生成随机噪声也不是简单叠加上一帧结果。它主要依靠稳定哈希UV footprint椭圆 Cell 过滤EWA 权重LOD 选择相邻 LOD 插值微表面斜率分布。因此它属于当前像素空间范围内的统计过滤而不是上一帧画面累积14. Glint 的主要性能开销Glint 比普通 GGX 贵原因不是单独的NoH或一次法线匹配而是多个步骤叠加计算 UV 导数构建 footprint计算椭圆包围盒遍历多个候选 Cell每个 Cell 执行哈希和随机化计算微晶体斜率查询 Glint LUT计算 EWA 权重对两个相邻 LOD 分布进行评估归一化并进行最终插值。简化表示Glint 成本 ≈ Cell 数量 × 每个 Cell 的斜率分布计算 × LOD 数量 × LUT / SampleGrad 成本footprint 越大候选 Cell 越多成本越高。15. Glint 的性能控制方向可以从以下方面控制成本降低 Glint Density降低 Glint 覆盖范围限制最大各向异性远距离降低 Glint 强度远距离使用更粗 LOD只对重要材质启用使用平台质量开关避免在大量屏幕像素上同时使用避免和高成本透明、折射、复杂 Substrate lobe 叠加。Glint 适合用于少量高价值材质不适合默认应用到整个场景。16. Glint 和 Fuzz 的区别Glint稀疏、离散、闪烁的微晶体高光适合金属闪粉宝石珠光漆水晶亮片微小晶体。Fuzz连续、柔和、掠射角明显的高光 lobe适合短绒毛发边缘天鹅绒布料纤维表面柔软织物。核心区别Glint离散的闪点事件 Fuzz连续的掠射反射 lobe17. 普通 Noise 能不能替代 Glint可以做出类似的视觉效果但不能完全替代 Glint。普通 Noise 叠加高光通常缺少微表面斜率匹配真实的半角方向响应footprint 过滤Cell 级别的随机微晶体LOD 统计EWA 空间积分稳定的远距离表现。所以普通 Noise 更像颜色噪声 人工亮度权重Glint 更像微晶体分布 光学方向匹配 空间过滤18. 最终理解Glint 的核心不是“生成很多随机亮点”而是根据光线和视线计算目标微表面斜率 ↓ 判断每个微晶体是否拥有接近这个斜率 ↓ 根据当前像素 footprint 过滤多个微晶体 ↓ 使用 EWA 权重和 LOD 插值合成最终高光最简公式GlintPixel ≈ Σ( P22_M(目标斜率) × 微晶体密度 × EWA footprint 权重 ) ÷ Σ(EWA 权重)一句话总结Glint 是对离散微晶体斜率分布进行 footprint 感知的空间过滤从而得到稳定、稀疏、随视角变化的闪烁高光。