Roughness 粗糙度贴图指南:制作、Blender 接线与反射排错

弄清粗糙度贴图黑白值的含义,学习从照片制作实用贴图、在 Blender 中正确连接,并转换到 Unity 的 Smoothness 工作流。

发布于
Roughness Map, PBR Materials, Blender
Roughness 粗糙度贴图指南:制作、Blender 接线与反射排错

粗糙度贴图,也叫 roughness map,用来控制材质各处的反射有多清晰、散开得有多宽。在常见的金属度/粗糙度工作流中,黑色表示光滑,白色表示粗糙,灰色介于两者之间。它通过着色参数描述微观表面变化,不会把表面顶高、切出沟槽,也不会把塑料变成金属。

制作时真正值得先想清楚的,是哪些区域应该反射得不一样。石材地面被磨亮的一块、把手上的油性指印、漆面上积起的干燥灰尘,即使底色几乎相同,也可能需要不同的粗糙度分布。

原创解析着色示意:同一个青绿色球体在固定光照下分别使用 0.15、0.45、0.80 的粗糙度

原创示意图采用简化的 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 使用不同的响应定义,只做反相并不能保证两个渲染器的结果一致。

粗糙度数据示意:黑色光滑、白色粗糙;Non-Color 图像可经过 Map Range 后连接 Principled BSDF 的 Roughness

原创连接示意图。右上公式说明光滑度与粗糙度的数值转换,下方展示 Blender 插口名称。可选的 0.35–0.65 范围只是制作示例,并非测量得到的材质预设。

怎样从照片制作有用的粗糙度贴图

一张照片同时包含颜料颜色、表面处理、照明、反射和相机处理。光滑白塑料上印着的黑字,可能和周围塑料有相同的粗糙度。直接把照片转为灰度,就可能根据颜色凭空制造出粗糙度差异。

可以借照片判断区域与磨损分布,但需要自己决定表面处理应该怎样表现。

  1. 选好原图。 优先使用光照均匀、正对表面的照片,避开明显投影和过曝高光。制作整套贴图前先校正透视。
  2. 区分材质区域。 分清裸露金属、油漆、灰尘、湿润处和印刷图案,并判断哪些差异真的影响表面处理。
  3. 先用统一数值。 给同一材质区域设定固定粗糙度,在目标光照下观察。先把整体质感调对,再增加变化。
  4. 克制地添加变化。 先做较大的磨损或接触痕迹;细小颗粒只添加到最终物体尺寸下仍然看得见的部分。
  5. 控制数值范围。 初次比较时,可以把蒙版映射到 0.35–0.65,而非直接使用纯黑与纯白。只有参考材质确实需要时才扩大范围。
  6. 检查重复铺贴。 同时检查多次重复和最终模型。颜色接缝看不出来的贴图,也可能在高光划过时露出反复出现的亮方块。

以经常被触碰的喷漆面板为例,可以先假设常被摩擦的地方更光滑,积尘处更粗糙,再对照参考验证。这只是制作假设。磨料造成的划伤也可能让表面变粗,所以“磨损”不对应一个固定粗糙度。

导出时使用无损灰度图,或把数据准确放入打包贴图所需的通道。普通变化通常可以先用 8 位图像;如果平滑渐变出现阶梯,要同时检查位深、压缩、数值范围和纹理分辨率。单纯增加像素,修不好对材质的错误判断。

在 Blender 中正确连接

下面采用 Blender 4.5 LTS 的名称,使用常规 Principled 材质。

  1. 选择已经展开 UV 的物体,打开 Shader Editor,创建材质,连接 Principled BSDF → Material Output 的 Surface。
  2. 添加 Image Texture 节点,打开粗糙度图像。
  3. 将图像的 Color Space 设为 Non-Color。粗糙度是数值数据。Blender 的色彩管理指南解释了数据贴图为何应避开颜色转换。
  4. 连接 Image Texture 的 Color → Principled BSDF 的 Roughness。三个通道相同的 RGB 灰度图可以直接这样连接。如果数据打包在某一个通道中,使用 Separate Color,只连接装有粗糙度的通道。
  5. 与其他材质贴图保持相同的 UV 布局和预期缩放。基础颜色通过独立图像节点连接;普通颜色图像一般使用 sRGB。
  6. 在能看到清楚反射的场景里预览。如果法线或凹凸干扰判断,先暂时断开它们。

需要可控调整时,在灰度数值与 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 MapR 金属度、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”可能指另一种参数定义。转换后仍应与参考材质比较。

为什么粗糙度贴图看起来几乎是一片灰?

窄灰阶范围可能就是有意设计的。许多表面只需要轻微变化,并不需要黑白分明的蒙版。应该看模型上反射光的表现,而非图像编辑器里对比度够不够强。

官方参考资料

文档与产品实现核对于 2026 年 10 月 22 日。文中的示例数值和解析示意图均用于解释原理,不属于测量得到的材质预设。