Skip to content

简介

法线贴图(_Normal),可将物体表面的凹凸、凹槽和划痕等细节模拟出来,从而捕捉光线,让物体更真实,并能以更少三角面数以及更低性能实现复杂的外观效果。

法线贴图作用

为打造更真实的游戏场景,您可能时常需要根据模型的不同材质打造不同的凹凸感,比如常见的砖墙上明显的沟壑,大理石柱的坑洼,再如人物的皮肤和衣物等,在现实生活中都是凹凸不平的。如果您在建模时使用 网格(Mesh)的形状达到这样的效果,不可否认这会非常完美且真实,但是需要非常多的三角面数实现这一效果,这会导致在游戏项目运行时损耗大量性能。

【Built_In_Shaders_Normal001.png】

为打造墙体的凹凸感,使用网格打造墙壁沟壑的细节,导致一面墙的三角面数非常高。

为了避免这种情况,您可以使用 法线贴图(Normal Mapping)来显示精细的表面细节,这样即使您使用较低三角面数的 网格(Mesh)模型也可以呈现出表面的凹凸细节。

【Built_In_Shaders_Normal002.png】

使用法线贴图打造墙壁沟壑的细节,整面墙仅为一个平面。

因此,现在的游戏开发流程中,建模师通常会使用他们的 3D 建模应用程序(如 3dMax,blender 等)基于非常高精度的模型生成法线贴图。然后将法线贴图映射到游戏项目的低面数模型上,以便使用法线贴图渲染原始模型上高精度的细节。

法线贴图基础

法线贴图(Normal Mapping)通过对 网格(Mesh)表面上的法线数据进行修改,并使用 纹理(Texture)更直观地来存储有关模型上的表面法线的修改信息。法线贴图是映射到模型表面的纹理,类似于常规纹理,但法线贴图纹理中的每个像素表示平面法线方向与平面(或平滑插值)多边形表面法线之间的偏差,从而可以调节光从表面反射的方式,并由于法线贴图纹理而显得有深度,打造凹凸的质感。

SandMod 能读取基于 OpenGL 模式的法线贴图,即:

  • 红色(R,Red)表示当前像素的法线相对当前面片 X 轴方向的偏移。

  • 绿色(G,Green)表示当前像素的法线相对当前面片 Y 轴方向的偏移。

  • 蓝色(B,Blue)表示当前像素的法线相对当前面片 Z 轴方向的偏移。

  • 为避免 RGB 值仅能表示大于等于 0 的值,原点设置为 RGB 值 (0.5, 0.5, 1) 或十六进制值为 #8080FF,小于 0.5 的值表示轴的负方向。

【Built_In_Shaders_Normal003.png】

创建或获取方法

  • 您可以在 3D 建模应用程序(如 3dMax,blender 等)基于非常高精度的模型生成法线贴图。

  • 您可以使用普通纹理贴图导入图形处理工具(如 Photoshop),部分图形处理工具能根据图片的 对比度(Contrast)、光照信息自动生成法线贴图。

材质属性

值得注意的是,关键字(Keywords)为 USE_NORMAL_TEX 的着色器变体编辑为启用(勾选)状态,与 法线贴图(_Normal)直接相关的 材质属性(Property)才会有显示效果。

【Built_In_Shaders_Normal004.png】

内置着色器(Built In Shaders)中包含以下与 法线贴图(_Normal)直接相关的 材质属性(Property):

【Built_In_Shaders_Normal005.png】

名称参数名参数类型描述
图片纹理(Texture)_NormalTexTexture2D属性值决定了着色器所引用的法线贴图纹理,其属性值为 2D 贴图资产( 2D Texture Asset)。所读取的 2D 贴图资产需要在 材质(Material)中配置。 若此值为空,默认为不使用法线贴图。
平铺率(Tiling)_NormalTex_STVector_NormalTex_ST 参数是 四维向量(Vector 4)类型,其中前两个维度的参数(X,Y)分别控制 X(U 方向) 和 Y(V 方向)的平铺率。
偏移(Offset)_NormalTex_ST 参数是 四维向量(Vector 4)类型,其中后两个维度的参数(Z,W)分别控制 X(U 方向) 和 Y(V 方向)的偏移率。
法线强度(Normal Strength)_NormalStrengthRange法线贴图的影响程度,如果设置为负数材质的凹凸效果将会翻转。