ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PBR材质革命:填对参数,光照再变也不假

PBR材质革命:填对参数,光照再变也不假 一句话说清它解决了什么:以前做材质是调到好看,PBR 是填入物理属性,然后在任何光照下都自动好看。旧流程里,一个金属在白天的场景调好了,搬到夜晚场景就不对了,要重新调。PBR 的目标是:材质只描述这个表面是什么,光照怎么变都不用改。一、核心思想:能量守恒PBR 的全部约束其实就一条物理常识:打到表面的光 反射掉的 吸收掉的 ☀ 入射光 ↘ ──────────── 表面 ↗ ↘ 反射 进入内部(被吸收或散射后出来) 反射的不能比入射的多。旧的做法里,你可以把漫反射和高光都调到很亮,总反射超过入射——物理上不可能,所以在换光照后会显得假。PBR 的参数设计从机制上防止你这么做。二、光打到表面会发生两件事理解这两件事,PBR 的参数就全通了。☀ ↘ ┌─────────────────────┐ │ ① 直接弹回来 → 高光 (Specular) │ 保留光源的颜色 │ │ ② 钻进材质内部 → 漫反射 (Diffuse) │ 被染上材质自己的颜色,再散射出来 └─────────────────────┘高光(镜面反射)漫反射来源表面直接弹回进入内部散射后出来颜色光源的颜色物体自身的颜色方向集中(有角度)四面八方均匀金属和非金属的区别,就在于这两者的配比:非金属(塑料、木头、皮肤、石头) ☀ ↘ ──────── 少量高光(白色) 大量漫反射(物体颜色) → 所以你能看到塑料是红的,同时表面有白色反光 金属(铁、金、铜) ☀ ↘ ──────── 全是高光(带金属自己的颜色) 几乎没有漫反射 → 所以金属没有固有颜色,只有反射环境的颜色这个区别很关键:金属之所以看起来像金属,是因为它只反射环境,不自己发色。所以一块金属放在纯黑房间里,你什么都看不见。三、五个参数,逐个说清主流的 PBR 流程叫Metallic/Roughness(金属度/粗糙度),参数就这几个。① Albedo / Base Color — 基础颜色非金属: 物体的固有颜色(红塑料就填红色) 金属: 金属的反射颜色(金填金黄,铁填浅灰)最容易犯的错:把光影画进贴图里。❌ 贴图里画了阴影、高光、AO → 引擎再打一次光,变成双重光影,看起来很脏 ✅ 贴图只有纯粹的颜色,平的 → 光影全部交给引擎实时计算这是旧流程转 PBR 时最大的习惯改变。Albedo 应该看起来平淡无味,像在均匀阴天拍的。② Metallic — 金属度0 非金属 1 金属它基本是一个开关,不是滑条。现实中没有半金属材质。✅ 正确用法:0 或 1,中间值只用在金属和非金属的交界像素 (比如掉漆的金属,漆是 0、露出的铁是 1) ❌ 错误用法:把 Metallic 设成 0.5 让东西有点金属感 → 结果既不像金属也不像塑料,一片灰糊生锈、油漆、灰尘覆盖的地方 非金属(0),因为你看到的是锈和漆,不是底下的铁。③ Roughness — 粗糙度控制表面微观的平整程度,决定高光是一个点还是一大片。Roughness 0 (光滑) Roughness 1 (粗糙) ☀ ☀ ↘ ↘ ───────── ╱╲╱╲╱╲╱╲ ↗ 集中反射 ↗↑↖→↙ 各方向散开 像镜子 像磨砂 高光是个小亮点 高光是一大片柔和的 环境反射清晰 环境反射模糊0.0 ─── 镜子、抛光金属、平静水面 0.2 ─── 光滑塑料、车漆 0.4 ─── 皮革、抛光木头 0.6 ─── 混凝土、树皮 0.9 ─── 粗布、绒面 1.0 ─── 完全漫反射(现实中很少)粗糙度贴图是让材质真实的头号要素。现实中没有任何表面是均匀粗糙的——用过的东西会有磨亮的边角、沾手印的地方、积灰的凹陷。这些变化全靠粗糙度贴图表现。一个均匀粗糙度的材质,不管颜色多漂亮,看起来都会像塑料玩具。④ Normal Map — 法线贴图用一张图骗引擎这里的表面朝向变了,从而在平面上做出凹凸的光影,不增加任何面数。实际模型:平的一个面 法线贴图:告诉每个像素你的朝向是斜的 结果: 看起来有砖缝、有划痕、有布纹那种紫蓝色的图就是法线贴图,RGB 三个通道存的是朝向的 XYZ。注意:它只骗光影,不改轮廓。所以侧面看会露馅,深度大的结构还是得靠模型或视差贴图。⑤ AO — 环境光遮蔽标记哪些缝隙里光进不去,让凹陷处暗一点。┌──┐ ┌──┐ │ │ │ │ ← 凸起处光充足 ───┘ └──┘ └─── ↑ 缝隙里光被挡住,应该更暗AO 只影响环境光,不该影响直接光照。现在很多引擎有实时 AO(SSAO),贴图 AO 主要用来补充细小结构。四、两套流程的区别你可能会看到另一套参数,叫Specular/Glossiness(镜面/光泽度)。Metallic / Roughness(主流) Base Color Metallic Roughness → 参数少、不容易出错、省一张贴图 → 缺点:金属与非金属交界处可能有白边 Specular / Glossiness(旧,影视和部分管线仍用) Diffuse Specular(彩色) Glossiness → 控制更精细 → 缺点:容易填出物理上不存在的值对游戏项目:直接用 Metallic/Roughness。Unity 的 URP/HDRP、Unreal、Substance 都以它为默认。注意Glossiness 和 Roughness 是反的:Roughness 1 - Glossiness。拿到素材先确认是哪套,搞反了材质会该亮的地方糊、该糊的地方亮。五、贴图的颜色空间:最隐蔽的坑这条不懂会导致贴图看起来总差一点,但说不出哪里不对。贴图分两类: ① 存颜色的 → sRGB(要做伽马校正) Albedo / Base Color Emission ② 存数据的 → Linear(不做校正) Roughness Metallic Normal AO Height❌ Roughness 贴图被当成 sRGB 读取 → 数值全部偏移 → 材质整体偏光滑或偏粗糙 → 你会不断调参数试图修正,但永远差一点 ✅ Unity 里:非颜色贴图的导入设置取消勾选 sRGBUnity 的 Inspector 里那个sRGB (Color Texture)复选框,Roughness / Metallic / AO / Normal 全部要取消勾选。Normal 贴图如果设了Texture Type Normal Map,Unity 会自动处理。六、PBR 需要环境光才成立这是初学最容易卡住的地方:“我按教程填好了金属度和粗糙度,为什么金属看起来像一块死灰?”因为金属靠反射环境来显形,而你的场景里没有环境。PBR 的完整构成: 直接光照(Directional / Point Light) 间接光照 / 环境光(IBL,通常来自 HDRI 天空盒) ↓ 正确的 PBR 效果只有直接光 加上 HDRI 环境 ┌────────┐ ┌────────┐ │ ⚫ │ │ │ │ 死灰 │ ──► │ 反射出 │ │ 的球 │ │ 天空和 │ └────────┘ │ 地面 │ └────────┘所以 PBR 项目必须配:一张HDRI 天空盒(或 Skybox 材质)作为环境光来源反射探针(Reflection Probe)让室内物体也有合理反射烘焙或实时的间接光Unity 里检查Window → Rendering → Lighting,确认 Environment 里有东西。空的话金属永远是灰的。七、Unity 里的对应关系URP / Lit 材质: Base Map ← Albedo 贴图 (sRGB ✅) Metallic Map ← 金属度 (sRGB ❌) Smoothness ← 注意!URP 用的是 Smoothness 1 - Roughness Normal Map ← 法线 (Type: Normal Map) Occlusion Map ← AO (sRGB ❌) Emission Map ← 自发光 (sRGB ✅)Unity 用 Smoothness,不是 Roughness。从 Substance 导出时要么选 Unity 预设(自动反转),要么手动反转一次。这个搞错的后果很明显:所有材质的光滑/粗糙完全颠倒。通道打包(省内存和采样次数):Unity URP 的 Metallic Map: R 通道 → Metallic A 通道 → Smoothness 所以可以把金属度和光滑度塞进一张图八、参考数值表照着填,比凭感觉调快得多。材质Base Color(大致)MetallicRoughness新车漆任意颜色00.1光滑塑料任意颜色00.2磨砂塑料任意颜色00.5皮肤肤色00.4~0.6皮革棕色系00.5木头(抛光)木色00.3木头(原木)木色00.7混凝土灰00.7布料任意颜色00.9铁(抛光)浅灰 #C4C4C410.1铁(旧)浅灰10.4铝#F5F6F610.2金#FFD700 偏暖10.1铜#F7BD8F10.2生锈的铁锈红00.8最后一行值得注意:锈是非金属。很多人把生锈区域也设成金属度 1,结果锈看起来像彩色的铬合金。九、Albedo 的亮度范围现实材质的反射率有上下限,超出会显得假:最暗的现实材质(沥青、木炭) 约 50/255 ← 别用纯黑 最亮的现实材质(新雪、白漆) 约 240/255 ← 别用纯白 安全范围:50 ~ 240❌ Albedo 填 #000000(纯黑) → 物理上不存在,吸收 100% 光线,看起来像个洞 ❌ Albedo 填 #FFFFFF(纯白) → 反射超过 100%,违反能量守恒,在亮光下会发白糊掉十、常见问题速查现象原因金属看起来像死灰色塑料场景没有环境光 / HDRI材质整体脏、像蒙了一层Albedo 里画了光影该光滑的糊、该糊的亮Roughness 和 Smoothness 搞反了参数怎么调都差一点非颜色贴图被当 sRGB 读了一片灰糊、不像任何材质Metallic 填了 0.5 这类中间值锈/漆像彩色金属锈和漆应该是 Metallic 0法线凹凸方向反了OpenGL / DirectX 的绿通道相反,翻转 G 通道暗部像黑洞Albedo 太接近纯黑,提到 50 以上亮部糊成一片白Albedo 太接近纯白,压到 240 以下物体没有反射缺反射探针,或 Probe 没烘焙那个法线绿通道问题值得多说一句:OpenGL 规范(Unity、Blender、Substance 默认) → 绿通道朝上 DirectX 规范(Unreal、3ds Max 默认) → 绿通道朝下 搞错的症状:凹的地方看起来是凸的 修法:在贴图软件里反转绿通道,或在导出时选对预设十一、就记这几条1. PBR 填物理属性,不是调好看。换光照不用重调 2. 金属 vs 非金属是本质区别: 金属只反射环境,非金属有自己的颜色 3. Metallic 当开关用:0 或 1,别填中间值 4. Roughness 贴图是真实感的头号功臣,别用均匀值 5. Albedo 里不要画光影,保持平淡 6. 非颜色贴图取消 sRGB 7. Unity 用 Smoothness,和 Roughness 是反的 8. 没有环境光(HDRI),金属永远是死灰的
返回列表