法线贴图:原理、切线空间与应用详解
什么是法线贴图
法线贴图(Normal Map)是一种纹理贴图,用于在低多边形模型上模拟高细节表面的光照效果。它通过存储每个像素的法线方向信息,在着色过程中扰动表面法线,从而改变光照计算,使模型表面看起来有丰富的凹凸细节,如皱纹、划痕、砖缝等。法线贴图广泛应用于游戏、影视和实时渲染中,以低成本实现高视觉复杂度。
法线贴图的原理
在3D渲染中,光照计算依赖于表面法线(垂直于表面的向量)。传统上,增加模型细节需要增加多边形数量,但法线贴图提供了一种更高效的方法。
法线贴图将每个像素的法线方向编码为颜色值。通常,RGB通道分别对应法线向量的X、Y、Z分量。默认情况下,法线(0,0,1)(指向表面外)被编码为颜色(128,128,255)(浅蓝色)。当法线偏移时,颜色相应变化。在着色器中,采样法线贴图得到扰动后的法线,并用于光照计算,从而产生表面凹凸的视觉效果。
切线空间
法线贴图通常在切线空间(Tangent Space)中存储。切线空间是一个局部坐标系,由三个正交向量定义:切线(Tangent)、副切线(Bitangent)和法线(Normal)。其中,法线是表面原始法线,切线通常沿纹理坐标U方向,副切线沿V方向。
使用切线空间的好处是法线贴图可以应用于不同朝向的表面,甚至变形网格(如角色动画)。法线贴图中的法线方向是相对于表面局部坐标的,因此当模型旋转或变形时,法线贴图仍然有效。在着色器中,需要将光照向量和视线向量从世界空间转换到切线空间,或者将切线空间法线转换到世界空间,以进行光照计算。
法线贴图的生成与使用
法线贴图可以从高模烘焙到低模,也可以从灰度高度图转换,或使用工具直接绘制。
- **烘焙法线贴图**:使用3D软件(如Blender、Substance Painter、xNormal)将高分辨率模型的细节投影到低分辨率模型的UV空间,生成法线贴图。这是游戏开发中最常用的方法。
- **从高度图生成**:高度图是一张灰度图,白色表示凸起,黑色表示凹陷。通过计算相邻像素的高度差,可以得到法线扰动,生成法线贴图。
- **直接绘制**:在支持法线贴图绘制的软件中(如Substance Painter、Photoshop插件),艺术家可以手动绘制法线细节。
在游戏引擎(如Unity、Unreal)中,将法线贴图导入后,指定为材质的Normal Map属性即可。着色器会自动处理切线空间转换和光照计算。
常见问题与注意事项
- **法线贴图的颜色**:法线贴图通常呈现蓝紫色调,因为大部分法线接近(0,0,1),编码为(128,128,255)。如果法线贴图颜色异常(如全红或全绿),可能表示贴图错误或坐标系统不匹配。
- **切线空间与对象空间**:法线贴图分为切线空间和对象空间两种。切线空间更灵活,支持变形和重用;对象空间法线贴图存储世界空间法线,不支持变形,但细节更精确。现代引擎多使用切线空间。
- **UV布局**:法线贴图依赖于UV坐标,因此UV展开时需要避免重叠和过度拉伸,否则法线贴图会出现伪影。
- **压缩格式**:法线贴图在纹理压缩中需要特殊处理,如使用DXT5nm格式,仅保留X和Y分量,Z分量在着色器中重建,以减少存储和带宽。
- **性能影响**:法线贴图增加了纹理采样和计算量,但相比增加几何复杂度,性能开销较小。在移动平台上,需要权衡法线贴图的使用。
常见问题
法线贴图和凹凸贴图有什么区别?
凹凸贴图(Bump Map)通常指高度图,存储表面高度信息,在着色时通过计算梯度扰动法线。法线贴图直接存储法线方向,效果更精确,且计算效率更高。
为什么法线贴图是蓝色的?
因为默认法线(0,0,1)被编码为RGB(128,128,255),呈现浅蓝色。大部分表面法线接近默认方向,因此整体偏蓝。
切线空间法线贴图有什么优势?
切线空间法线贴图可以应用于不同朝向的表面,支持模型变形和动画,并且可以重用纹理。
如何从高模烘焙法线贴图?
在3D软件中,将高模和低模对齐,设置烘焙参数,软件会计算高模表面细节在低模UV空间中的法线扰动,生成法线贴图。
法线贴图在移动端如何优化?
可以使用压缩纹理格式(如ASTC、ETC2)存储法线贴图,并考虑降低分辨率。此外,仅在重要表面使用法线贴图,以平衡画质和性能。
常见问题
法线贴图和凹凸贴图有什么区别?
凹凸贴图存储高度信息,在着色时计算法线扰动;法线贴图直接存储法线方向,效果更精确且计算效率更高。
为什么法线贴图是蓝色的?
默认法线(0,0,1)编码为RGB(128,128,255),呈现浅蓝色。大多数表面法线接近默认方向,因此整体偏蓝。
切线空间法线贴图有什么优势?
切线空间法线贴图可应用于不同朝向表面,支持变形和动画,并允许纹理重用。
如何从高模烘焙法线贴图?
在3D软件中对齐高模和低模,设置烘焙参数,软件会计算高模细节在低模UV空间中的法线扰动并生成贴图。
法线贴图在移动端如何优化?
使用ASTC、ETC2等压缩格式,降低分辨率,并仅在重要表面使用法线贴图。