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 开销,适合静态大型场景

相关推荐
CG_MAGIC3 小时前
零基础学 UV:简单解决贴图拉伸
3d·贴图·uv·效果图·建模教程·渲云渲染
℡枫叶℡1 天前
Unity - 全局配置Unity工程的资源检索的目录
unity·资源检索配置
mxwin1 天前
Unity URP 下 TBN 矩阵学习 切线空间、tangent.w 与镜像 UV 的那些坑
学习·unity·矩阵·shader
程序猿多布1 天前
Unity导表工具解决方案-Luban使用教程
unity·luban
mxwin1 天前
Unity URP Shader 混合模式完全指南
unity·游戏引擎
mxwin1 天前
Unity URP 下 HDR 与 Tonemapping 的 Shader 意识
unity·游戏引擎
沉默金鱼1 天前
U3D高级编程:主程手记——第二章2.1读书笔记
unity·游戏引擎
mxwin2 天前
Unity Shader 深度写入与关闭ZWrite Off · 半透明排序 · 粒子穿插
unity·游戏引擎·shader
张老师带你学2 天前
宇宙飞船完整Unity项目
科技·游戏·unity·游戏引擎·模型