法线贴图怎么用 法线贴图原理( 二 )


法线是一个方向 , 我们需要三个不同的变量来读取三维空间中的方向 , 也就是XYZ 。比如我们在XYZ三个轴上都移动一个单位 。如果我们绘制出新的向量 , 我们就有了一个三维的向量坐标 。当然我们可以有很多不同的值 。不同的值对应了向量中不同的点 。
法线贴图的RGB通道可以包含X、Y、Z通道的向量数据 。红通道控制光线的左右方向X轴 , 绿通道控制光线的上下方向Y轴 。蓝通道模拟模型的深浅Z轴 。我们把向量数据值存储在像素的RGB颜色通道上 。所以法线贴图表达的是一种方向信息 , 只存放方向数据 。光线可以通过它表面的方向进行计算 。
向量
向量(也称矢量)是指具有大小(magnitude)和方向的量 。在游戏中3D向量既可以表示一个方向 , 也可以表示一个点 。

法线贴图怎么用 法线贴图原理

文章插图
法线贴图怎么用 法线贴图原理

文章插图
5三个空间坐标系
坐标系有很多种 , 一般在使用法线贴图的时候会有几个选项 , 最常用的就是切线空间法线和模型空间法线 , 当然还有一个比较少用到的世界空间法线 。这三个又可以被理解为世界空间坐标系 , 模型空间坐标系和切线空间坐标系 。
模型空间法线
模型空间保存的是模型空间坐标系中的高模方向 。模型空间是模型的局部3D空间 。向上总是向上 , 向左总是向左 。模型可以被旋转和位移 , 但模型不能有变形 。
世界空间法线
世界空间保存的是世界坐标系中的高模法线方向 。因此低模取出该点法线就可以直接使用 , 前提是低模的世界坐标系与高模一致 , 不能有旋转这样会导致法线方向改变 。
切线空间法线
在一个不同的坐标空间中进行光照 , 法线贴图向量总是指向这个坐标空间的正Z轴方向 , 所有的光照向量都相对于这个正Z轴方向进行变换 , 而不管最终变换的方向如何 。这样我们就能始终使用同样的法线贴图 。
6烘焙法线概念
【法线贴图怎么用 法线贴图原理】基本上来说法线烘焙的好与坏最主要需要考虑三个大的方面 。
软硬边(平滑组)
从上面的内容可以知道 , 软件基本上是使用的点法线 。比如相邻的两个点共用了一个法线 , 通过算法就会变成软边的效果 。如果法线没有互相共用 , 单独的点都有单独的法线 。这样就会有多根法线 , 就会变成硬边的效果 。
法线贴图怎么用 法线贴图原理

文章插图
法线贴图怎么用 法线贴图原理

文章插图
左侧的图像是具有硬边的模型 。这将导致一些严重的问题 , 可以在黄色和蓝色星星上看到 。蓝色区域计算两次常规细节 , 黄色区域根本不计算 。右侧的图像是一个具有平滑法线的模型 。这将允许在烘焙法线贴图时更接近细节 。所以调整低模的软硬边会改变烘焙的结果 。
法线贴图怎么用 法线贴图原理

文章插图
法线贴图怎么用 法线贴图原理

文章插图
UV
尽可能把UV的排列方式做到横平竖直 , 尤其是在烘焙分辨率比较低的法线贴图时 , 可能会有锯齿 。一般来说可以倒角解决 。但如果能从源头规避掉潜在的问题肯定更好 。
同时硬边需要断开分离 , 我们知道法线贴图表达方向是一种方向信息 。两个不同方向的信息相交重叠到了一个点上 , 就会出现法线贴图有一到缝 。如果我们把硬边模型的低模边缘分离的话 , 通过隔开一定距离(edge padding)就可以解决这个问题 。简单来说就是给两个uv shell更多的像素 。
法线贴图怎么用 法线贴图原理

文章插图
法线贴图怎么用 法线贴图原理

文章插图
Cage
Cage的功能就是把作用于cage上使用的平均法线把高模的信息去映射到低模上使用的正常法线 。可以看到如果使用软边烘焙法线方向是会根据模型的大小发生变化 , 也就意味着烘焙是基于法线方向的 , 结果也会发生变化 。而用作cage的平均法线方向没有发生变化 。因为平均法线是根据两个面之间的角度去计算 。

推荐阅读