1. 法线贴图的核心原理与视觉欺骗
法线贴图(Normal Map)本质上是一种通过RGB颜色值存储表面法线方向的特殊纹理。在URP渲染管线中,它的工作原理可以分解为三个关键层面:
1.1 法线向量的编码逻辑
每个像素的RGB分量分别对应法线向量的X、Y、Z坐标:
- R通道:存储法线在切线空间中的X分量(-1到1映射到0到1)
- G通道:存储法线在切线空间中的Y分量
- B通道:通常固定为1(代表Z轴正方向)
这种编码方式使得浅蓝色(RGB≈0.5,0.5,1)表示未经扰动的原始法线。在Unity中,我们常用以下Shader代码解码:
hlsl复制float3 normalTS = UnpackNormal(mapValue);
normalTS = normalize(normalTS * 2 - 1);
1.2 切线空间的计算体系
法线贴图的有效性依赖于正确的切线空间计算:
- 顶点法线(N):模型自带的几何法线
- 切线(T):UV坐标的U方向延伸向量
- 副切线(B):通过N×T叉积得到
在URP的Lit Shader中,这个计算过程通过TangentToWorld矩阵完成:
hlsl复制float3x3 tangentToWorld = CreateTangentToWorld(normalWS, tangentWS.xyz, tangentWS.w);
normalWS = TransformTangentToWorld(normalTS, tangentToWorld);
1.3 视觉欺骗的物理限制
虽然法线贴图能模拟凹凸细节,但存在两个本质局限:
- 轮廓不变性:模型的实际几何轮廓不会改变
- 自阴影缺失:凹槽处不会产生真实阴影
实战经验:在制作高精度模型时,建议将法线贴图与视差贴图(Parallax Map)结合使用,可以突破轮廓不变性的限制。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. URP中的法线贴图实现方案
2.1 标准材质配置流程
在URP中启用法线贴图需要以下步骤:
- 创建Lit材质球
- 在Base Map下方勾选"Normal Map"选项
- 拖入法线贴图纹理(建议使用BC5/DXT5nm压缩格式)
