金属度粗糙度工作流:PBR材质创建指南
金属度粗糙度工作流概述
金属度粗糙度工作流是PBR(基于物理的渲染)的一种实现方式,通过一组贴图定义材质属性,使材质在不同光照环境下表现一致。该工作流使用金属度(Metallic)贴图区分金属与非金属,使用粗糙度(Roughness)贴图控制表面光滑程度,结合反照率(Albedo)贴图定义基础颜色。它是现代游戏引擎(如Unity、Unreal)和DCC工具(如Substance Painter)的标准工作流。
核心贴图介绍
反照率贴图(Albedo)
反照率贴图定义材质的基础颜色,但不包含光照信息(如阴影、高光)。对于金属,反照率表示金属的颜色;对于非金属,表示表面颜色。反照率贴图不应包含任何光照或阴影细节,否则会破坏PBR的物理正确性。
金属度贴图(Metallic)
金属度贴图使用灰度值指定哪些区域是金属或非金属。白色(值1)表示纯金属,黑色(值0)表示非金属(如木材、塑料)。金属度通常是二值的,但可以有过渡值表示混合材质(如生锈的金属)。金属的漫反射为黑色,高光颜色来自反照率;非金属的漫反射为反照率颜色,高光为白色。
粗糙度贴图(Roughness)
粗糙度贴图控制表面的微观粗糙程度。白色(值1)表示完全粗糙,漫反射强,高光分散;黑色(值0)表示完全光滑,高光锐利。粗糙度可以类比为光泽度的反值(粗糙度 = 1 - 光泽度)。
其他常用贴图
- **法线贴图(Normal Map)**:提供表面凹凸细节,增强真实感。
- **环境光遮蔽贴图(AO Map)**:提供接触阴影,增强局部暗部细节。
- **高度贴图(Height Map)**:用于视差映射等效果,增加几何感。
使用金属度粗糙度工作流的步骤
- **创建或获取PBR贴图**:使用Substance Painter、Quixel Mixer等工具制作,或从素材库下载。
- **导入游戏引擎**:将贴图导入Unity或Unreal,创建材质。
- **连接贴图**:将反照率、金属度、粗糙度、法线等贴图分别连接到材质的对应输入。
- **调整参数**:根据需要调整贴图的平铺、偏移,或修改材质属性(如金属度、粗糙度的滑块)。
- **测试不同光照**:在多种光照环境下检查材质表现,确保一致性。
金属度粗糙度工作流与高光/光泽度工作流的对比
| 特性 | 金属度粗糙度工作流 | 高光/光泽度工作流 |
|------|-------------------|-------------------|
| 贴图数量 | 较少(金属度+粗糙度) | 较多(高光颜色+光泽度) |
| 直观性 | 直观,易于理解 | 稍复杂 |
| 边缘伪影 | 可能产生白边 | 较少 |
| 控制灵活性 | 较低 | 较高 |
| 现代引擎支持 | 广泛支持 | 部分支持 |
多数情况下推荐金属度粗糙度工作流,因为它更简单、贴图更少,且不容易出现物理错误。
常见问题
金属度贴图应该使用灰度还是彩色?
金属度贴图必须使用灰度图,因为金属度是一个标量值。彩色通道会被忽略或产生错误。
粗糙度贴图可以用光泽度贴图代替吗?
可以,粗糙度 = 1 - 光泽度。有些工具或引擎使用光泽度,可以反转得到粗糙度。
为什么金属度贴图不能有中间值?
在物理上,大多数材质要么是金属要么是非金属,中间值通常只出现在过渡区域(如腐蚀、涂层)。因此,金属度贴图通常是非黑即白,但允许少量过渡值。
如何避免金属边缘的白边?
白边通常是由于反照率贴图在金属/非金属边界处颜色不正确(如非金属区域使用了白色)。确保反照率贴图正确,或使用更高分辨率的贴图减少锯齿。
金属度粗糙度工作流适合所有材质吗?
适合大多数硬表面和角色材质,但对于特殊材质(如布料、皮肤、车漆)可能需要额外的贴图(如次表面散射、清漆层)来增强效果。
常见问题
金属度贴图应该使用灰度还是彩色?
金属度贴图必须使用灰度图,因为金属度是标量值。彩色通道会被忽略或导致错误。
粗糙度贴图可以用光泽度贴图代替吗?
可以,粗糙度 = 1 - 光泽度。两者可以互相转换。
为什么金属度贴图不能有中间值?
物理上材质通常要么是金属要么是非金属,中间值仅出现在过渡区域,因此建议保持二值或少量过渡。
如何避免金属边缘的白边?
确保反照率贴图在边界处颜色正确,或使用更高分辨率贴图来减少锯齿。
金属度粗糙度工作流适合所有材质吗?
适合大多数材质,但特殊材质(如皮肤、车漆)可能需要额外贴图来增强效果。