这是有关法线贴图的系列教程的第二部分。 第一部分在
这里 ,但是要了解第二部分,则不必阅读它。
烘焙法线贴图的一般原理相对简单:我们有一个带有UV坐标的lowpoly模型和一个highpoly模型; 我们将正常信息从高垄断转移到低垄断。 因此,lowpoly将以与highpoly相同的方式反射光。
在此过程中,烘烤程序实质上会根据顶点的法线并寻找高多边形,从低多边形发出光线。 这是创建法线贴图的最重要方面,并且使用法线贴图时出现的大多数问题都与此相关。
如果不控制lowpoly模型的顶点的法线,则将失去对法线贴图的控制。
法线贴图的相关性较差
为了控制lowpoly模型的平滑,我们需要分割的顶点(以创建刚性边缘)或平均的顶点(以创建平滑边缘)。
事实证明,并非所有3D程序都使用相同的计算来平均顶点法线。 这意味着在不同的3D编辑器中,lowpoly模型的外观将有所不同,其顶点法线将略微指向不同的方向。 通常,这不会带来什么大问题,因为这些偏差非常小,但是会影响模型的外观。 使用法线贴图时,这些差异会放大,因为法线贴图会更改低多边形模型的法线,这在不同程序中会有所不同。
3D图形行业正在努力解决此问题。 最近,出现了一个称为Mikk空间的标准。 这是一种计算顶点法线的方法,所有3D应用程序都可以使用该方法使顶点法线在所有3D程序中看起来都一样。 但是,应注意,到目前为止,并非所有3D应用程序都使用它。
减少这种影响的另一种方法是在烘焙时不非常依赖法线贴图。 尝试使lowpoly模型看起来更像highpoly模型,并在平面上使用更刚性的边。 在这种情况下,法线贴图不必做所有工作,小的偏差将变得不那么明显。
法线贴图的斜角细节
当计算机为低多边形模型的顶点法线平均法线方向时,曲面角度的较大变化会“挤压”低多边形模型的法线,并且它们将不再垂直于低多边形表面。
由于法线烘焙程序在搜索高多边形零件时会使用低多边形法线方向,因此,如果这些方向是斜角的,则它们会在法线贴图上看起来是斜角的:
这是一个非常普遍的问题,已经找到了几种解决方案。 没有理想的解决方案,这完全取决于几何形状。
1.在某些3D烘焙程序中,可以选择通过暂时改变低多边形法线来重新烘焙这些零件,以使它们烘烤时不会出现倒角。 例如,此选项位于Marmoset工具包中。 昵称为Tanagashi的Reddit的用户向我友好地解释说,诸如xNormal之类的程序可以细分低多边形以添加新的顶点,并使法线垂直于低多边形表面,在对象空间中烘焙法线贴图,然后基于原始的低多边形法线将其转换为切线空间。 使用新的法线贴图,程序可以创建蒙版,以控制在何处使用原始法线贴图以及从细分的低多边形模型创建的位置。
2.添加顶点将使顶点法线之间的过渡不太倾斜,因为一个90º角将分成几个较小的度数,从而使第二个过渡不太倾斜。 显然,这会增加多边形的数量,并且在添加几何图形时,我建议使用这些附加组件来创建更有趣的模型轮廓。
3.分离顶点的平均法线(使边缘变硬/使用单独的平滑组):这样,每个顶点将具有多个法线,每个法线都垂直于低多边形曲面。 不要忘记,当3D程序的顶点法线分割时,它实际上会创建一个顶点副本,从而增加了顶点数量并稍微降低了性能。 另外,正如我们稍后将看到的,刚性肋骨会产生“黑色肋骨”问题。
4.可以更改模型法线以弯曲低多边形法线,使其垂直于高多边形法线。 请记住,并非所有程序都允许使用更改后的法线(在Zbrush中只有普通法线,OBJ文件和过时的FBX不包含有关法线的特殊信息)。 实际上,有两种更改法线的方法:
- 加权法线:这是一种自动方法,类似于平均顶点法线。 想法是,在平均顶点法线时,并非所有的面都应具有相同的强度:大面比小面更能“吸引”顶点法线到自身。 因此,通常更重要的大脸将更好地投射细节。 这对于highpoly面板特别有效。
- 自定义法线:使用3D编辑器中的工具,我们可以弯曲低多边形法线。 这是一个相对较新的想法,对于该想法的实现,没有标准化的工具。 请记住,弯曲法线会在模型的其他部分产生非常奇怪的不需要的阴影,因此该技术通常与斜角结合使用。 有人将此技术称为“中型建模”。
笼/烘烤距离
默认情况下,从低多边形表面发出的光线传播的距离有限,因此低多边形不会从高多边形的远处接收正常信息。 该距离通常称为“前/后距离”,因为光线可以向内,向外或双向发射。 在下图中,该距离以红色显示:
一些3D应用程序(例如3ds Max)也允许使用笼子。 笼子是低多边形模型的“副本”,可以对其进行修改,以使其理想地包含高多边形。 同样,在某些情况下(并非总是如此),它允许我们更改射线的方向而无需更改低多边形顶点的初始法线。 这可以帮助获得最佳的烘烤边界情况,并避免倒角; 但是,必须记住,我们不使用法线顶点的方向进行烘焙,但是最终,我们将使用法线贴图来更改真正的低多边形法线,因此结果可能看起来很奇怪。
肋缝
如我们所见,如果存在具有硬边的模型(某些边具有多个平滑组,或者某些边被标记为“硬”),则烘焙程序会将顶点法线划分为两个面。 此操作有好的方面,也有坏的方面。
这样做的好处是,法线不求平均,因此法线的变形更少:顶点的法线完全垂直于低多边形表面。 如果低多边形的锐角边缘更适合于刚性边缘,则它也可以使低多边形更加美观。
不好的是,现在法线之间存在间隙,这可能意味着如果lowpoly在法线中存在无法获得highpoly细节的间隙,我们可能会丢失信息。 此外,lowpoly投影的某些部分可以相交并竞争同一UV空间。 两种效果都会沿着肋骨形成接缝,其可见性取决于引擎。
但是,可以通过一个简单的技巧轻松避免这种情况:如果两个面被硬边分开,则需要将每个面放在单独的UV岛上,并在它们之间留出空间。 为了减少法线分割问题的影响,烘焙程序会在法线的顶点之外尝试一些额外的信息,但是为此,它们需要在纹理上有额外的空间。 如果用硬边隔开的面在UV中连接,则将没有位置在纹理上保存此附加信息。
结论
准备了lowpoly模型并使其与highpoly模型尽可能接近后,我开始在UV之前进行平滑处理。 我将lowpoly设置为平滑(如果对象是有机的,则从完全平滑的模型开始,如果对象具有实体表面,则将平滑角设置在30-60º之内,并调整平滑,直到结果看起来不错)。
准备好模型的平滑处理后,我开始研究UV,将所有硬边缘划分为单独的UV岛(以避免边缘出现接缝)。
如果斜角存在错误,则添加其他边缘(通常我制作斜角以保持轮廓的圆度)。 这适用于我的大多数模型,但是如果我使用Marmoset工具袋进行烘焙,或者使用自己的/加权法线,则可以纠正斜角错误。
如果存在投影错误,我可以更改烘焙距离/笼子,修改lopoly / highpoly,使其更适合烘焙,或者删除单独的非常刚性的零件(例如,圆锥体末端)的法线贴图。
下一篇文章将指导您解决烘烤法线贴图的问题,并讨论最常见的问题和解决方案。