为什么引擎特定优化很重要
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优化法线贴图需要了解每个引擎的纹理管线、压缩系统和坐标约定。关键原则:
- 使用适合引擎的压缩:Unity桌面端用BC5,移动端用ASTC,Unreal用TC_Normalmap
- 匹配坐标系统:检查绿色通道翻转要求
- 明智地分配预算:根据视觉重要性和观看距离分配分辨率
- 在目标硬件上测试:性能分析揭示真实世界性能
通过遵循这些指南,您的法线贴图将在所有目标平台上提供最大的视觉冲击,同时尊重内存和性能约束。
