3D图形中已有Normal Map,为何仍需使用Height Map?
Normal Map vs Height Map:常见疑问解答
为什么有了Normal Map还需要Height Map?
- 动态调整与扩展性:Height Map存的是高度标量值,你能在Shader里实时调整高度缩放(比如让地面凸起、磨损区域变平),或是结合动画实现表面变形。而Normal Map是固定的法线方向,没法直接实现这类高度相关的动态变化。
- 多用途性:Height Map不只是用来算法线,它还能驱动视差映射(Parallax Mapping)、位移映射(Displacement Mapping)——这些效果能让表面像素/顶点根据视角偏移,模拟真实的深度,而Normal Map只能提供法线光照的凹凸感,做不到真正的位置偏移。
- 存储效率:Height Map通常用单通道(8位/16位)存储,比需要三通道的Normal Map更省显存。如果场景只需要基于高度生成法线,用Height Map更划算。
能不能把Height Map的全部信息编码进Normal Map?
不行。核心原因:
- Normal Map存储的是表面法线的方向向量,它只记录了表面的倾斜角度,丢失了高度的绝对值信息。比如两个高度差很大的平面,只要它们的法线都是垂直向上,Normal Map的内容就完全一样,但Height Map能区分出二者的高度差异。
- 从逻辑上来说,高度是标量,法线是三维向量,二者的信息维度和类型不同——你可以从Height Map算出Normal Map,但反过来,没法从Normal Map还原出原始的Height Map高度值。
二者搭配使用的优势是什么?
- 画质与性能平衡:Normal Map提供基础的凹凸光照细节,适配所有设备;Height Map用来实现视差/位移这类高级效果,给高端设备提升真实感。一套资产就能适配不同性能的硬件,不用单独制作两套资源。
- 制作流程更高效:美术通常先雕刻Height Map(比如用ZBrush、Substance Painter),再导出对应的Normal Map,同时保留Height Map用于后续的高级效果制作,避免重复劳动。
- 光照精度提升:有时候导出的Normal Map可能存在细节丢失或错误,用Height Map实时计算局部法线,可以补充Normal Map的不足,让表面光照更自然准确。
内容的提问来源于stack exchange,提问作者GrixM
相关产品推荐
相关产品推荐

