Bump Map 与 Normal Map:凹凸贴图、法线贴图该选哪种?

公平比较高度凹凸与切线空间法线,了解 Blender 节点接线、Unity 导入、互相转换的局限,以及怎样避免重复叠加同一份细节。

发布于
Bump Map, Normal Map, PBR Materials
Bump Map 与 Normal Map:凹凸贴图、法线贴图该选哪种?

需要在支持的着色器里用灰度高度制作、调整凹凸时,先选 Bump map;目标流程要求明确的表面方向,尤其是游戏资产烘焙时,先选切线空间 Normal map。 如果外轮廓和真实深度必须变化,就需要几何或真正的置换。

灰度凹凸贴图记录高度,法线贴图记录方向。两者都只改变着色,不移动网格。从同一张高度图转换出来的法线图,不会自动增加表面细节;Bump 也同样会响应移动的光源。

本文怎样比较两种技术

比较的任务是给已经展开 UV 的表面增加浅浮雕,同时保留原网格。重点考察制作方式、携带的信息、接入流程、叠加方式和常见失败原因。Blender 4.5 LTS、Unity 6 文档核对于 2026 年 10 月 22 日。

原创示意图采用同一份周期高度数据、相同的导数缩放、光源和着色函数。其中一条路径直接使用计算出的法线,另一条先编码为 8 位 RGB,再解码、归一化后着色,用来单独展示数据表示方式的差别。它并非 Blender 渲染、烘焙质量测试或 GPU 性能测试。

SeamlessCanvas 是我们自己的产品。下文把照片派生贴图列为一种起步方式,但它不能替代针对具体网格进行的高模到低模烘焙。

原创解析对比:高度图、对应 RGB 法线图,以及同一来源和光照下基本一致的两种着色结果

左侧是高度数据,随后是编码后的法线。最后两格使用同一份源坡度,因此细小数值差异来自 RGB 量化。在实际项目中,渲染器的过滤方式或切线处理还可能引入其他差异。

先按实际任务做选择

你要完成的任务更合适的起点原因与限制
在 Blender 中绘制浅划痕、毛孔或程序化颗粒Height 接入 Bump易于修改与缩放;最终效果仍受凹凸过滤和映射影响
把雕刻细节转移到游戏低模烘焙的切线空间法线图记录相对于目标网格的方向;需要匹配的 UV 与切线
向 Unity 的 Normal Map 插口交付细节切线空间法线图符合着色器输入要求;灰度图需要先转换
把烘焙倒角与另一份细颗粒叠加烘焙法线加独立的 Bump/细节法线保留两个可独立调整的尺度;避免重复施加同一份浮雕
让砖边、轮胎花纹或岩壁轮廓凸出几何或置换会改变形状;单靠 Bump 和 Normal 不会改变外轮廓
从一张光照均匀的材质照片开始估计得到的 Height/Normal 配对适合草稿;颜色和照明可能被错认成几何

这里不适合给出一个总分。手绘高度场、雕刻烘焙和照片派生贴图,信息来源不同。如果所谓“Normal 胜出”的对比图,只给法线路径提供了精细雕刻,就没有单独比较贴图技术本身。

Bump map 储存什么

本文中的 Bump map 指用于着色的单通道标量高度纹理。通常白色表示更高、黑色表示更低,实际方向还取决于反相与着色器缩放。着色器读取相邻位置的高度变化,用它来偏转着色法线。

Blender 的 Bump 节点提供 Height、Strength、Distance 和 Normal 输入。这使灰度绘制与程序高度非常好用,修改高度图案时不必手工编辑向量颜色。

关键在于坡度,而非某个像素单独有多亮。在普通的纯 Bump 设置里,全白图和全黑图的高度梯度都为零,所以两者都不会产生浮雕。给所有高度值同时加上一个常数,也不会改变坡度;提高对比度会改变坡度,因而可能增强效果。

Bump 并非只能处理“竖直方向的光照”。两个纹理方向上的导数会共同生成倾斜法线,响应来自不同方向的光源。它的限制来自标量高度场的表达、过滤过程,以及实际表面在这层细节尺度上仍然保持平整。

灰度也不等于“必须是 8 位”。高度数据可以有更高精度。Blender 置换指南指出,相比常见的 8 位图像,16 位或 32 位浮点凹凸图可以改善结果,尤其适合原本会出现阶梯的渐变。

Normal map 储存什么

法线贴图编码的是方向向量。常见切线空间贴图中,红、绿对应局部切线方向,蓝对应朝外方向。在 8 位无符号 RGB 图像里,约 (128, 128, 255) 就是常见的平坦法线颜色。

Blender 的 Normal Map 节点把图像转换成着色法线。文档要求切线空间贴图采用匹配的 UV 坐标,并把图像设置为 Non-Color。

需要分清两种来源。由高度图派生的法线,记录的是该高度场的坡度。由精细网格烘焙的法线,记录的是另一个表面相对于目标网格的方向,可能包含单张照片没有的信息。但无论哪种来源,都不会把原表面的真实外轮廓送给低模。

物体空间法线使用另一套参照坐标,看上去也常有更多颜色。不要只看到文件名带“normal”就选 Tangent,应先查清资产的制作方式。

在 Blender 中分别接对两种贴图

设置凹凸时先固定基础颜色与粗糙度。使用已展开 UV 的平面或简单圆角物体,配一个面光源,让凹凸路径的变化容易观察。

原创 Blender 接线图:高度图经过 Bump,法线图经过 Normal Map,也可另接一份独立细节高度

图中是连接关系,并非界面截图。高度进入 Bump 的 Height,RGB 法线进入 Normal Map 的 Color,两条路径最终都向着色器提供 Normal 输出。

路径 A:灰度高度接入 Bump

  1. 添加 Image Texture,打开高度图,将 Color Space 设为 Non-Color。
  2. 连接 Image Texture 的 Color → Bump 的 Height。
  3. 连接 Bump 的 Normal → Principled BSDF 的 Normal。
  4. 从适合物体尺度的较小 Distance 开始,提高到能够看清凹凸;如果棱线像鼓起来一样,再降低。Strength 用于混合效果,Distance 则是高度乘数。
  5. 如果已知凸起看上去凹下去了,对照明确的参考特征,必要时启用 Bump 的 Invert。

路径 B:RGB 图像接入 Normal Map

  1. 使用另一张 Image Texture,打开法线图,将 Color Space 设为 Non-Color。
  2. 连接 Image Texture 的 Color → Normal Map 的 Color。
  3. 对按切线空间制作的贴图选择 Tangent,使用制作时对应的 UV。
  4. 连接 Normal Map 的 Normal → Principled BSDF 的 Normal。
  5. 评估现有资产时先从 Strength 1 开始。效果有误时,先查色彩空间、朝向、UV 和切线兼容性,再考虑增强强度。

Blender 色彩管理指南解释了数值数据图像为何应绕过颜色转换。普通基础颜色图一般仍采用 sRGB 路径。

怎样叠加独立细节而不重复增厚

如果要在已有法线之上加一层新的细颗粒,连接 Normal Map 的 Normal → Bump 的 Normal,把独立颗粒高度接入 Bump 的 Height,再连接 Bump 的 Normal → Principled BSDF 的 Normal。

要能分清每条路径的贡献。如果法线本来就是从同一张高度图生成的,再加一次高度通常会重复增强同一份浮雕。可以逐条断开检查。不要直接平均两张 RGB 法线图的颜色来混合方向场,应采用专门的法线混合方法;适合时,也可以先合成高度来源,再转换成法线。

在 Unity 中匹配法线约定

Unity 的法线贴图介绍明确采用 Y+ 法线,也常称为 OpenGL 格式。纹理导出中的“DirectX”通常指相反的绿色通道约定。这里说的是数据约定,并不表示贴图只能通过某一种图形 API 使用。

对于已经编码好的 RGB 法线图,在导入器中把 Texture Type 设为 Normal map 并应用设置。不要给这类图像启用灰度转换,然后把导入的资产分配给材质的 Normal Map。

对于真正的灰度高度图,Unity 的 Normal Map 导入设置提供 Create From Grayscale,并带有 Bumpiness 和过滤选项。它会把高度转换为法线信息,单纯改一个文件名做不到。

约定不匹配时,导入器提供 Flip Green Channel。先选一个明确的凸起标记,分别用上方、下方光源验证,再决定是否翻转。翻转绿色只改变一个方向分量,无法修好错误 UV、物体空间图,或所有看起来“凹凸颠倒”的情况。这些设置作用于 Unity 导入器;从任何生成器导出时,也要再次确认其方向约定。

转换、图像质量与性能的边界

Height 转 Normal 的过程,是计算局部梯度并编码方向。转换强度和像素间距都会影响结果。缩放高度图尺寸或改变 UV 尺度后,同一个转换设置可能读出不同的观感,所以应在最终纹理分辨率与表面尺度下比较。

Normal 转 Height 属于重建问题。法线图没有绝对高度,经过编辑或烘焙的方向场,也未必对应全局一致的某一个高度场。重建可能漂移或损失细节。有原始高度图或雕刻时,应保留它们。

尽量保留无损源文件。强压缩可能在高度图中引入棱线,也可能扰乱法线方向;数据导入方式和合适的法线压缩,与文件扩展名同样重要。

不要按“Bump 一定更快”来选。运行成本取决于着色器实现、采样、导数计算、纹理格式、压缩、分辨率和硬件。源图只有一个通道,也不能保证最终显存比引擎压缩后的法线图更低。本文没有对这些流程做计时或内存基准测试。如果差异会影响交付,应在实际目标设备上测量。

按现象排查结果

现象先检查可以尝试的调整
灰度图造成奇怪的彩色光照解码路径错误接入 Bump 的 Height,或先转换成 RGB 法线
表面鼓胀、刻痕过深强度太高,或同一高度被重复叠加单独保留一条凹凸路径,降低高度尺度
只有上下方向的光照像反了Y 方向约定用明确特征验证,再试一次绿色通道翻转
烘焙资产出现接缝UV、边缘扩展、切线基或网格被改动保留烘焙目标的三角化与兼容切线,必要时重新烘焙
中间有细节,外轮廓仍然平直采用的是着色技术给边缘建模,或使用正确设置的置换
印刷文字变成凸起棱线颜色被当成了高度从源高度图中去掉由颜料颜色产生的假浮雕

真正的置换会改变表面位置,需要合适的几何与渲染器设置。Blender 置换文档区分了真实置换与凹凸着色。把法线强度提高,无法补回缺失的视差、真实孔洞或置换后的轮廓。

适合时,从照片派生的一对贴图开始

SeamlessCanvas 照片转 PBR 工具支持登录后免费生成贴图。当前 Height 根据图像亮度和局部变化估计浮雕,Normal 则从这份估计高度派生方向。它不会分析看不见的高模网格。

可以用一张干净图像探索石材、木材或织物材质。开始时,选择生成的 Height 接入 Bump,或者选择生成的 Normal 接入 Normal Map,先走一条凹凸路径。在移动光照下检查,去掉投影、颜色标记产生的假凹凸,再根据目标软件支持的流程决定使用哪种。

人物雕刻、硬表面烘焙,以及依赖特定低模拓扑的资产,应采用专门的烘焙流程。如果你要调整的是反射质感而非浮雕,请看独立的粗糙度贴图指南。

常见问题

Normal map 一定更准确吗?

不一定,信息来源更关键。精细雕刻的烘焙能记录简单高度图缺少的方向;把同一张高度图转成 RGB,并不会发现额外形状。导入错误也会让任一路径的结果变差。

Bump map 可以直接放进法线插口吗?

如果插口要求编码后的 RGB 方向,应先转换。Blender 用 Bump 节点评估灰度高度,Unity 则能在导入器里通过 Create From Grayscale 转换。

生成套装里的两张图都应该用吗?

当两张图提供不同信息,并且有明确的合成方式时,可以同时用。如果 Normal 正是从配套 Height 派生的,先用一条凹凸路径,需要时再加入独立细节。

两种贴图都会改变轮廓吗?

都不会。两种方法改变着色法线,同时保留网格。边缘深度与形状需要真实变化时,使用几何或真正的置换。

官方参考资料