PBR 材质详解
做仿真场景、游戏资产或自动驾驶可视化时,「PBR 材质」几乎是默认选项------但若把 Metallic/Roughness 五张贴图当成全部,遇到皮肤、玻璃、雾效或道路标线就会对不上号。PBR 是一种渲染哲学与纹理工作流 ;Metallic/Roughness 只是其中一种 BRDF 参数化方式。它主要解决大多数不透明表面的 BRDF;完整管线里还有 SSS、折射、自发光、体积散射等扩展。
术语 :行业口语里的「PBR 材质」,严格说是遵循 PBR 原则的着色模型 + 贴图工作流,并非某一种单一材质类型。
目录
- [1. PBR 是什么](#1. PBR 是什么)
- [2. 主流工作流:Metallic / Roughness](#2. 主流工作流:Metallic / Roughness)
- [3. 线性色彩空间与贴图规范](#3. 线性色彩空间与贴图规范)
- [4. 常见材质参数参考](#4. 常见材质参数参考)
- [5. 典型材质怎么搭](#5. 典型材质怎么搭)
- [6. 另一工作流:Specular / Glossiness](#6. 另一工作流:Specular / Glossiness)
- [7. 制作要点与禁忌](#7. 制作要点与禁忌)
- [8. 扩展通道:Emission 与 Subsurface](#8. 扩展通道:Emission 与 Subsurface)
- [9. 其他常见扩展属性](#9. 其他常见扩展属性)
- [10. IBL 与环境 Lookdev](#10. IBL 与环境 Lookdev)
- [11. 不止 PBR:仿真引擎里的其他材质类型](#11. 不止 PBR:仿真引擎里的其他材质类型)
- [12. 引擎侧分类速览](#12. 引擎侧分类速览)
- [13. 常见问题与反模式](#13. 常见问题与反模式)
- [14. 延伸阅读](#14. 延伸阅读)
1. PBR 是什么
PBR(Physically Based Rendering,基于物理的渲染)用接近真实物理的模型描述光与表面的交互,核心约束包括:
| 概念 | 含义 |
|---|---|
| 能量守恒 | 反射 + 吸收 ≤ 入射,避免「越打越亮」 |
| 微表面理论 | 粗糙度决定微法线分布,影响高光形状与宽度 |
| 菲涅尔效应 | 掠射角反射增强;正视角也有基础反射 |
目标不是「某一种艺术风格」,而是换光照环境仍合理------同一套贴图在室外、室内、HDR 环境下都应可信。
1.1 微表面 BRDF 在算什么
实时 PBR 大多采用 Cook-Torrance 形式的镜面项 + Lambert(或 Disney 风格)漫反射项,常见实现为:
text
f_r = f_diffuse + f_specular
f_specular = D(h) · F(v,h) · G(v,l,h) / (4 · (n·v) · (n·l))
| 符号 | 常见实现 | 作用 |
|---|---|---|
| D | GGX / Trowbridge-Reitz | 微表面法线分布;shader 内常令 α = roughness² 再传入 GGX 的 D() |
| F | Schlick 近似 | 菲涅尔:非金属 F0 约 4%,金属 F0 = Albedo |
| G | Smith / Schlick-GGX | 几何遮蔽与阴影,防止掠射角过亮 |
非金属的 F0 (垂直入射反射率)在 Metallic/Roughness 工作流里通常不单独做贴图 ,引擎按 ~0.04(约 4%) 处理;金属则把 Base Color 当作 F0。这是 Metallic 贴图存在的原因之一------用一张灰度图切换「漫反射 + 低 F0」与「无漫反射 + 有色 F0」两套行为。
#mermaid-svg-4x8996noAsQIRDRQ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-4x8996noAsQIRDRQ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-4x8996noAsQIRDRQ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-4x8996noAsQIRDRQ .error-icon{fill:#552222;}#mermaid-svg-4x8996noAsQIRDRQ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-4x8996noAsQIRDRQ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-4x8996noAsQIRDRQ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-4x8996noAsQIRDRQ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-4x8996noAsQIRDRQ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-4x8996noAsQIRDRQ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-4x8996noAsQIRDRQ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-4x8996noAsQIRDRQ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-4x8996noAsQIRDRQ .marker.cross{stroke:#333333;}#mermaid-svg-4x8996noAsQIRDRQ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-4x8996noAsQIRDRQ p{margin:0;}#mermaid-svg-4x8996noAsQIRDRQ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-4x8996noAsQIRDRQ .cluster-label text{fill:#333;}#mermaid-svg-4x8996noAsQIRDRQ .cluster-label span{color:#333;}#mermaid-svg-4x8996noAsQIRDRQ .cluster-label span p{background-color:transparent;}#mermaid-svg-4x8996noAsQIRDRQ .label text,#mermaid-svg-4x8996noAsQIRDRQ span{fill:#333;color:#333;}#mermaid-svg-4x8996noAsQIRDRQ .node rect,#mermaid-svg-4x8996noAsQIRDRQ .node circle,#mermaid-svg-4x8996noAsQIRDRQ .node ellipse,#mermaid-svg-4x8996noAsQIRDRQ .node polygon,#mermaid-svg-4x8996noAsQIRDRQ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-4x8996noAsQIRDRQ .rough-node .label text,#mermaid-svg-4x8996noAsQIRDRQ .node .label text,#mermaid-svg-4x8996noAsQIRDRQ .image-shape .label,#mermaid-svg-4x8996noAsQIRDRQ .icon-shape .label{text-anchor:middle;}#mermaid-svg-4x8996noAsQIRDRQ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-4x8996noAsQIRDRQ .rough-node .label,#mermaid-svg-4x8996noAsQIRDRQ .node .label,#mermaid-svg-4x8996noAsQIRDRQ .image-shape .label,#mermaid-svg-4x8996noAsQIRDRQ .icon-shape .label{text-align:center;}#mermaid-svg-4x8996noAsQIRDRQ .node.clickable{cursor:pointer;}#mermaid-svg-4x8996noAsQIRDRQ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-4x8996noAsQIRDRQ .arrowheadPath{fill:#333333;}#mermaid-svg-4x8996noAsQIRDRQ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-4x8996noAsQIRDRQ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-4x8996noAsQIRDRQ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4x8996noAsQIRDRQ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-4x8996noAsQIRDRQ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4x8996noAsQIRDRQ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-4x8996noAsQIRDRQ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-4x8996noAsQIRDRQ .cluster text{fill:#333;}#mermaid-svg-4x8996noAsQIRDRQ .cluster span{color:#333;}#mermaid-svg-4x8996noAsQIRDRQ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-4x8996noAsQIRDRQ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-4x8996noAsQIRDRQ rect.text{fill:none;stroke-width:0;}#mermaid-svg-4x8996noAsQIRDRQ .icon-shape,#mermaid-svg-4x8996noAsQIRDRQ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-4x8996noAsQIRDRQ .icon-shape p,#mermaid-svg-4x8996noAsQIRDRQ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-4x8996noAsQIRDRQ .icon-shape .label rect,#mermaid-svg-4x8996noAsQIRDRQ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-4x8996noAsQIRDRQ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-4x8996noAsQIRDRQ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-4x8996noAsQIRDRQ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 入射光 Li
微表面 BRDF
漫反射
非金属为主
镜面反射
D·F·G
出射 radiance Lo
环境贴图 IBL
2. 主流工作流:Metallic / Roughness
Unreal、Unity、Blender Principled BSDF、Substance Painter 等默认采用 Metallic / Roughness 工作流。
| 贴图 / 参数 | 作用 | 要点 |
|---|---|---|
| Albedo / Base Color | 固有颜色 | 非金属 = 漫反射色;金属 = 反射色(如金 #FFD700)。不含烘焙光影、高光、阴影 |
| Metallic | 金属度 | 0 = 非金属,1 = 纯金属;中间灰仅表示物理混合层(锈、灰尘、油漆剥落),不代表单一均质材质 |
| Roughness | 粗糙度 | 0 = 镜面光滑,1 = 完全哑光;贴图值为 Perceptual Roughness (观感),GGX 内部多用 α = roughness² |
| Normal | 微凹凸 | 切线空间 RGB;纹理色彩空间选 Non-Color / Linear |
| AO | 环境光遮蔽 | 缝隙暗部;只影响间接光/环境光,不应烘焙进 Albedo |
可选补充贴图:
| 贴图 | 作用 |
|---|---|
| Height / Displacement | 真实几何位移(需 tessellation)或 parallax 近似 |
| Curvature | 边缘磨损、污渍分布(Substance 常用) |
| Thickness | 配合 SSS / Transmission 的薄厚 |
2.1 ORM 打包(引擎常见)
为省采样与带宽,引擎常把通道打包:
| 引擎 / 习惯 | R | G | B |
|---|---|---|---|
| Unreal 默认 ORM | Ambient Occlusion | Roughness | Metallic |
| 部分自定义 | Roughness | Metallic | AO |
导入前确认目标引擎的 通道顺序;Substance Painter 导出时可指定 UE / Unity 预设,避免 Roughness 与 Metallic 对调。
2.2 Normal 与 Height 的分工
| Normal Map | Height Map | |
|---|---|---|
| 改变 | 光照方向(假凹凸) | 可驱动 parallax / 置换 |
| 成本 | 低 | 置换更高 |
| 适用 | 绝大多数资产 | 近景地面、砖墙、硬币边缘 |
Normal 切线空间 OpenGL(Y+)与 DirectX(Y−) 绿通道可能相反;跨引擎迁移时需勾选 Flip Green Channel 或重新烘焙。
多数实时管线在 fragment shader 内将 perceptual roughness 平方后作为 GGX 的 α 使用------因此贴图上 0.5 的 roughness 在分布上往往比「一半光滑」更锐,Lookdev 宜在目标引擎内调,而非只看 DCC 数值。
贴图数据流:
text
Albedo + Metallic + Roughness + Normal + AO → BRDF + IBL → Tone Mapping → 显示
3. 线性色彩空间与贴图规范
PBR 计算在线性光强空间进行;sRGB 贴图若当线性用,高光会过曝、漫反射发灰。
| 贴图类型 | 通常色彩空间 | 说明 |
|---|---|---|
| Albedo / Base Color | sRGB(导入时转 linear) | 人眼感知的「颜色」 |
| Metallic、Roughness、AO | Linear / Non-Color | 数据而非颜色 |
| Normal | Linear / Non-Color | RGB 存方向 |
| HDR 环境贴图 | Linear HDR | .hdr / .exr |
工程习惯:
- DCC 导出勾选 「Color management / ACES / Linear」 与目标引擎一致。
- 查看贴图时用 Mipmap + 正确 gamma 的查看器;浏览器直接看 PNG 容易误判 Albedo 是否过暗。
- 最终上屏还有 Tone Mapping(Reinhard / ACES / AgX) 与 Exposure ;Lookdev 必须在目标 tone mapper 下做,不能只在 Substance 里满意就入库。
4. 常见材质参数参考
以下为经验起点,实际项目需结合参考照片与引擎 tone mapping 微调。
| 材质 | Metallic | Roughness | Albedo 提示 |
|---|---|---|---|
| 抛光金属 | 1 | 0.05 ~ 0.2 | 钢浅灰 / 金 / 铜红棕 |
| 轻微氧化金属 | 1(锈区降 Metallic) | 0.3 ~ 0.6 | 锈迹单独 Roughness ↑ |
| 木头、布料 | 0 | 0.6 ~ 0.9 | 材质本色 |
| 塑料 | 0 | 0.3 ~ 0.5 | 可较鲜艳 |
| 陶瓷 | 0 | 0.05 ~ 0.15 | 偏白或彩色哑光 |
| 橡胶、轮胎 | 0 | 0.7 ~ 0.95 | 深灰,仿真中有时单独 Lambert |
| 皮革 | 0 | 0.4 ~ 0.7 | 棕系;微 SSS 可选 |
| 湿路面 | 0 | 0.05 ~ 0.15(水膜) | 深灰;常配合 Clear Coat 或单独 Roughness 层 |
5. 典型材质怎么搭
5.1 车漆(Clear Coat 双层)
text
底层:Car Paint Color(Metallic=0 或 0.3~0.5 金属漆)
+ Flakes Normal(可选)
+ Roughness 0.2~0.4
顶层:Clear Coat Weight ≈ 1
+ Clear Coat Roughness 0.02~0.1
+ Coat IOR ≈ 1.45~1.55(默认常接近 1.5,与薄层清漆/玻璃接近)
清漆层提供第二层镜面高光 ;底色 Roughness 与清漆 Roughness 分开调,否则要么「塑料感」要么「肥皂泡」。
5.2 玻璃
| 模式 | Metallic | Roughness | Transmission | IOR | 说明 |
|---|---|---|---|---|---|
| 实心玻璃 | 0 | 0 ~ 0.05 | 1 | 1.45 ~ 1.52 | 实时需透明混合或 RT |
| 磨砂玻璃 | 0 | 0.3 ~ 0.6 | 0.8 ~ 1 | 1.5 | Roughness 主导模糊 |
| 车窗(仿真) | 0 | 极低 | 高 | 1.52 | 常关阴影接收,防噪点 |
水 IOR ≈ 1.33 ,玻璃 ≈ 1.5 ,钻石 ≈ 2.4(实时很少真算)。
5.3 皮肤(SSS + Specular)
text
Base Color:整体肤色(勿过饱和)
Roughness:0.4 ~ 0.6(面部略低于肢体)
Subsurface:0.3 ~ 0.5,Scatter Color 偏红
Specular:保留 oily layer(部分引擎单独 Specular Scale)
近景角色用 Subsurface Profile / 预积分 SSS;远景可降为普通 PBR + 暖色 Scatter 近似。
5.4 树叶(卡片 + 双面)
text
Albedo + Alpha Mask(或 Alpha Clip)
Two-Sided / 关闭 Backface Culling
Subsurface + Transmission + Thickness Map(叶脉薄、叶缘更透)
Alpha Blend 排序贵且易错;游戏/仿真大量植被常用 Alpha Clip(Mask) + MSAA/TAA。
6. 另一工作流:Specular / Glossiness
较老管线(CryEngine 等曾用)以 Diffuse + Specular(RGB 控 F0 反射率)+ Glossiness(≈ 1 − Roughness) 代替 Metallic + Roughness。
| Specular / Glossiness | Metallic / Roughness | |
|---|---|---|
| 优点 | 非金属 F0 可精细控制(宝石、液体) | 贴图少、能量守恒易保证 |
| 缺点 | 易过亮、贴图占用大、上手难 | 极端非金属 F0 需额外技巧 |
| 转换 | Glossiness = 1 − Roughness | 非金属 Specular ≈ 0.04 |
| 现状 | 维护旧资产 | 新项目首选 |
7. 制作要点与禁忌
- Base Color 纯净:不烘焙光照、高光、AO;AO 走独立通道。
- Metallic 二值化 :主体材质尽量 0 或 1 ;中间灰只用于空间混合的多层物理(锈斑、尘边、清漆磨损),勿当作「半金属」均质参数。
- Albedo 亮度范围 :非金属不要太暗(sRGB 约 30~50 为常见下限);金属 Base Color 别超过约 240。
- Roughness 讲故事:划痕、污渍、磨损用局部 Roughness 变化表现,比改 Albedo 更物理。
- AO 使用边界 :只压 间接光 / 环境光;直射光不应被 AO 贴图「假阴影」掉。
- 分辨率一致 :同一资产 Albedo / Normal / ORM 同尺寸、同 UV 壳,避免 Mipmap 错位。
- Cavity / 微遮挡(Specular 工作流) :UE 等允许
BaseColor *= Cavity、Specular *= Cavity做缝隙变暗------Cavity 不是高光贴图,勿用 Specular 通道手绘镜面形状(Metallic/Roughness 工作流下通常无独立 Specular 贴图)。
8. 扩展通道:Emission 与 Subsurface
标准 PBR 五通道之外,DCC 与引擎普遍还提供以下扩展------与 Metallic/Roughness 一起构成完整表面材质系统。
8.1 Emission(自发光)
表面自身发光,亮度由 Emissive Color × Intensity 决定,不依赖外部光照。
| 场景 | 参数示意 |
|---|---|
| 日光灯管 | 白色 × 5 ~ 15 (量级参考,非跨引擎统一单位) |
| 灯泡、火焰辉光 | 暖橙 × 2 ~ 5 |
| 屏幕、键盘背光、霓虹、车尾灯 | Emissive Map 控制发光区域 |
引擎单位差异(验收时以对齐曝光为准):
| 引擎 / DCC | 常见语义 |
|---|---|
| Unreal | Emissive 常与 nits(cd/m²) 等量纲挂钩(Lumen/HDR 管线) |
| Blender | Emission Strength 为能量乘数 |
| Unity HDRP | Exposure + Emissive Intensity 共同决定上屏亮度 |
不同引擎对 Emission 的定义与 tone mapping 耦合方式不同,同一数值不能跨引擎照搬。
注意:
- 默认常不参与阴影投射;要照亮周围需烘焙 GI(如 UE Lightmass)或实时 GI / Lumen。
- 普通「很亮的颜色」应优先用 Albedo + 灯光,不要把一切高光都塞进 Emission。
- 仿真里交通灯、刹车灯常用 Emissive + 正确色坐标,便于摄像头检测 pipeline 分割。
8.2 Subsurface / SSS(次表面散射)
模拟光进入半透明介质、内部散射后再出射------背光处透红/暖,普通 BRDF 难以表现。
简单版(Blender Principled / UE Subsurface Weight)
| 参数 | 典型值 |
|---|---|
| Subsurface Amount | 皮肤 0.3 ~ 0.6 ;树叶 0.5 ~ 0.8 ;蜡 0.7 ~ 1.0 ;石头/金属 0 |
| Subsurface Color / Radius | 皮肤淡粉红/红橙;Blender 用 RGB Radius 控散射深度 |
透射辅助
| 参数 | 用途 |
|---|---|
| Transmission | 背光穿透(薄布、叶片) |
| Thickness Map | 越薄越透;叶片边缘效果 |
| 材质 | Subsurface | 散射色 |
|---|---|---|
| 人体皮肤 | 0.3 ~ 0.5 | 浅粉红 |
| 蜂蜡 / 蜡烛 | 0.7 ~ 1.0 | 暖黄 |
| 玉 | 0.4 ~ 0.6 | 淡绿 |
| 树叶 | 0.5 ~ 0.8 + Transmission | 黄绿 |
SSS 在数学上走 BSSRDF(如 dipole、预积分 profile),与标准 BRDF 是不同着色路径:
| BRDF | BSSRDF | |
|---|---|---|
| 光进出位置 | 同一点(表面反射) | 不同点(入射后体内散射再出射) |
| 典型代价 | 每像素一次 BRDF 采样 | 模糊 pass / profile 查表,显著更贵 |
9. 其他常见扩展属性
| 属性 | 作用 | 典型场景 |
|---|---|---|
| Opacity / Alpha | 透明度 | 玻璃、树叶卡片 |
| Alpha Clip vs Blend | 不透明测试 vs 真实混合 | 植被用 Clip;玻璃用 Blend/RT |
| Transmission + IOR | 折射 | 水 1.33 ,玻璃 ~1.5 |
| Clear Coat | 顶层清漆 | 车漆、烤漆木;Coat IOR 常 1.45~1.55 |
| Anisotropy + Aniso Angle | 定向高光 | 拉丝金属、CD 盘面、头发 |
| Sheen | 纤维边缘光 | 绒布、天鹅绒、麂皮;Disney/Blender 中为独立层,位于其它 BRDF 层之上 |
| Thin Film(薄膜干涉) | 视角相关色散 | 油膜、肥皂泡、镀膜玻璃;厚度约 400~800 nm + 薄膜 IOR |
Anisotropy 在切线方向拉伸高光;需 Anisotropy Direction Map 或 Flow Map 控制方向,与 Normal 切线空间一致。
Sheen 模拟微观纤维在掠射角的额外反射,与 Anisotropy(定向拉伸高光)不同------布料近景常 Sheen + 低 Roughness 纤维 Normal 合用。
Thin Film 在 Principled / OpenPBR 一类模型里用薄膜厚度与 IOR 产生随视角变化的彩虹边;实时里多作近景点缀,远距可省略。
10. IBL 与环境 Lookdev
PBR 材质在均匀灰背景 下几乎无法验收;Lookdev 依赖 IBL(Image-Based Lighting):
#mermaid-svg-7UF2wuYiQGKAohBe{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-7UF2wuYiQGKAohBe .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-7UF2wuYiQGKAohBe .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-7UF2wuYiQGKAohBe .error-icon{fill:#552222;}#mermaid-svg-7UF2wuYiQGKAohBe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7UF2wuYiQGKAohBe .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-7UF2wuYiQGKAohBe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7UF2wuYiQGKAohBe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7UF2wuYiQGKAohBe .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-7UF2wuYiQGKAohBe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7UF2wuYiQGKAohBe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7UF2wuYiQGKAohBe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7UF2wuYiQGKAohBe .marker.cross{stroke:#333333;}#mermaid-svg-7UF2wuYiQGKAohBe svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7UF2wuYiQGKAohBe p{margin:0;}#mermaid-svg-7UF2wuYiQGKAohBe .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7UF2wuYiQGKAohBe .cluster-label text{fill:#333;}#mermaid-svg-7UF2wuYiQGKAohBe .cluster-label span{color:#333;}#mermaid-svg-7UF2wuYiQGKAohBe .cluster-label span p{background-color:transparent;}#mermaid-svg-7UF2wuYiQGKAohBe .label text,#mermaid-svg-7UF2wuYiQGKAohBe span{fill:#333;color:#333;}#mermaid-svg-7UF2wuYiQGKAohBe .node rect,#mermaid-svg-7UF2wuYiQGKAohBe .node circle,#mermaid-svg-7UF2wuYiQGKAohBe .node ellipse,#mermaid-svg-7UF2wuYiQGKAohBe .node polygon,#mermaid-svg-7UF2wuYiQGKAohBe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7UF2wuYiQGKAohBe .rough-node .label text,#mermaid-svg-7UF2wuYiQGKAohBe .node .label text,#mermaid-svg-7UF2wuYiQGKAohBe .image-shape .label,#mermaid-svg-7UF2wuYiQGKAohBe .icon-shape .label{text-anchor:middle;}#mermaid-svg-7UF2wuYiQGKAohBe .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-7UF2wuYiQGKAohBe .rough-node .label,#mermaid-svg-7UF2wuYiQGKAohBe .node .label,#mermaid-svg-7UF2wuYiQGKAohBe .image-shape .label,#mermaid-svg-7UF2wuYiQGKAohBe .icon-shape .label{text-align:center;}#mermaid-svg-7UF2wuYiQGKAohBe .node.clickable{cursor:pointer;}#mermaid-svg-7UF2wuYiQGKAohBe .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-7UF2wuYiQGKAohBe .arrowheadPath{fill:#333333;}#mermaid-svg-7UF2wuYiQGKAohBe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7UF2wuYiQGKAohBe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7UF2wuYiQGKAohBe .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7UF2wuYiQGKAohBe .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-7UF2wuYiQGKAohBe .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7UF2wuYiQGKAohBe .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-7UF2wuYiQGKAohBe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7UF2wuYiQGKAohBe .cluster text{fill:#333;}#mermaid-svg-7UF2wuYiQGKAohBe .cluster span{color:#333;}#mermaid-svg-7UF2wuYiQGKAohBe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7UF2wuYiQGKAohBe .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-7UF2wuYiQGKAohBe rect.text{fill:none;stroke-width:0;}#mermaid-svg-7UF2wuYiQGKAohBe .icon-shape,#mermaid-svg-7UF2wuYiQGKAohBe .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-7UF2wuYiQGKAohBe .icon-shape p,#mermaid-svg-7UF2wuYiQGKAohBe .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-7UF2wuYiQGKAohBe .icon-shape .label rect,#mermaid-svg-7UF2wuYiQGKAohBe .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-7UF2wuYiQGKAohBe .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-7UF2wuYiQGKAohBe .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-7UF2wuYiQGKAohBe :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} HDRI 环境贴图
Diffuse Irradiance
或 SH 近似
Specular Prefilter
Mip 链
材质 BRDF
合成 Lo
Tone Mapping + Gamma
| 概念 | 说明 |
|---|---|
| Split-Sum Approximation | 实时把环境镜面积分拆成 预滤波环境贴图 + BRDF LUT,UE/Unity 内置 |
| HDRI 选择 | 室外资产用室外 HDRI,室内用室内;勿用错误色温验收 Albedo |
| Exposure | 同一材质在不同 Exposure 下观感差很大;仿真需与 相机 ISP / gamma 管线对齐 |
Substance Painter、Blender Lookdev、UE Asset Validation 场景宜固定一套 Studio HDRI + 室外 HDRI 双验收。
11. 不止 PBR:仿真引擎里的其他材质类型
仿真与实时引擎默认推荐 PBR ,但下列场景往往需专用着色模型或 PBR 扩展:
#mermaid-svg-Fq9aSALR03JV0Cq4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Fq9aSALR03JV0Cq4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Fq9aSALR03JV0Cq4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Fq9aSALR03JV0Cq4 .error-icon{fill:#552222;}#mermaid-svg-Fq9aSALR03JV0Cq4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Fq9aSALR03JV0Cq4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Fq9aSALR03JV0Cq4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Fq9aSALR03JV0Cq4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Fq9aSALR03JV0Cq4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Fq9aSALR03JV0Cq4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Fq9aSALR03JV0Cq4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Fq9aSALR03JV0Cq4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Fq9aSALR03JV0Cq4 .marker.cross{stroke:#333333;}#mermaid-svg-Fq9aSALR03JV0Cq4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Fq9aSALR03JV0Cq4 p{margin:0;}#mermaid-svg-Fq9aSALR03JV0Cq4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Fq9aSALR03JV0Cq4 .cluster-label text{fill:#333;}#mermaid-svg-Fq9aSALR03JV0Cq4 .cluster-label span{color:#333;}#mermaid-svg-Fq9aSALR03JV0Cq4 .cluster-label span p{background-color:transparent;}#mermaid-svg-Fq9aSALR03JV0Cq4 .label text,#mermaid-svg-Fq9aSALR03JV0Cq4 span{fill:#333;color:#333;}#mermaid-svg-Fq9aSALR03JV0Cq4 .node rect,#mermaid-svg-Fq9aSALR03JV0Cq4 .node circle,#mermaid-svg-Fq9aSALR03JV0Cq4 .node ellipse,#mermaid-svg-Fq9aSALR03JV0Cq4 .node polygon,#mermaid-svg-Fq9aSALR03JV0Cq4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Fq9aSALR03JV0Cq4 .rough-node .label text,#mermaid-svg-Fq9aSALR03JV0Cq4 .node .label text,#mermaid-svg-Fq9aSALR03JV0Cq4 .image-shape .label,#mermaid-svg-Fq9aSALR03JV0Cq4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-Fq9aSALR03JV0Cq4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Fq9aSALR03JV0Cq4 .rough-node .label,#mermaid-svg-Fq9aSALR03JV0Cq4 .node .label,#mermaid-svg-Fq9aSALR03JV0Cq4 .image-shape .label,#mermaid-svg-Fq9aSALR03JV0Cq4 .icon-shape .label{text-align:center;}#mermaid-svg-Fq9aSALR03JV0Cq4 .node.clickable{cursor:pointer;}#mermaid-svg-Fq9aSALR03JV0Cq4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Fq9aSALR03JV0Cq4 .arrowheadPath{fill:#333333;}#mermaid-svg-Fq9aSALR03JV0Cq4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Fq9aSALR03JV0Cq4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Fq9aSALR03JV0Cq4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Fq9aSALR03JV0Cq4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Fq9aSALR03JV0Cq4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Fq9aSALR03JV0Cq4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Fq9aSALR03JV0Cq4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Fq9aSALR03JV0Cq4 .cluster text{fill:#333;}#mermaid-svg-Fq9aSALR03JV0Cq4 .cluster span{color:#333;}#mermaid-svg-Fq9aSALR03JV0Cq4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Fq9aSALR03JV0Cq4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Fq9aSALR03JV0Cq4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-Fq9aSALR03JV0Cq4 .icon-shape,#mermaid-svg-Fq9aSALR03JV0Cq4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Fq9aSALR03JV0Cq4 .icon-shape p,#mermaid-svg-Fq9aSALR03JV0Cq4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Fq9aSALR03JV0Cq4 .icon-shape .label rect,#mermaid-svg-Fq9aSALR03JV0Cq4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Fq9aSALR03JV0Cq4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Fq9aSALR03JV0Cq4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Fq9aSALR03JV0Cq4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} PBR Metallic/Roughness
金属/塑料/木/墙...
Clear Coat / Anisotropy
非标准或专用 Shader
折射 / Translucent
Subsurface Profile
Unlit / Emissive
Lambert 仅漫反射
Retro-reflective 标线
Volume 雾/霾/水
| 类型 | 用途 | 与标准 PBR 关系 |
|---|---|---|
| Clear Coat | 车漆、钢琴烤漆 | PBR 双层扩展 |
| Translucent / Refractive | 挡风玻璃、镜头、水杯 | 折射 + IOR;实时常近似 |
| Subsurface Profile | 皮肤、蜡、橡胶 | BSSRDF,非普通 BRDF |
| Unlit / Emissive | HUD、标定板、天空盒 | 无光照计算 |
| Lambert / Diffuse Only | 部分 LiDAR 反射建模 | 快但不守恒 |
| Retro-reflective | 道路标线、反光带 | 逆反射,需自定义 BRDF/IES |
| Volume | 雾、烟、霾、大气 | 参与介质,非表面 shader |
仿真双目标 :人眼可视化要「像」;传感器仿真还要 反射率曲线、Retro 角度响应、雾的散射相位函数 等------同一 Mesh 上可能 渲染用 PBR + 传感器用简化 BRDF 双材质 ID。
12. 引擎侧分类速览
| 引擎 / 场景 | 常见材质 / Shader |
|---|---|
| Unreal Engine | Default Lit(PBR)、Clear Coat、Subsurface / Profile、Translucent、Unlit、Masked、Volume Fog |
| Unity HDRP | Lit 通过 Material Type 切换 Standard / Subsurface / Anisotropic / Iridescence 等,本质仍是 Principled 家族变体;另有 Fabric / Hair / Eye、Unlit、Decal、Volume |
| Blender(Cycles/Eevee) | Principled BSDF:Base + Subsurface/Radius + Coat/IOR + Sheen + Thin Film + Emission 等于 OpenPBR Surface 一体化栈 |
| 自动驾驶仿真(CARLA、VTD、PreScan 等) | 车身 PBR ;标线 Retroreflective ;信号灯 Emissive ;部分传感器 Lambert ;天气 Volumetric Fog |
一句话对照:
- Emission = 自己发光,不依赖外界亮度。
- Subsurface = 光透入再散出,做皮肤 / 蜡 / 叶 / 玉。
- PBR = 主流通用不透明表面 模型;仿真里常与折射、体积、逆反射等并存。
13. 常见问题与反模式
| 现象 | 常见原因 | 处理 |
|---|---|---|
| 整体发灰、无对比 | Albedo 过暗;或 AO 乘进直射光 | 提高 Base Color;AO 只影响间接项 |
| 高光过曝、发白 | sRGB 贴图未转 linear;Roughness 反相 | 检查导入设置;ORM 通道顺序 |
| 金属像塑料 | Metallic 非 0/1;Albedo 过饱和 | 二值化 Metallic;金属用合理反射色 |
| 塑料像金属 | Metallic 残留灰度;F0 被错误提高 | 清理 Metallic 贴图 |
| Normal 看起来「假」 | 强度过高;OpenGL/DX 绿通道反了 | 降强度或重烘焙;Flip Y |
| 玻璃全黑/全透明 | Blend 排序;无 IBL;无 Transmission | 调整渲染队列;补环境光;开折射 |
| 仿真与实车色差大 | Tone mapping / 曝光 / 色域不一致 | 对齐相机 ISP 与 ACES / sRGB 输出 |
| 远处闪烁 | Alpha Blend 植被;Mipmap 与 Alpha | 改 Alpha Clip;Alpha to Coverage |
反模式速记:在 Albedo 里画阴影、把 AO 烘焙进 Base Color、用 Emission 代替照明、全场景 Metallic 中间灰、用 Specular 贴图手绘高光(Cavity 误用)、不看 HDRI 就定稿。
14. 延伸阅读
- Substance Painter --- PBR Guide
- Blender Manual --- Principled BSDF
- Unreal Engine --- Physically Based Materials
- Unity HDRP --- Material features
- LearnOpenGL --- PBR Theory
- Disney BRDF Notes(Burley 2012)
参数范围为常见工程经验值;不同引擎对 Roughness→α 映射、Emission 单位与 tone mapping 可能不同,请以目标引擎文档与 Lookdev 场景为准。文中「PBR 材质」均指遵循 PBR 原则的着色与工作流,非单一材质分类。