4、法线与凹凸:法线贴图原理、法线强度控制、凹凸偏移(BumpOffset)节点
好,咱们今天聊点实在的。法线贴图这个东西,说白了就是「用颜色骗眼睛」的技术。你想想看,一个平面怎么可能有凹凸感?全靠法线贴图在像素级别上「篡改」光照方向。
我记得刚入行那会儿,有个项目需要做一面粗糙的石墙。我直接上了个4K高度贴图,结果帧率直接崩了。后来前辈告诉我:「你试试法线贴图,一张512的就能搞定。」嗯,从那以后我就再也没小看过这个技术。
4.1 法线贴图原理:为什么蓝色是主色调?
法线贴图存储的不是颜色,而是法线方向。每个像素的RGB通道,分别对应法线的X、Y、Z轴方向。
- R通道:法线在切线空间的X轴(左右方向)
- G通道:法线在切线空间的Y轴(上下方向)
- B通道:法线在切线空间的Z轴(垂直方向)
为什么法线贴图看起来是蓝紫色的?因为大部分法线都指向Z轴正方向(即垂直表面向外),而Z轴存储在B通道。B通道值接近255,所以整体偏蓝。你想想看,如果一张法线贴图看起来偏红或偏绿,那说明表面法线大量朝向侧面——这通常意味着你的贴图有问题。
核心公式:法线贴图中的颜色值范围是[0, 1],而法线方向范围是[-1, 1]。所以解码公式是:
Normal = (Color * 2) - 1
在Unreal中,这个解码过程是自动完成的,你不需要手动处理。
4.2 法线强度控制:别让石头变成刺猬
我在项目中遇到过一个问题:美术同学做了一张非常精细的法线贴图,结果在引擎里看起来像刺猬一样,凹凸感过于强烈。这就是法线强度失控了。
控制法线强度,本质上就是控制法线在XY平面上的偏移量。Unreal提供了两种常用方法:
方法一:使用FlattenNormal节点
这个节点可以让你直接控制法线强度。输入一个0到1之间的值,0表示完全平坦,1表示原始强度。
// 节点连接方式
TextureSample(法线贴图) -> FlattenNormal(强度参数) -> 材质法线输入
方法二:手动数学运算
如果你需要更精细的控制,可以手动做:
// 手动控制法线强度
1. 从法线贴图采样出法线向量
2. 将法线向量乘以强度系数(例如0.5)
3. 重新归一化(Normalize)
我的个人习惯:我一般会在材质实例中暴露一个「法线强度」参数,范围0.2到2.0。这样美术同学可以在不同光照环境下微调,而不用重新导出贴图。
4.3 凹凸偏移(BumpOffset):让纹理跟着视角走
凹凸偏移,也叫视差贴图(Parallax Mapping)。它解决了一个问题:法线贴图只能改变光照方向,但纹理本身还是平的。你从侧面看,砖缝不会产生遮挡效果。
凹凸偏移的原理很简单:根据视角方向和高度贴图,对UV坐标进行偏移。视线越倾斜,偏移量越大。
节点参数详解
| 参数 | 作用 | 推荐范围 |
|---|---|---|
| Height Ratio | 控制偏移强度 | 0.02 - 0.1 |
| Reference Plane | 参考平面高度 | 0.5(默认) |
我曾经踩过的坑:凹凸偏移的Height Ratio值设得太大,结果在边缘视角出现了严重的纹理撕裂。后来我总结了一个经验:对于墙面这类大平面,Height Ratio控制在0.05以内;对于地面,可以稍微高一点到0.08。超过0.1基本就会出问题。
实际应用案例
假设你要做一面砖墙:
- 准备一张高度贴图(灰度图,白色表示凸起,黑色表示凹陷)
- 将高度贴图连接到BumpOffset节点的Height输入
- BumpOffset节点输出偏移后的UV坐标
- 用这个偏移后的UV去采样法线贴图和颜色贴图
// 材质蓝图连接示例
TextureSample(高度贴图) -> BumpOffset(UV偏移) -> TextureSample(颜色贴图)
-> TextureSample(法线贴图)
4.4 三种技术的协同工作
在实际项目中,我通常会把这三者结合起来使用:
- 法线贴图:提供基础凹凸感,控制光照细节
- 法线强度:作为材质实例参数,方便后期调整
- 凹凸偏移:增强近景和边缘视角的立体感
你想想看,如果只用法线贴图,从侧面看墙面就是平的。加上凹凸偏移后,砖缝之间会产生真实的遮挡,视觉效果直接提升一个档次。
性能提醒:凹凸偏移会增加像素着色器的计算量。对于移动平台,我建议只在主要物体上使用,或者降低Height Ratio值。PC平台可以放心用,但别在远处物体上浪费性能。
4.5 常见问题排查
最后分享几个我遇到过的问题:
- 法线贴图显示为纯色:检查贴图导入设置,确保压缩格式为「Normalmap」
- 凹凸偏移导致纹理闪烁:降低Height Ratio值,或者增加Mipmap的细节
- 法线强度调整后出现锯齿:在FlattenNormal节点后加一个Normalize节点
嗯,今天就先聊到这儿。下一章咱们会深入探讨「世界位置偏移(WPO)」和「像素深度偏移(PDO)」,这两个技术能让你的材质真正「动起来」。