针对Unity和Unreal Engine优化法线贴图

为什么引擎特定优化很重要

Unity和Unreal Engine处理法线贴图的方式不同,这是由于不同的渲染管线、压缩格式和坐标系约定。针对每个引擎进行优化可确保:

  • 在相同内存预算下获得更好的视觉质量
  • 通过适当的压缩实现更快的加载时间
  • 通过匹配坐标系统获得正确的光照
  • 在目标平台上高效使用内存

Unity法线贴图设置

导入配置

在Unity中导入法线贴图纹理时:

检查器设置:
├─ 纹理类型:Normal map
├─ 从灰度创建:未选中(如果已经是法线贴图)
├─ 凹凸度:1.0(默认)
└─ 过滤:双线性或三线性

格式和压缩

桌面端(PC/Mac/Linux)

  • DXT5nm (BC5):最佳质量,行业标准
  • 在alpha中存储X,在绿色中存储Y
  • Z在着色器中计算(节省内存)
  • 4:1压缩比

移动端(iOS)

  • ASTC 6x6:最佳质量/大小平衡
  • PVRTC 4-bit:旧设备,较低质量

移动端(Android)

  • ETC2_RGB:广泛支持
  • ASTC 6x6:更好的质量(如果最小SDK ≥7.0)

Unreal Engine法线贴图设置

纹理导入

Unreal通过命名约定自动检测法线贴图:

  • _N_Normal_Norm结尾的文件
  • 自动设置为TC_Normalmap压缩

压缩设置

桌面端

  • TC_Normalmap:根据RHI使用BC5/BC7
  • 法线贴图的最佳质量
  • 自动配置

移动端

  • 仍使用TC_Normalmap
  • 内部转换为ASTC/ETC
  • 无需手动覆盖

坐标系统

Unreal使用:

  • +X = 右(红色通道)
  • +Y = 下(绿色通道)
  • +Z = 朝向相机

某些软件(Substance、带某些插件的Photoshop)使用**+Y向上**。

解决方案:如果法线看起来反转,启用"翻转绿色通道"。

性能优化

分辨率指南

资产类型分辨率用例
主角色4096玩家角色、过场动画
标准道具2048武器、家具、车辆
环境平铺2048墙壁、地板(将平铺)
背景物体1024远景、填充物
小细节512螺丝、铆钉、贴花

Mipmap优化

为以下启用mipmaps:

  • ✅ 平铺纹理(墙壁、地板)
  • ✅ 在不同距离观看的对象
  • ✅ 任何使用纹理流式传输的内容

为以下禁用:

  • ❌ UI元素
  • ❌ 在固定距离观看的贴花
  • ❌ 天空穹顶和天空盒

内存预算示例

主机/高端PC

角色(全身):
├─ 反照率:4K (DXT1) = 11 MB
├─ 法线:4K (BC5) = 11 MB
├─ 粗糙度:2K (BC4) = 3 MB
└─ 总计:~25 MB

环境平铺:
├─ 反照率:2K (DXT1) = 3 MB
├─ 法线:2K (BC5) = 3 MB
├─ 粗糙度:1K (BC4) = 0.75 MB  
└─ 总计:~7 MB

移动端

角色:
├─ 反照率:2K (ASTC 6x6) = 2 MB
├─ 法线:2K (ASTC 6x6) = 2 MB
├─ 打包RMA:1K (ASTC 6x6) = 0.5 MB
└─ 总计:~4.5 MB

道具:
├─ 反照率:1K (ASTC 6x6) = 0.5 MB
├─ 法线:1K (ASTC 6x6) = 0.5 MB
└─ 总计:~1 MB

常见陷阱

错误的颜色空间

问题:法线贴图整体偏绿/紫
原因:在法线贴图纹理上启用了sRGB
修复:确保禁用sRGB(两个引擎都会自动为法线贴图类型禁用)

法线反转

问题:凸起看起来像洞,反之亦然
原因:坐标系不匹配
修复

  • Unity:检查法线贴图生成工具的输出空间
  • Unreal:在纹理属性中切换"翻转绿色通道"

压缩伪影

问题:平滑表面上的条带或块状
原因:错误的压缩格式
修复

  • 使用BC5/TC_Normalmap压缩
  • 必要时增加纹理分辨率
  • 在压缩前检查源法线贴图质量

导出设置检查清单

从法线贴图生成器导出时:

对于Unity

  • ✅ 16位PNG或8位PNG(如果质量关键则16位)
  • ✅ 切线空间
  • ✅ OpenGL格式(+Y向上)- Unity内部转换
  • ✅ 2的幂次方尺寸用于mipmaps

对于Unreal

  • ✅ 8位PNG即可
  • ✅ 切线空间
  • ✅ DirectX格式(+Y向下)或使用"翻转绿色通道"
  • ✅ 2的幂次方尺寸

平台特定建议

移动端优化

  • 大多数资产优先使用1K
  • 最低使用ASTC 6x6
  • 将粗糙度/金属度/AO与法线合并到单个纹理中
  • 在低端设备上测试(不仅仅是旗舰机)

主机(PS5/Xbox Series X)

  • 可接受2K-4K法线贴图
  • BC7以获得最高质量(在支持的情况下)
  • 依赖硬件纹理压缩
  • 利用SSD流式传输实现快速加载

WebGL

  • 将总纹理内存保持在256MB以下
  • 在支持的情况下使用DXT压缩
  • 积极的mipmapping以减少带宽
  • 考虑为低端GPU提供可选的质量设置

结论

针对Unity和Unreal Engine优化法线贴图需要了解每个引擎的纹理管线、压缩系统和坐标约定。关键原则:

  1. 使用适合引擎的压缩:Unity桌面端用BC5,移动端用ASTC,Unreal用TC_Normalmap
  2. 匹配坐标系统:检查绿色通道翻转要求
  3. 明智地分配预算:根据视觉重要性和观看距离分配分辨率
  4. 在目标硬件上测试:性能分析揭示真实世界性能

通过遵循这些指南,您的法线贴图将在所有目标平台上提供最大的视觉冲击,同时尊重内存和性能约束。

针对Unity和Unreal Engine优化法线贴图 | 法线贴图生成器博客