这是常态-4:使用法线贴图解决问题

图片

第1部分:什么是法线贴图以及它们如何工作

第2部分:法线贴图的烘焙方式

第3部分:法线贴图的类型

这是法线贴图教程的第四部分,但它与其余部分无关,可以单独阅读。

在这里,我列出了我多年来工作中遇到的法线贴图问题,以及解决这些问题的一些解决方案。

问题:模型的边缘上有“黑线”或“插入”


图片

当模型具有坚硬的边缘时会发生这种情况,因为模型的顶点具有完全垂直于多边形表面的法线,这就是烘烤程序可能会跳过一些细节(在模型上留下黑线)的原因。

图片

解决方案:法线贴图烘焙程序在创建法线贴图时会考虑到此问题,并尝试通过计算顶点法线后面的更多信息来减少其影响,但要保存该信息,它们需要在UV扫描多边形之间留一个间隙。

这里有更详细的说明,但是在实践中,规则非常简单:当模型具有尖锐的边缘时,有必要在UV中分离与其连接的边缘。

问题:法线贴图看起来完全错误,尤其是在某些角度


可能由于多种原因发生此问题。让我们讨论其中的一些:

  • 您使用了错误的切线空间:我们正在尝试使用法线贴图修改的lowpoly模型法线,在烘焙程序中的计算方式与在用于渲染模型的程序中的计算方式不同。如果这些计算不同,则法线贴图可能看起来非常奇怪,尤其是从某些角度来看。

    图片

    , . , , .

    : Mikk. , . Mikk, handplane .
  • -: — . , . - — , . - , linear/linear color/raw sRGB Unreal.
  • : , , (bump map), (displacement map) ....
  • lowpoly- lowpoly : , / (smoothing groups)/ (hard edge), / , .

    lowpoly , /, ( obj ) .

: ?


解决方案:您不需要它。不必为所有内容创建法线贴图。尖锥是一个典型的例子,但是在许多其他情况下,法线贴图不是解决方案。

图片

我们使用法线贴图来更改低多边形模型法线的方向。有时法线的方向是正确的,不需要任何更改,有时低多边形法线会极大地旋转(例如在尖峰的情况下),而高多边形模型的细节会错误地映射到低多边形模型的表面。在这种情况下,我只是使用这种颜色删除法线贴图的细节:

图片

此颜色是50%红色,50%绿色和100%蓝色,并且不会改变切线法线贴图的法线方向,因此您可以使用它来删除投影不成功的地方的零件。

尖锥只是法线贴图可能无法解决问题的一种情况。重要的是要记住,在某些情况下,法线贴图不是最佳解决方案,其功能有限,我们不能指望它们在任何情况下都能按照我们的要求运行。有时,我们可以花很多时间尝试使法线贴图工作,这时我们可以将零件添加到漫反射纹理或lowpoly中,而不尝试使用法线贴图来传递零件。

问题:我模型上的细节看起来倒置了。


这是一个非常普遍的问题,即使在AAA级,也可以在许多视频游戏中看到。

正如我们在看到这个教程 [ 翻译上哈布雷],法线图是使用绿,红和蓝色通道以改变光从该模型的表面所反射的方式,当它下降时,分别从模型的侧部,顶部和前部的纹理(记住,这被简化说明,并非100%正确)。

图片

问题在于,某些应用程序认为绿色通道应将模型显示为从下方亮起,而其他应用程序则认为应将模型显示为从上方亮起。有时也称为“法线贴图右手性”:

  • OpenGL应用程序(右侧,正绿色通道):Blender,Maya,Modo,Toolbag,Unity。
  • DirectX应用程序(左侧,绿色负通道):3DStudio Max,CryEngine,源引擎,虚幻引擎。
  • Substance Painter可以使用这两种类型,并且可以导出两种类型的法线贴图。

解决方案:反转法线贴图的绿色通道。大多数游戏引擎都可以选择纹理反转法线贴图,或者可以在Photoshop中手动反转绿色纹理通道(转到“通道”选项卡,选择绿色通道,然后按Ctrl + i)。

问题:某些零件显得平坦/缺少零件


想象一下,当烘焙法线贴图时,烘焙程序会遵循低多边形法线从低多边形模型的表面发射光线,直到光线与高多边形模型相交并旋转。之后,烘焙程序将获取此信息并将其保存到法线贴图。

这些发出的光线不应无休止地移动,因为它们可能会与高多边形的大部分碰撞并发生不正确的旋转,因此烘焙程序会限制光线的发射范围,有时光线可以在与高多边形相交之前停止。在这种情况下,我们将丢失详细信息,并且法线贴图具有纯色区域。

图片

解决方案:取决于烘焙程序如何允许您控制烘焙距离:

  • lowpoly , «» lowpoly- ( ). , lowpoly highpoly.
  • , Max, (cage) — «» lowpoly, .
  • ( Substance Painter max frontal/rear distance).

您还可以尝试使lowpoly和/或highpoly彼此更相似,以便射线可以在模型的整个表面上获取细节。另一种选择是烘烤两个具有不同笼形距离的法线贴图,并将它们混合在纹理的不同部分。一些普通的地图纯化师可能会为此咒骂您,因此请注意耳朵。

问题:法线贴图扭曲了细节


这是一个非常普遍的问题。当低多边形法线没有正确地对应于高多边形的细节时,就会发生这种情况(因此,如果您从顶点法线的方向看它们,它们会完美地对应)。这通常在某些面形成非常尖锐的角度时发生。

图片

解决方案:我在另一个教程中关于Habré的翻译)详细介绍了该主题,但是总的来说,解决方案如下:

  • 通过添加斜角来平滑尖角。
  • 将锐角的边转换为锐边(硬边)/将面分为不同的平滑组(平滑组)。
  • 使用自定义法线/加权法线。

问题:法线贴图看起来像素化或包含条纹


地震(又名法线图神)这个问题写了一个很好的解释

如果lowpoly和highpoly非常相似,则大多数法线贴图将具有法线贴图的一种基本颜色,而其他颜色将位于lowpoly与highpoly不同的地方。

如果情况相反:lowpoly和highpoly差异很大,则法线贴图将具有更广泛的颜色,并且将出现渐变:

图片

这样的平滑渐变会引起问题,因为需要许多颜色来表示它们,并且最常见的纹理压缩方法是基于减少颜色总数。

解决方案:

  • lowpoly highpoly: , . lowpoly, highpoly.
  • 16- : 8- . , 8 (0 1). 256 .

    , .

    图片

    16- 16 , 65536 . , . , 16- , 8- ( ). , 16- -; 24- . [. .: .]

    , , 16 .
  • : — , , — . , , . .

    图片
  • , : , , . , : , . . , ( , , ), .

:


显而易见的解决方案是增加模型这一部分的UV“岛”或使用较大的纹理,但让我们看一下不太明显的解决方案:

  • 以两倍的分辨率烘焙法线贴图,然后减小图像尺寸:如果使用512x512纹理,请以1024x1024的分辨率烘焙法线贴图,然后将图像转换为512x512。因此,最终纹理的每个像素将接收来自四个像素的信息,从而产生一种抗锯齿并减少像素化。其他烘焙图像也是如此。此外,值得保存高分辨率纹理版本,以防您以后想要在某些区域中增加细节。

    图片

    , , , 1024, highpoly, .
  • UV islands , . 1 UV-, .

    trim- .
  • , . - , . :

    图片

    图片

问题:我的模型是对称的,但是法线贴图在不同的侧面上是不同的。

当应用于对称模型时,法线的方向可能会由于连接面的方式已更改的事实而发生变化。有时,这意味着您可以在模型的中心获得接缝。为避免这种情况,请确保中心的低多边形法线对齐,并在必要时调整平滑度。

另一个可能的原因是三角剖分:将模型导入游戏引擎时,它们总是被三角剖分,有时此过程可能会改变低多边形法线,并且伪影可能会沿着低多边形面的对角线出现。为避免这种情况,请在烘焙之前对模型进行三角测量,烘焙法线贴图,然后应用对称修改器。

此外,您可以学习小型地震教程,该教程对我帮助更多地了解了顶点法线和法线贴图。

有关法线贴图的更多信息,请参见Polycount Wiki。

All Articles