Unity URP 法线贴图:世界空间 vs 切线空间 深度解析两种法线贴图格式在实时渲染中的核心差异、适用场景与性能权衡

1法线贴图基础

法线贴图(Normal Map)通过存储表面法线方向来模拟几何细节,使低模模型看起来像高模一样凹凸不平。在 Unity URP 中,正确理解世界空间与切线空间法线的差异,是做出高质量渲染的基础。

2切线空间法线贴图(Tangent Space)

蓝偏图 / 蓝紫色法线

切线空间法线贴图是游戏行业最常用的格式,其 RGB 值中 R 和 G 通道编码切线(Tangent)和副切线(Bitangent)方向的偏移,B 通道固定为 (0, 0, 1),因此整体呈现蓝紫色。

核心特性

  • UV 可复用 --- 同一张贴图可应用于不同 UV 展开的模型
  • 支持形变 --- 可用于骨骼动画角色,蒙皮网格正确变形
  • G 通道复用 --- 纹理压缩时质量损失相对较小

Shader 计算流程

cs 复制代码
// 1. 采样切线空间法线贴图

half3 normalTS = UnpackNormal(SAMPLE_TEXTURE2D(_NormalMap,

                             _NormalMap_ST, uv));


// 2. 从顶点数据获取 TBN 矩阵

float3 tangent  = TransformObjectToWorld(input.tangent.xyz);

float3 bitangent = cross(normalWorld, tangent) * input.tangent.w;

float3x3 TBN = float3x3(tangent, bitangent, normalWorld);


// 3. 将切线空间法线转换到世界空间

half3 normalWS = normalize(mul(normalTS, TBN));


// 4. 使用世界空间法线进行光照计算

half NdotL = max(0, dot(normalWS, lightDir));

3世界空间法线贴图(World Space)

彩色法线贴图 / RGB 彩色

世界空间法线贴图直接存储法线在世界坐标系中的方向,RGB 三个通道分别对应 X、Y、Z 轴方向。视觉上呈现为多彩的彩色图案,无法通过颜色猜测凹凸方向。

**关键区别:**世界空间法线是"绝对"的,而切线空间法线是"相对"的。切线空间法线始终相对于模型表面定义,世界空间法线则是场景空间的绝对方向。

核心特性

  • 精度更高 --- 避免 TBN 矩阵重建误差,尤其在大角度曲面
  • 无 TBN 开销 --- 省去切线/副切线插值和矩阵乘法
  • 不可形变 --- 只能用于静态物体,UV 必须与模型一一对应

Shader 计算流程

cs 复制代码
// 1. 采样世界空间法线贴图(无需解码)

float3 normalWS = SAMPLE_TEXTURE2D(_WorldNormalMap,

                            _WorldNormalMap_ST, uv).rgb;


// 2. 法线范围从 [0,1] 映射到 [-1,1]

normalWS = normalWS * 2.0 - 1.0;


// 3. 直接用于光照计算,无需 TBN 转换

half NdotL = max(0, dot(normalWS, lightDir));

提示: 如果法线贴图在导入时已设置为 "Normals: Tangent Space"(默认),采样后需要用 UnpackNormal 解码;设为 "Normals: None" 时可直接使用。

4深度对比

对比维度 切线空间法线 世界空间法线
视觉效果 蓝紫色,偏移量存储 多彩色,绝对方向存储
UV 复用 ✅ 支持 ❌ 不支持
动画/形变 ✅ 完美支持 ❌ 完全不支持
Shader 开销 需 TBN 矩阵计算 无 TBN,零额外开销
精度 中(重建有误差) 高(无重建误差)
纹理压缩 G 通道较稳定 各通道同等重要
典型用途 角色、Prop、可形变物体 地形、静态建筑、自然风貌

5选型决策流程

根据以下决策树快速选择合适的法线贴图格式:

6URP 实战建议

🔵 选切线空间

  • 角色皮肤、服装、装备
  • 有骨骼动画的 Prop(旗帜、布料)
  • 需要在不同模型间共享的材质
  • 贴图集(Atlas)中打包法线

🟢 选世界空间

  • 地形系统的岩石、草地
  • 大型静态建筑外表面
  • 无 UV 展开的自然风貌(岩壁、树皮)
  • 需要极致精度和零 TBN 开销的场景

**注意:**世界空间法线贴图对 UV 展开要求极高------必须与模型顶点在世界空间的位置一一对应。烘焙时请确保模型在世界原点、无旋转变换。

📌 总结

两种法线贴图格式没有绝对的优劣,只有场景的适合与否。理解它们的本质差异,是做出正确技术决策的前提。

切线空间 = 通用 + 灵活

支持复用、形变,是角色的首选方案

世界空间 = 精度 + 性能

零 TBN 开销,适合静态大型场景

相关推荐
BugShare20 小时前
轻量级原生 macOS 智能剪贴板管理器
macos·贴图
游乐码1 天前
Unity(十六)切换场景及鼠标相关
unity·游戏引擎
FakeEnd1 天前
Unity开发笔记6
笔记·unity·游戏引擎
游乐码1 天前
Unity(十七)Unity随机数及Unity委托
unity·游戏引擎
ellis19701 天前
Unity性能优化之检测工具Profiler
unity·性能优化
RPGMZ1 天前
RPGMZ游戏引擎 一个窗口 文本居中显示
开发语言·javascript·游戏引擎·rpgmz
tohand1 天前
Unity 完美假阴影实现文档
unity·游戏引擎
@蓝莓果粒茶1 天前
【Unity笔记】保姆级AssetBundle详解(含代码+避坑指南)
笔记·游戏·unity
Zephyr_01 天前
Unity2D游戏制作
游戏·unity
nnsix2 天前
Unity 动画 Avatar 笔记
笔记·unity·游戏引擎