一、什么是法线贴图

  1. 法线贴图说明:

法线贴图就是在原物体的凹凸表面的每个点上均作法线,通过RGB颜色通道来标记法线的方向,你可以把它理解成与原凹凸表面平行的另一个不同的表面,但实际上它又只是一个光滑的平面。对于视觉效果而言,它的效率比原有的凹凸表面更高,若在特定位置上应用光源,可以让细节程度较低的表面生成高细节程度的精确光照方向和反射效果。

  1. 法线贴图的简介:

法线贴图是可以应用到3D表面的特殊纹理,不同于以往的纹理只可以用于2D表面。作为凹凸纹理的扩展,它使每个平面的各像素拥有了高度值,包含了许多细节的表面信息,能够在平平无奇的物体外形上,创建出许多种特殊的立体视觉效果。

3.法线贴图的应用

最近法线贴图多用在CG动画的渲染以及游戏画面的制作上,将具有高细节的模型通过映射烘焙出法线贴图,然后贴在低端模型的法线贴图通道上,使其表面拥有光影分布的渲染效果,能大大降低表现物体渲染时需要的面数和计算内容,从而达到优化动画和游戏的渲染效果。

法线贴图是最近比较被关注的技术,也将成为以后CG领域的一大主流技术,也就是游戏界被称为的次世代技术。

法线贴图是一种显示三维模型更多细节的重要方法,它计算了模型表面因为灯光而产生的细节。这是一种2维的效果,所以它不会改变模型的形状,但是它计算了轮廓线以内的极大的额外细节。在处理能力受限的情况下,这对实时游戏引擎是非常有用的,另外当你渲染动画受到时间限制时,它也是极其有效的解决办法。

二、法线贴图为什么呈蓝紫色

    • 法线贴图蓝紫色原因(详):

法线贴图有三种算法:世界坐标算法 、矢量切线算法 、自身轴向算法 其中以矢量切线算法运用最普及 每个软件的矢量切线算法因坐标系的确定有所不同就目前看来 DirectX默认是左手坐标系,OpenGL默认是右手坐标系。 UE、Unity采用的是左手坐标系 3DMax、Cocos采用的是右手坐标系

右手坐标系(Z轴向上) 左手坐标系(Y轴向上 Z轴纵深)

下面以3DS MAX的坐标系为基础说明 法线贴图切线算法的依据

1 .假设模型上某一个点为一个极小平面,以这个面为0点向正方向画一条垂直线,这根为法线,法线标示为N或Z

2 .以这根法线为基础,由左至右的方向确认一根横向穿过法线他们的交点为0点,交点左边为负值右边为正值,同法线所在面平行,同法线垂直的线为纵向矢量线 纵向矢量线标示为U或X

3 .以这根法线为基础,由下至上的方向确认一根纵向穿过法线他们的交点为0点,交点左边为负值右边为正值,同法线所在面平行,同法线垂直的线为纵向矢量线 纵向矢量线标示为V或Y

4 .如上建立了一个紧贴平面的法线坐标 ,他们换算到法线贴图、位图的关系是这样的。

上面说的极小平面在位图上换算为一个像素点 :公式:pixel=(normal+1)/2。在切线空间中,X 、Y 、Z三个坐标的向量取值范围为(-1,1),而位图上R G B三个值的取值范围(0,1),需要进行转换,因为模型的法线方向大部分是相同的,即Z轴方向为(0,0,1),映射到颜色空间是(0.5,0.5,1),所以你会看到法线贴图为什么是蓝紫色 。

5.三个交点重合位置为原点 0, 0,0 在位图上显示为RGB值128,128,255 表示这个面没有下凹的空间变化注意这个位置是没有下凹,没有凸起的概念, 这个128,128,255就是描述当前面为一个相对最高位置或者不存在。

以原点为基础举例 越偏向右的模型面R值越小 ,越向下偏移的面G值越小, 越深的地方B值越小

6. 如此进行模型面映射到UVW每个像素的运算,最终得到法线贴图 ,在模型UV完全展开、 不互相重叠的情况下, 它真实反映了模型上每个面倾斜 、下凹状况。

2.法线贴图蓝紫色原因(略)

1.法线贴图使用了切线坐标系,切线坐标系规定物体的平面是由切线坐标和副切线坐标构成的,垂直于这个平面的就叫做法线。

  1. 法线的坐标刚好与平面垂直,它的坐标是(0,0,1),如果把它转换成一张图片里的颜色那么(0,0,1)就相当于RGB里的B,也就是Blue,因此使用蓝色来表示一个物体的表面法线方向。

归纳:法线纹理的RGB通道存储在每个顶点各自的切线空间中的法线方向的映射值。

如果一个顶点的法线方向不变,那么在切线空间中,Z轴就是法线方向,也就是(0,0,1),X轴是切线方向,Y轴是副切线方向。在切线空间下的法线,一个向量的每个维度的取值范围在(-1,1)之间,而存储法线纹理的每个通道(RGB),的取值范围是(0,1),因此需要做一个转换,像素=(法线+1)/2因为模型法线的方向大部分是相同的即(0,0,1),即Z轴方向,值转换到法线纹理中的RGB值那就是对应(0.5,0.5,1),所以我们看到的法线贴图就呈现蓝紫色。

三、法线贴图的优点

  1. 用法线贴图可以将两个外观、体型完全一样的两个模型的细节状态进行互相传递,将高面模型的细节传递到低面模型上面,在低面模型上显示高面模型的凹凸细节。

四、法线贴图的种类

  1. 由于法线贴图存储的是表面的法线方向,而方向是相对于坐标空间而言的。因此存在三种不同的空间法线贴图:Tangent切线空间Object对象空间World世界空间三种法线贴图都有各自的优缺点且能达到相同的效果,只是计算方式有所不同。

Tangent Space(切线空间),顾名思义,切线空间法线是基于每个面的切线方向。切线空间下的法线贴图是最常见的法线贴图形式,大部分看起来都是浅蓝紫色的。其中,B通道表示法线方向的斜率;R通道表示左右切线方向的斜率;G通道表示切线方向向上或向下的斜率(OpenGl向上,DirectX向下)。

(切线空间法线)

  1. Object Space(模型空间)法线贴图基于整个对象而不是每个面,大部分看起来都是五颜六色的。模型空间法线贴图在渲染上较快,但由于其无法镜像任何UV,在对称模型上会浪费大量纹理空间,且无法进行UV动画。因此在很多情况下切线空间较优于模型空间。

(模型空间法线)

World Space(世界空间)是基于全局坐标的法线贴图,也是三种法线贴图中最不灵活的一种。 这种类型的法线贴图一般仅用于环境这类大型,静态和非对称的物体,或者临时用于诸如Substance Painter、Substance Designer之类软件中作为计算特殊效果(如风化效果)的一种方法。

(世界空间法线)

参考的各博主链接:游戏资源中常见的贴图类型 - 知乎 (zhihu.com)法线科普三:法线类型的总结 - 哔哩哔哩 (bilibili.com)

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐