URP 渲染实战 / 第 10 章 逐行读懂 URP Lit / 案例 10.6
案例 10.6金属度 × 光滑度矩阵入门
目标:用 URP Lit 拍一张 5×5 的参数矩阵,作为理解与调参的速查图。行:金属度 0、0.25、0.5、0.75、1(从上到下);列:光滑度 0、0.25、0.5、0.75、1(从左到右);BaseColor 为同一个暖橙色。
Assets/Cookbook/Ch10/Editor/Ch10Shots.cs(节选:matrix)
[BookShot("ch10-matrix", W = 900, H = 820)] static void Matrix(Shot s) { // 行:金属度 0 → 1(从上到下);列:光滑度 0 → 1(从左到右) var baseCol = new Color(0.95f, 0.64f, 0.38f); s.Background(new Color(0.3f, 0.31f, 0.33f)); for (int r = 0; r < 5; r++) for (int c = 0; c < 5; c++) s.Sphere(s.Lit(baseCol, r / 4f, c / 4f), new Vector3((c - 2) * 1.12f, (2 - r) * 1.12f, 0), 1f); OrthoRows(s, 2.95f); s.SunDir(35, 30, 1.3f); s.Sun.shadows = LightShadows.None; }

沿着矩阵读,能把本章所有源码对上号:
- 第一行(电介质):颜色来自漫反射,高光与环境反射都是无色的;光滑度越高,亮核越小越亮,同时出现天空的倒影(grazingTerm 增大,边缘反射增强)。
- 最后一行(金属):漫反射为 0,颜色全在高光和反射里;光滑的金属球几乎就是一面染色的镜子,映出天空与地平线。左下角的粗糙金属显得暗而“脏”,这是 surfaceReduction 与单次散射能量损失共同的结果。
- 中间三行:金属度 0.25~0.75 的材质物理上并不存在,它们只是两端的线性混合——漫反射按 衰减,F0 从 0.04 向底色插值。看起来像“蒙了一层灰的金属”,这也是为什么美术规范一般要求金属度贴图尽量取 0 或 1。
- 最右一列:光滑度 1 时 被钳到 ,太阳在球上只剩一个针尖般的亮点,但它仍然存在且极亮(未做色调映射时截断为白)。
把矩阵当作“光照环境检查卡”
这张图还有一个实用价值:当你怀疑某个场景的光照设置有问题时,把同样的 25 个球放进去拍一张,和这里的标准图比较。如果金属一行整体发黑,多半是反射探针缺失或强度过低;如果电介质一行的高光边缘泛白、整体发灰,可能是环境光(SH)太强;如果光滑的球上看不到任何倒影,检查材质的 Environment Reflections 开关与 URP Asset 的反射探针设置;如果所有球都过曝成一片,检查是否开启了 HDR 与色调映射。很多“材质不对”的问题,其实是“光照环境不对”,第 13 章会把这种检查流程化。