粗糙度贴图,也叫 roughness map,用来控制材质各处的反射有多清晰、散开得有多宽。在常见的金属度/粗糙度工作流中,黑色表示光滑,白色表示粗糙,灰色介于两者之间。它通过着色参数描述微观表面变化,不会把表面顶高、切出沟槽,也不会把塑料变成金属。
制作时真正值得先想清楚的,是哪些区域应该反射得不一样。石材地面被磨亮的一块、把手上的油性指印、漆面上积起的干燥灰尘,即使底色几乎相同,也可能需要不同的粗糙度分布。
原创示意图采用简化的 GGX 着色模型,固定颜色、几何形状、IOR、相机、曝光和光源采样,只改变粗糙度。左至右的高光逐渐扩散。这是原理示意,并非 Blender 截图、真实材料测量样本或渲染器性能测试。
粗糙度贴图究竟改变什么
微表面模型把材质看作由许多微小朝向组成的分布。朝向越集中,反射越集中;分布越分散,反射就向更多方向展开。Blender 的 Principled BSDF 文档也把 Roughness 定义为镜面反射和透射的微表面粗糙度。
判断贴图时要记住,高粗糙度材质依然会反射光,尤其在接近掠射的视角下。深色、低粗糙度的物体,如果环境中没有明亮内容可供反射,也可能看上去几乎全黑。提高曝光或增加金属度,无法补上缺少的光照参照。
先给场景加入一处容易辨认的反射,例如矩形面光源、明亮窗户,或者同时有明暗区域的环境光。整个场景照得均匀无差别,反而不容易看清粗糙度的变化。
| 贴图或参数 | 控制的内容 | 无法解决的问题 |
|---|---|---|
| Base Color,基础颜色 | 材质本身的颜色信息 | 反射模糊程度或凹凸 |
| Roughness,粗糙度 | 每个纹素处反射的扩散程度 | 凸起边缘或外轮廓 |
| Normal/Bump,法线/凹凸 | 光照计算中的表面朝向 | 真实几何,也不能单独替代粗糙度 |
| Metallic,金属度 | 表面采用金属还是非金属的响应 | 泛指污渍、磨损或粗糙程度 |
想进一步理解凹凸的处理方式,可以阅读 Bump map 与 Normal map 对比。
黑白值与 Smoothness 的相反约定
归一化粗糙度中,0 表示光滑,1 表示粗糙。8 位图像的像素值 128,按数据读取时约等于 0.50;64 约等于 0.25。这些数值本身不对应某种材料的通用预设。
Smoothness,也就是光滑度,使用相反的方向。如果目标参数采用兼容的归一化光滑度定义,可以这样转换:
smoothness = 1 - roughness
8 位光滑度 = 255 - 8 位粗糙度例如粗糙度 0.25 对应光滑度 0.75。不过,遇到名为“gloss”的旧贴图,应先查清来源规范。有些旧资产中的 gloss 使用不同的响应定义,只做反相并不能保证两个渲染器的结果一致。
原创连接示意图。右上公式说明光滑度与粗糙度的数值转换,下方展示 Blender 插口名称。可选的 0.35–0.65 范围只是制作示例,并非测量得到的材质预设。
怎样从照片制作有用的粗糙度贴图
一张照片同时包含颜料颜色、表面处理、照明、反射和相机处理。光滑白塑料上印着的黑字,可能和周围塑料有相同的粗糙度。直接把照片转为灰度,就可能根据颜色凭空制造出粗糙度差异。
可以借照片判断区域与磨损分布,但需要自己决定表面处理应该怎样表现。
- 选好原图。 优先使用光照均匀、正对表面的照片,避开明显投影和过曝高光。制作整套贴图前先校正透视。
- 区分材质区域。 分清裸露金属、油漆、灰尘、湿润处和印刷图案,并判断哪些差异真的影响表面处理。
- 先用统一数值。 给同一材质区域设定固定粗糙度,在目标光照下观察。先把整体质感调对,再增加变化。
- 克制地添加变化。 先做较大的磨损或接触痕迹;细小颗粒只添加到最终物体尺寸下仍然看得见的部分。
- 控制数值范围。 初次比较时,可以把蒙版映射到 0.35–0.65,而非直接使用纯黑与纯白。只有参考材质确实需要时才扩大范围。
- 检查重复铺贴。 同时检查多次重复和最终模型。颜色接缝看不出来的贴图,也可能在高光划过时露出反复出现的亮方块。
以经常被触碰的喷漆面板为例,可以先假设常被摩擦的地方更光滑,积尘处更粗糙,再对照参考验证。这只是制作假设。磨料造成的划伤也可能让表面变粗,所以“磨损”不对应一个固定粗糙度。
导出时使用无损灰度图,或把数据准确放入打包贴图所需的通道。普通变化通常可以先用 8 位图像;如果平滑渐变出现阶梯,要同时检查位深、压缩、数值范围和纹理分辨率。单纯增加像素,修不好对材质的错误判断。
在 Blender 中正确连接
下面采用 Blender 4.5 LTS 的名称,使用常规 Principled 材质。
- 选择已经展开 UV 的物体,打开 Shader Editor,创建材质,连接 Principled BSDF → Material Output 的 Surface。
- 添加 Image Texture 节点,打开粗糙度图像。
- 将图像的 Color Space 设为 Non-Color。粗糙度是数值数据。Blender 的色彩管理指南解释了数据贴图为何应避开颜色转换。
- 连接 Image Texture 的 Color → Principled BSDF 的 Roughness。三个通道相同的 RGB 灰度图可以直接这样连接。如果数据打包在某一个通道中,使用 Separate Color,只连接装有粗糙度的通道。
- 与其他材质贴图保持相同的 UV 布局和预期缩放。基础颜色通过独立图像节点连接;普通颜色图像一般使用 sRGB。
- 在能看到清楚反射的场景里预览。如果法线或凹凸干扰判断,先暂时断开它们。
需要可控调整时,在灰度数值与 Roughness 之间插入 Map Range。设置 From Min 为 0、From Max 为 1、To Min 为 0.35、To Max 为 0.65,即得到 r = 0.35 + 0.30 × mask。输入可能超出预期范围时启用 Clamp。Color Ramp 可以更细地控制不同灰阶,但过于陡峭的色带也会抹掉细腻过渡。
不要为了“增强”粗糙度,把同一张图接到 Base Color、Normal 或 Displacement。不同插口会以完全不同的含义解释这些数字。
做一次条件固定的反射检查
下面的小场景适合重复排查问题,但不能保证不同渲染器输出完全相同。
在矩形面光源下放一个球体和一个平面。使用统一的中性基础颜色、Metallic 0 和固定 IOR。开始时关闭 Coat 和贴图法线,保持曝光、光源大小与位置、网格和 UV 缩放不变。
先比较 0.15、0.45、0.80 等固定粗糙度,再换成自己的贴图。球体便于观察反射形状,平面便于检查区域蒙版和重复图案。分别改变视角与光源位置,不要同时修改,以便确定缺陷由哪个变化引起。
最后逐一恢复基础颜色图和法线图。如果材质只有依靠原照片里某一道固定亮条才显得可信,原图很可能保留了不该写进材质的光照。
把粗糙度正确带入 Unity
Unity 的材质输入取决于渲染管线和着色器。单独一张 roughness PNG,并不一定能直接放进 Smoothness 工作流。
| 目标 | 需要准备的内容 | 导入与材质检查 |
|---|---|---|
| URP Lit 的金属度工作流 | 将粗糙度转为光滑度;选择 Metallic Alpha 时,把光滑度装入 Metallic Map 的 Alpha | 确认 Smoothness Source;Smoothness 滑块还会乘到贴图数值上 |
| HDRP Lit 的 Mask Map | R 金属度、G 环境遮蔽、B 细节蒙版、A 光滑度 | 作为 Default 导入并关闭 sRGB |
| 自定义着色器或 Shader Graph | 按图表定义提供粗糙度或光滑度 | 核对通道、是否反相以及数据读取方式 |
Unity 6 的 URP Lit 参考文档列出了 Metallic Alpha、Albedo Alpha 两种光滑度来源,以及滑块乘数。要观察贴图本身、不额外降低光滑度,可以先把乘数设为 1。导出时必须保留真正的 Alpha 通道,JPEG 无法承载它。
HDRP 采用另一套通道布局,见 Mask and detail maps 官方说明。其他工作流中的 ORM 贴图,不能直接当作 HDRP Mask Map。先满足着色器对通道的约定,再判断画面好坏。
常见问题怎样排查
| 现象 | 可能原因 | 先检查什么 |
|---|---|---|
| 整个表面像湿了一样 | 粗糙度过低、Smoothness 没有反相,或数据图被按 sRGB 解码 | 先换成固定 0.5,再查数值方向和色彩空间 |
| 每块区域都像粉笔 | 数值过高,或变化被压进很粗糙的窄范围 | 检查实际通道值,暂时移除重映射节点 |
| 印刷图案改变了光泽 | 直接用底色亮度推算粗糙度,没有区分材质 | 先把图案和基底设成统一表面处理作比较 |
| 只有反射中出现网格 | 粗糙度边界不连续,或重复蒙版太明显 | 观察高光扫过多次铺贴的结果 |
| Blender 与 Unity 不一致 | 数值方向、打包、乘数、光照或着色器响应不同 | 改原图前,先验证导入后真正读取的通道 |
| 调整几乎没有效果 | 反射中缺乏明暗特征、UV/通道错误,或 Coat 层正在影响结果 | 用已知面光源反射,单独检查基础粗糙度路径 |
用 SeamlessCanvas 生成起始贴图
照片转 PBR 纹理工具支持登录后免费生成贴图。SeamlessCanvas 是我们自己的产品。当前粗糙度输出依据图像亮度和局部对比估计数值,无法测量物理粗糙度,也不能自动分清每一处颜料变化与表面处理变化。
上传光照均匀的原图,生成粗糙度后,按上面的 Blender 流程检查。把文字、投影带来的错误变化抹平,再在材质中调整整体范围。Normal 和 Height 负责另一条凹凸路径,不应和粗糙度混用。
这条流程适合原型和可继续编辑的初稿。如果产品照片的表面处理需要高度还原,应采用测量参考、受控拍摄或专门的材质制作流程。需要先准备可重复的底图时,可以从图像转无缝纹理工作流开始,再派生各张贴图。
常见问题
粗糙度和凹凸贴图是一回事吗?
不是。粗糙度描述反射如何扩散;Bump 根据高度差改变着色法线。表面可以很光滑但刻有深槽,也可以几何上平整、表面处理却很粗糙。
粗糙度贴图该用 sRGB 还是 Non-Color?
在 Blender 中,数值型粗糙度使用 Non-Color。在引擎里,按照着色器和通道打包要求使用对应的数据贴图导入设置。普通基础颜色图通常走颜色图像的处理路径。
Gloss 贴图直接反相就行吗?
如果来源文档明确规定其光滑度/光泽参数与目标粗糙度互为补数,可以直接反相。旧资产要格外核对,“gloss”可能指另一种参数定义。转换后仍应与参考材质比较。
为什么粗糙度贴图看起来几乎是一片灰?
窄灰阶范围可能就是有意设计的。许多表面只需要轻微变化,并不需要黑白分明的蒙版。应该看模型上反射光的表现,而非图像编辑器里对比度够不够强。
官方参考资料
- Blender 4.5 Principled BSDF,材质参数与反射粗糙度。
- Blender 4.5 色彩管理,颜色图像与数值数据的区别。
- Unity 6 URP Lit 材质参考,光滑度来源与乘数。
- Unity HDRP 17 Mask and detail maps,通道打包与导入设置。
文档与产品实现核对于 2026 年 10 月 22 日。文中的示例数值和解析示意图均用于解释原理,不属于测量得到的材质预设。