搬运之前在某乎写的投稿:
最近在查找资料时,发现很难找到美术向有关法线的介绍(找到很多程序相关的理论知识),就根据制作经验写了一些自己的理解。
有不同理解的同学,欢迎一起讨论哈~
(资料图)
一、法线的介绍
Normal | 法线
法线是始终垂直于某平面的虚线。在数学几何中法线指平面上垂直于曲线在某点的切线的一条线。
编辑切换为居中
Normal Map 法线贴图
烘焙法线的意义,就是把高模的法线方向,用一张图(RGB)来存储法线信息,存到低模的表面上。贴上法线贴图的低模,就会在视觉上产生凹凸不平、增加细节的渲染效果,从而看起来像高模一样。Normal Mapping 法线贴图本质上就是一种图片,只是这张图片的用途比较特殊而已。
举例说明:
将下面的模型烘培(3dmax烘培)在底部的面片上,会得到中间的一张2d图片,将法线贴在面片上会得到右图的效果
编辑切换为居中
编辑切换为居中
编辑切换为居中
通过法线贴图,可以看到不同的结构是被不同的颜色构成的,将法线贴图用ps打开,可以看到红绿蓝三通道。
为了更好的理解,我们从俯视角度,假设这里只有一盏直射灯,将灯放在球体的右边,光从右到左,就得到了红通道这张图。然后将这盏灯放在球体的前面,光从前到后,就得到了绿通道这张图。
同理,蓝通道这张图是光从上向下打。
编辑切换为居中
编辑切换为居中
编辑切换为居中
编辑切换为居中
编辑切换为居中
编辑切换为居中
从上面的的信息可以得出,在2d的法线贴图上,红通道记录高模的横向信息并且面向右的结构会变亮;绿通道记录纵向信息并且面向下的结构会变亮;蓝通道则记录了高模与低模法线方向上的坡面信息。
(以上是通过3dmax烘培得到的DirectX法线。OpenGL的法线与DirectX的法线区别是绿通道相反,也就是OpenGL绿通道的光是从后向前打)
根据各通道的信息,再回来看这张RGB法线图,面朝下的结构是发绿的,面朝右的结构是发红的,我们经常听到的‘绿色向上是maya’就是在我们确定了该结构是朝上的方向,然后通过绿色来判断是否为OpenGL法线。
编辑切换为居中
编辑切换为居中
拓展一点,当你掌握了法线的基础知识后,也可以通过法线贴图快速推理出结构的方向,或是快速分辨OpenGL和DirectX。(甚至尝试画一些简单的法线结构)
二、不同软件的烘培对比
烘培前有几个参数需要了解:
cage。 包裹框,可以理解为是将包裹框内的高模结构烘培在法线上,同时烘培方向是从包裹框到低模的点对点。
编辑切换为居中
padding。溢出值,烘培的法线颜色向uv框外溢出的像素单位。
编辑切换为居中
光滑组(软硬边)
编辑切换为居中
UVshell。uv框的间距,一般512的贴图是4个像素单位,1024是6个,2048是8个
烘培开始:
了解了法线基本原理,下面我们对一些基础模型做实验,体验不同条件下的法线贴图效果
低模
编辑切换为居中
高模
编辑切换为居中
我们通过3dmax(2017)、Maya(2019)、Substance Painter(2020.2.1)、Marmoset Toolbag(3.08)四个软件进行烘培,以Substance Painter和Unity的效果作为直接效果参考
法线图:
编辑切换为居中
编辑切换为居中
编辑切换为居中
编辑切换为居中
Substance Painter内的效果:
编辑切换为居中
编辑切换为居中
编辑切换为居中
编辑切换为居中
Unity内的效果:
编辑切换为居中
编辑切换为居中
编辑切换为居中
编辑切换为居中
对比:
首先通过法线贴图,不难看出圆锥出现了非常明显的不同;其次是球体和环形圈在Marmoset Toolbag的贴图上出现了较明显的不同,其他三张却比较接近;其他的几何体在贴图上看不出有明显的不同。下面我们通过在sp和八猴的截图对比一下这些不同的法线贴图对模型效果产生了怎样的影响
首先是圆锥:
编辑切换为居中
编辑切换为居中
编辑切换为居中
可以看到,3dmax和八猴的法线使反光产生了扭曲。
然后是环形圈:
编辑切换为居中
编辑切换为居中
编辑切换为居中
可以看到,八猴产生了接缝和错误的圆滑信息。
然后是球体:
编辑切换为居中
编辑切换为居中
编辑切换为居中
同样的,八猴产生了接缝和错误的圆滑信息。
三、光滑组(软硬边)和UV对法线的影响
这里我们以3dmax烘培举例(3dmax的烘培更容易控制),max使用的是光滑组
当存在光滑组和uv两个变量时,会出现下面四种情况,我们尝试用这四个低模烘培同一个高模,附上法线图和sp中的效果图
编辑切换为居中
比较后发现:
1.光滑组相连的模型,法线贴图都存在大渐变色,导致模型的法线效果会很奇怪(平面上有发暗发亮的光影)。当你发现你的模型出现这种渐变时,一定是出现了光滑组的问题。
2.中间的两个模型出现了不同程度的接缝(第三个模型的接缝非常明显,第二个模型则弱一些)。光滑组和uv统一相连或断开,是不会出现明显接缝的,当遇到接缝问题,优先考虑模型的光滑组和uv是否统一。