选择哪种方式的混合法线贴图增加纹理细节效果好?在UE5和Unity中【Ben图形/06】...
贴图法线Game艺视界原创 15894 0
实名

通过了实名认证的内容创造者

发布于 2022-3-21 21:18:17

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 Game艺视界 于 2022-3-21 21:53 编辑

b64e78dc188da7f93a16111abbb1eb9.png

本期内容
今天我们将讨论法线贴图和将法线混合在一起,让我们开始在我们深入到创建混合法线的材质之前,我想一起快速复习一下我的法线贴图是什么左边这张是为虚幻制作的,右边是为unity制作的。我们来看下区别,不同之处在于绿色通道是倒转的,

8c35d5dc2b83eb89a0f858682e720351.png


我们来看看如果我到这里的通道,我选择绿色通道这个是为虚幻制作的,你可以看到它看起来像是从底部点亮了绿色通道,

如果我们看一下右边这个制作的为unity制作的通道,你可以看到绿色通道看起来像是从顶部点亮,红色这两个频道和

红色和蓝色的通道是一样的,如果我们看看这些红色和蓝色的通道,你会发现它们是匹配的没错,

但绿色通道被反转所以在虚幻中,看起来频道是从底部点亮的,为了unity它看起来通道是从顶部制作的,因此当您创建法线时如果您为unity创建一个法线,请确保它设置为从顶部点亮在绿色通道中为了uneral,它被设置从底部发光,在两个引擎的法线贴图中,为您提供正确的结果  

法线贴图不同于颜色贴图和漫反射贴图,法线贴图不能决定表面的颜色,它告诉你表面的方向你可以看到我们的整体颜色,这个颜色值在RGB下是0.5 0.51你可以看到这个区域是垂直向上的,还是平的?
在纹理中是0.5 0.51以及那些不是垂直向上或平坦的区域是不同的颜色取决于他们面对的方向,所以你可以看到我有一种绿色指向这个,紫色的颜色指向这个偏蓝的深蓝色指向左边,也许这个橙色指向右边。这些颜色其实根本不是颜色。表示指示材质方向的方向向量,每个像素都指向如果我们有两个法线贴图。例如我有一个石头,我有一个法线贴图,决定了整体岩石的巨大形状当我靠近岩石的时候等我走近的时候,想看看细节,我需要能够混合细节法线贴图这个紧密的近距离法线图和控制岩石的整个形状,意味着我必须把两个法线图组合在一起。

今天我们要讲的是五种组合的方法,我们的法线地图和我要讲的每种方法的优缺点。
好了,让我们来看看unreal的情况好了,我们在unreal的情况下,你可以看到我带来了我的鹅卵石法线地图,你也可以看到我已经带来了我的纹理坐标,我将纹理坐标乘以2在u中,1在v中,这有点让它们在我的预览界面上看起来很好,没有理由你必须这样做,你可以你可以把它乘以你想要的任何东西。

在这一点我们只有一个法线映射,我们来看看几个混合法线贴图的不同方法我调用的第一个方法是简单的,我有底法线映射上面的,我要红色和绿色的法线贴图的通道,这里我有我的细节法线贴图。底部你可以看到我的纹理坐标乘以18和9。我在给它平铺穿过表面 18 次,所以我要取基本法线贴图的红色和绿色通道以及细节法线贴图的的红色和绿色通道我把它们加在一起,只是红色和绿色通道暂时忽略z通道或者蓝色通道然后我做的最后一件事是为我的 z 频道附加一个1所以我的 z 通道是我的正常的第三个组件,我只是为它分配了一个硬编码的值

所以你可以看到我在这里有我的基本法线,我也在混合细节法线,它是相同的纹理,我只是举个例子,你可以看到它在这里铺了一遍又一遍这样鹅卵石的细节就很小然后基础鹅卵石很大,你可以看到这两个法线贴图正在被混合在一起,

但有一个小问题那就是如果我们回到这里,我失去了我底层法线贴图的一些强度我把我原来的法线贴图插回去你可以看到我有一些不错的强法线,这里有一些很强的法线

但是一旦我代入这个方法现在我的法线看起来没有那么强,它们看起来没有那么深。那是因为我只是附加了这个1,所以这个方法并不像以前那样。很好,如果我担心法线的质量现在,如果我这样做,如果我确实在这里查看统计数据,让我们比较以下统计数据。没有把法线和基底混合在一起着色器指令153只是红色和绿色,然后加上一个1,所以这种方法是最便宜的了。但问题是它确实让正常情况变弱了,所以如果你想保持基础法线强度正常,在我使用的例子中我在讨论的是基础法线贴图岩石,然后是岩石的细节法线贴图,你可能不想用这个方法,是因为它会让你的基础法线不那么强大,为什么要用这个方法这个方法有什么好处。有一堆法线可以混合在一起,比如在水上,如果你有一堆不同的水波要混合在一起吗这是一个很好的方法。事实上我做了关于雨波纹和水波纹的教程这就是方法。因为它是最便宜的当你不太在意法线是否完美时可以使用它。如果你有一张法线地图从高分辨率的模型到低分辨率的模型,你在顶部混合更多的法线贴图细节,你肯定不想使用这个,简单的混合方法。

让我们切换到unity看看方法,我用了同样的法线贴图,除了这个绿色通道翻转了,这是我的简单方法,你可以看到我正在使用这个混合节点只取法线的x和y然后相加然后把它们和一个值结合起来对于z分量,如果我把它代入法向量主堆栈现在你可以看到我有我的细节法线,与我的基础法线混合在一起

告诉你们swizzle节点,我很喜欢它的工作方式,因为你可以像虚幻中的通道掩码一样使用它,所以在这里我已经通过输入将,红色和绿色通道屏蔽掉了在我的面具,

但它超越了虚幻的频道面具因为我也可以用这个来交换组件,例如,如果我输入 yx 现在我已经反转并将绿色通道放在红色通道插槽中,将红色通道放在绿色通道插槽中所以我可以把分量反过来

也可以把分量加倍或者复制它们,例如,如果我做xxy现在我已经把红色通道复制到绿色通道了,然后把绿色通道转换到蓝色通道。

我可以复制,我可以重新排列我可以用一个节点和这个新的swizzle屏蔽所有通道这个新的 swizzle真的很强大所以这是将法线混合在一起的简单方法,您只需将 x 和 y 分量添加在一起,然后将 z 分量的硬编码值组合为 1

好了,我们来看下一个方法这个方法,我在这里使用的这个简单方法,(和合并法线方案)唯一的区别是它不是附加一个1。这是底法线映射的z分量这是底法线映射你可以看到,这里的值不是1简单,我用的值底法线映射z分量,然后我也得到了这个标准化最后,这样做会让结果更加准确,
让我们把它连接到法线

比较下这两个法线或者这两种结合的方法,Udn方法保留了更多的原始法线形状。当我来回切换的时候这个有点软第一种方案有点软。它删除了一些强度的法线但是这个udn方法更强一些,它保持了底层法线的强度。
第一种方案用了153条指令,第二种方案用了159条指令,省了一些指令所以udn是非常有用的,但是你要放弃的是它的质量细节法线地图,因为我没有使用细节法线贴图的Z通道,我只是跳过它,只使用细节法线贴图的x和y质量被降低对于udn,

如果我们看一下unity 这里是unity中的udn方法,你可以看到我正在取基本法线贴图的 x 和 y 以及细节法线贴图加在一起,然后我把它和基本法线映射的z分量然后在最后进行归一化看到了吗,但是我们有更多的细节。udn的质量稍微高一些好了,

我们来看下一个方法,它和udn方法非常相似除了我们处理z的方式,两个法线贴图的通道是我们把它们乘在一起所以我把红色和绿色通道加在一起,对于蓝色通道或者说法向量的z分量把它们相乘,然后相加,然后标准化,我不知道你们能不能看到,现在细节线更强了,因为我们实际上使用细节法向量的z分量来提高我们的结果,现在我们花费164条指令,udn方法花费159,所以我们要多花5指示,展示的质量越来越好,所以你必须决定你想要在费用和质量之间权衡的地方,如果你在做一个角色,你想要角色的质量非常好,而且你知道相机会变得非常近,你可能想要使用 whiteout 而不是 udn 因为你会在基本法线和细节法线的组合上获得更好的质量,

我们将切换到 unity 所以这里是 whiteout 方法你可以再次看到我们正在使用我们的基础 法线贴图 x 和 y 以及基础法线贴图细节法线贴图 x 和 y 并将它们加在一起。但是我们将两个法线贴图的 z 分量相乘并将它们相乘,然后我们将 x 和 y 与 在我们规范化之前乘以的 z 然后让我们将其传递到我们的主堆栈的正常组件中,我们得到一些改进了我们的混合质量

看看最后一个方法,而这个方法我们称之为RNM,这个方法有点复杂,但它也是最准确的所以这里我有我的基本法线贴图我的细节法线贴图,我用红色和绿色通道而z或者蓝色通道我正在添加,然后再把他们加起来然后将它们重新组合在一起,所以基本上我只是给z通道或者说底数的z分量加了1,然后对于我的细节法线我是红色和绿色乘以- 1然后把它们加在一起,我就得到了红色和绿色乘以- 1加上一个z通道然后对这两个做点积然后把结果乘以原来的结果。我在这里创建的向量,然后是detail法向量乘以这里的向量由Z分量加1,然后相减这个向量从这个向量得到结果。
这里消耗164条指令,RNM方法,但我们提高了我们的质量这太棒了,

好了,让我们转到unity,这里我们有 unity实现的 rnm 方法
所以我们有我们的细节,我们的基本法线和我们的细节法线我们在这里做同样的事情,我们在 z 上添加一个并将其重新组合在一起,我们将细节法向量的x和y乘以- 1把它们放在一起,然后做点乘乘以原来的向量这里我们乘以底法线的Z分量加到1。然后我们用这个向量减去这个向量连接到我们主材质观察,我们在法线贴图混合上得到了进一步的改进很酷,让我给你们看一些其他重要的东西

Unity带有这个叫做法线混合的节点,它有两种不同的混合方法法线是默认方法,还有重定向方法,如果你想知道这些是默认方法它使用的是Whiteout的方法,默认情况下,我们会使用内置普通混合节点的白出方法如果你选择重定向你会用到标准混合的RNM方法,所以这个标准混合使用whiteout。如果你喜欢的话,你也可以选择使用RNM

如果我们切换到unreal,你可以看到unreal伴随着这个节点称为混合角修正法线这个节点是用来混合法线的。
你可以看到有一个输入为基础法线和其他输入额外的法线和这个节点RNM法线贴图混合所以如果你想要做最高质量的正常混合,你可以使用混合角修正法线,使用这个RNM方法或者你可以用其他方法设置,我在这里设置的节点对于udn或简单来说这是内置节点Unreal和unity内置的节点

我们不能只使用常规的覆盖方法或者我们通常使用的方法混合颜色因为这些不是颜色它们实际上是向量或者方向,所以我们必须小心我们如何做到这一点。但你可以看到有很多不同的方法从这个简单的方法一直到RNM方法在质量和性能之间有什么权衡以及两者之间的相对费用因此您再次希望在您并不真正关心您的质量有多高的领域使用简单的方法,只是想做一些正常的混合,尽可能便宜然后逐渐地,有udn稍微好一点但仍然很便宜,然后是Whiteout和RNM尽可能的高质量,但是有点贵,

这就是我们今天的教程。




               

本帖被以下画板推荐:

微信公众号:Game艺视界
使用道具 <
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表