高度图,视差贴图(Bump-maps),置换贴图(displacement),法线贴图的本质

翻译自:

真假位移(Fake vs True Displacement )www.artstation.com

视差贴图(Bump-maps),法线贴图(Normal-maps),位移(Displacement)和矢量位移(Vector Displacement)。到目前为止,您可能至少已遇到其中之一。虽然已经有很多关于它们的信息,但对于它们的差异以及使用特定类型地图的影响,似乎仍然有些混乱。本文将更多地关注需要注意的问题,而不是如何完成工作。

译者注:置换我使用了位移

所有四种纹理类型都有相同的目的,即使用不同的方法为模型添加额外的表面细节。看看这些方法,它们可以分为两类,我将称之为真位移和伪位移。“displacing”这个词只是“moving”的同义词,而“moving”正是两者区别的核心所在。真实位移将围绕顶点移动,而虚假位移努力实现相同的外观,但没有实际改变几何体。现在,我将重点讨论这两个类别之间的差异,而不是逐个分解每种贴图。

伪位移真位移
法线 & 视差位移 & 矢量位移

总的来说,真正的位移提供更干净的结果,但对渲染时间有很大的影响。

附注:如果你想知道为什么没有提到高度地图(Height-maps)。术语高度图描述的是信息是如何存储的,而不是如何将其应用到网格中。它们可以被应用为视差或位移。像Substance这样的软件之所以使用这个术语,是因为它没有说明你是否应该使用身高图作为真实的或假的位移。

在我们进一步讨论之前,我应该提一下,我是一个视觉特效艺术家,因此将从视觉特效的角度来看这个话题,使用路径跟踪渲染。如果你使用不同的渲染方法(例如游戏引擎),你的渲染结果将会不一样。真正的位移甚至可能完全由您的引擎支持。

为了理解伪位移是如何工作的,我们首先需要快速了解一下路径跟踪。简单来说:光线从场景中的所有光源发射出来,并在物体表面反弹,直到它们到达相机。或者,可以从相机发出光线并反弹,直到它们到达光源。使用这两种方法中的哪一种对我将要演示的效果没有影响。

反射光的角度是通过比较入射/入射光的角度与表面法线的角度来计算的。那些在学校学过向量数学的人可能还记得它,可能认识法线这个词。在向量数学中,这是渲染的核心,法线是垂直于平面的向量。简化后,我们可以说模型上的每个面都是平面的,因此每个面都有一个法向量。

附注:实际上,多边形并不总是平面的。为了解决这个问题,渲染引擎将所有的多边形,包括四边形分割成三角形,然后计算所有三角形的平均法线。

之所以这样叫法线贴图,是因为它们允许您按像素存储自定义的表面法线。这意味着你可以在不改变几何体的情况下自由地操纵光线的反弹方向。视差贴图在渲染时将高度信息转换为表面法线。这意味着对于光线(基本上就是渲染引擎的眼睛)来说,法线和视差贴图看起来是一样的。

我们可以通过匹配表面法向的角度来模拟真实位移的结果。在这个简单的例子中,它可能看起来很好,但是不改变几何体将伴随一些失真作为代价。无论您使用什么纹理类型,视差或法线,位移或位移向量,无论纹理是由烘培或是预制的,都没有什么区别,失真仅源于它们都是因为假位移没有修改几何体,而真位移修改了。

对照明的影响

在查看示例时,您首先会注意到的是缺少阴影。真实的位移不仅会影响基础网格投射的阴影形状,而且还可以创建新的阴影形状,从而投射出全新的阴影。通常这是最明显的自阴影,但它也发生在投射阴影到其他物体。

移动模型会导致自阴影,因为光线被阻止到达表面上的同一点。如果这个图中的光源是太阳(平行光线),那么使用真实位移将投射一个阴影覆盖所有红色显示的区域,这是在使用假位移时丢失的。

看看这个简单的渲染,你可以看到光线的大致方向被两种方法捕获,但是当使用假位移时,几何体的实际阴影消失了。

这种效果的一个很好的例子就是从平面的几何体上创建一堵砖墙。使用真位移,阴影在墙的裂缝给墙一个很深的感觉,而缺乏这些阴影使假位移版本看起来非常平。

但是要清楚的是,阴影的缺乏并不是与光相互作用的唯一可见的区别。通过不规则的真实位移,我们增加了物体的表面,这导致了更多的反射光。当使用假位移时,这会导致暗部区域看起来形成不自然的黑色。

在小金字塔的渲染中,展示了阴影投射,我增加了渲染的对比度,来标记这个效果,这样更容易一次聚焦在一个方面。看一下未编辑的渲染,缺乏反弹光将变得可见。

在谈及了阴影投射和弹射光的缺失之后,还有一个属于灯光影响的效果。几何体如何接收阴影。

和前面的例子一样,红色代表阴影。通过比较圆锥体投射到物体上的阴影的高度,可以看出阴影的形状只会受到真位移的影响。

应用在平面上的真、假位移代表一个简单的上下波动。只有投射在被真位移形变(deformation)的平面上的阴影,增加了深度的感觉。

到目前为止,我提到的所有效果主要都是受到入射光角度的影响,相比相机角度。如果你的相机对准光源,那么所有这些效果将会消失。例如,阴影的形变会减少,因为同样的形变也会发生在相机的视角上。

另外,越来越多的阴影将会消失在几何体后面。

虽然这工作得很好,但它不是一个真正的解决方案。阴影和它们创建和增强的形状主要有助于使场景看起来有趣。如果你使用不止一个光源,那么无论如何你只能将你的相机对准其中一个。所以不要让它影响你照亮场景的方式或相机的位置。

看看最后的渲染,你可能会注意到一些别的东西。虽然法线贴图重现了同样的亮度值,但是金字塔看起来还是很平的。这是由于我将要介绍的下一个效果。

视差

视差是透视法的主要原理之一,它描述的是在移动相机时,使物体看起来像是相对移动的效果。它并不局限于单独的物体,它也会发生在三维空间中的任意两个给定点上。这意味着使用真位移网格的形变对它有影响。

我用红线来标记三个物体上相同深度的区域,这样它们就可以作为参考点。另一方面,蓝色的线,被位移向下推。垂直向下看,真位移和假位移几乎是相同的,但是在掠射的角度上,在低多边形/假位移版本上的线会保持均匀的间距,而在网格上使用真位移的线看起来会移动。如果我们把相机稍微倾斜一点,平面后部的蓝线就会完全消失在中心线后面。相反,将蓝线向上推,这种效果会发生逆转,导致前面的蓝线几乎覆盖了中间的红线。

一些游戏引擎提供了一种伪造视差的方法,称为视差贴图,该方法通过对渲染的像素而不是几何图形应用2D形变(distortion)来工作。 这提供了一些不错的保真度,但是也会导致性能下降。

有趣的事实:有些艺术家以非常有趣的方式使用视差。 一个很好的例子是帕特里克·休斯(Patrick Hughes),请看下面的视频,其中展示了他的作品之一。

原视频地址youtu.be

90度角

尽管可以使用真位移创建90度垂直偏移,但对于假位移却不能这么说。 理论上,垂直角度可以存储在法线贴图中,但这样做没有任何意义,因为从逻辑上讲,它们在低多边形网格上没有任何相关区域。

上图中的绿线表示基础网格物体的表面,而红线表示将要烘焙到网格物体上的高多边形。 从我们的低多边形中出现的梯度显示了生成的法线贴图将具有的值。 除了区域1和2之间的垂直角度,高多边形的每个表面角度都可以分配给我们低多边形上的一个区域,因为它相对于基础网格没有任何宽度? 视差贴图也存在这个问题,因为它们在渲染时会转换为表面法线。 下面的第一幅图像显示了高多边形的侧视图,该图像用于烘焙法线和位移,而第二幅图像是使用烘焙纹理的渲染。

如您所见,所有其他陡角仍然可以存储在法线贴图中,即使它们显示在很小的区域中,但90度角完全消失了。 请注意,即使使用真位移,通常也应避免使用纹理创建任何陡峭的角度。 由于这种位移会拉伸其他纹理的像素。

轮廓

当查看轮廓时,假位移不会改变几何形状的形状也会变得很明显。 在极端情况下,内部重叠甚至会发生同样的情况,例如鼻子遮住角色脸颊的一部分。

通常,有两种方法可以看到这种效果。 应该柔和的轮廓变得块状,或者应该具有很多高频细节的轮廓突然缺少上述细节。

次表面散射(Sub Surface Scattering

如果您正在使用的资产正在使用SSS,那么您可能还会感觉到假位移的另一个缺点。

SSS计算使光线在穿过对象时的角度随机化。 这意味着它们对表面角度的依赖性比对网格的厚度和实际形状的依赖性小得多。 我们在使用假位移的示例中看到的任何效果的唯一原因是,从黑暗区域到达相机的唯一光线是散射光线,而明亮区域是所有光线的混合。 这使较暗的区域具有红色调,但完全失真(This gives the darker areas a red tint but does not come anywhere close in terms of fidelity)。

黑色区域或反射的拉伸

除了由于缺乏反射光导致的不自然的黑暗区域外,还有另一种造成类似失真的效应。 当使用假位移时,表面法线和射线角度的某种组合可能会导致反射射线需要穿过对象本身的表面。

这没有任何意义,因为我们不尝试渲染透明表面。 为了解决此问题,渲染器提出了多种方法来处理这种情况。 使用哪一种取决于您使用的渲染引擎。 可能的选项是:

  • 删掉光线
  • 以不同的方式重定向光线
  • 忽略法线贴图的损坏区域

Arnold就是其中一种引擎,它将简单地删掉破坏的光线,从而导致部分黑色反射。 另一方面,“真位移”将使光线简单地从物体表面反弹几次。

诸如Blender的Cycles之类的其他渲染器会将光线重定向到与低多边形表面平行的方向,从而产生最接近的光线。 虽然这可以防止它们被吸收,但会导致许多彼此相邻的像素接收相同的输出矢量,我们将其视为拉伸的反射。

现在,虽然我还没有使用第三种方法体验过任何渲染器,但我确实知道同样的原理适用的情况。 将软边/平滑法线(同一事物的不同命名约定)应用于网格将对表面法线进行插值,以模拟平滑版本的网格的外观。

通常,渲染器与平滑法线的交互方式与假位移的交互方式相同。 如果将平滑法线应用于立方体,则陡峭的角度与表面法线组合将导致相同的困境,即渲染器必须在三个选项之间进行选择。 我不知道为什么,但是Arnold处理平滑法线的方式与处理假位移的方式不同。 当射线必须穿过对象时,它不会删掉射线,而是会忽略平滑法线。

尽管在我的示例中,所有这三种解决方案都看起来很糟糕,但问题并没有看起来那么糟糕。 我为这些渲染使用了非常强的纹理,并且一如既往,您的纹理越强,缺点就越大。 通常,您不会遇到想要以这种强度应用任何位移的情况,无论是真还是假。 当您在一定角度查看场景时,可以看到我的纹理强度。

此外,还有另一个因素涉及到(masking)了这个问题,那就是渲染比仅精确镜像的反射还要复杂。 如果要渲染有闪亮的银白色,那么是的,你应该小心,但是一旦引入一些高光粗糙度或导电材料(非金属),该效果就会开始消失。

高光粗糙度可以在微观水平上模拟表面缺陷,这是通过在反射角度上添加随机偏移来实现的。 表面越粗糙,可能的偏移范围越大。

反射的随机化会使反射模糊,从而导致更少的光线/样本变为非法角度。 单靠这一点并不能完全解决问题,您仍然会在反射的逼真度上看到差异,但是它并不那么明显。

导电材料会以完全随机的角度反射射向它们的大部分光,这称为“漫反射”,只有很少一部分反射为“镜面反射”。 这意味着即使表面完全光滑,问题也几乎不会引起注意。

这些图像是在Arnold中渲染的,当我们隔离高光反射时我们仍然可以看到黑色区域,但是在最终渲染中它们并没有真正被注意到。

Tessellation / Subdivision(细分)

到目前为止,我提到的所有失真(artefacts)都是关于假位移的,但这是使用真位移的不利之处。单独真位移只能创建/重新创建多边形支持的细节量。这意味着我们首先必须细分我们的网格。如果我们不对其进行足够频繁的细分,那么最终的几何形状可能仍然无法支持纹理中存储的所有更精细的细节。这意味着您可能必须对模型进行大量细分,从而使场景变得非常沉重。幸运的是,如今的渲染引擎具有一项功能,该功能可以自动添加无法被几何体支持的细节作为假位移。在某些渲染器中,默认情况下禁用此功能,因此请确保进行检查。令人讨厌的是,目前还没有任何标准化的命名约定。例如,Arnold称其为Autobump,而Cycles则称其为Displacement + Bump。

要了解该功能,请看下面的比较,这两个网格都细分了三遍,但是只有组合方法可以提供所有细节。

遗憾的是,此功能并不是没有错误的,有很多事情可以破坏它。例如,不冻结/应用对象的比例。将Autobump与矢量位移一起使用也可能很棘手。

尤其是当您刚入门时,最好的做法是通过创建比较渲染来确保一切正常。一种使用Autobump结合所需的细分数量,一种不使用Autobump但结合大量细分,以确保结果匹配。

请注意,在某些渲染器中,必须单独启用将Autobump与SSS着色器一起使用。对于Autobump功能所添加的那些细节,使用假位移的问题仍然会发生,即使它们对于非常细微的细节(例如毛孔)的影响不大。

结论

真实位移和假位移都是增加模型保真度的好方法。我有意使用了非常有力的例子来非常清楚地展示所有失真。不要被愚弄,去相信哪些宣传所永远不该使用假位移,像法线贴图

基本规则是,您的纹理强度越高(the harder your texture has to work),失真就会越强。因此,无论您要使用哪种方法,都应始终尝试使用基本拓扑捕获所有定义的形状。在使用假位移时这非常重要,但在使用真位移时也很重要。如果遵循此简单规则,则两种方法都可以达到几乎相同的结果。您能发现其中哪些使用真,哪些使用假位移吗?

与任何复杂的主题一样,选择取决于环境,这是质量和性能之间的平衡。如果您正在处理背景资产,那么使用真位移来减慢渲染时间可能不值得,尤其是在场景包含大量资产的情况下。

另一方面,如果您正在处理英雄资产,则使用真位移仍然是最佳选择,因为它只会带来更清晰的结果。即使在我向您展示的上一个渲染中,这两种方法在质量方面仍然存在一些差异。

但是,此规则也有例外。例如,如果您的时间安排得非常紧张(ridiculously tight schedule for a sequence),那么使用假位移而不是真位移可以帮助您加快渲染速度。并且由于您将需要渲染序列,因此较短的渲染时间将与额外的每一帧相乘。

或假设您需要一种特定的材质,而您在网上可以找到的所有良好纹理仅包含一个法线贴图,您也没有时间自己创建材质。在这种情况下,即使您的资产是英雄资产,您也可能要用这些使用法线贴图材质中的一种。相当多的扫描材质可能就是这种情况,因为捕获高质量的法线贴图比创建高质量的位移更快更容易。如果您对完成此操作感兴趣,那么下面的文章可能对您很有趣。 (即使我可能不建议使用智能手机。)

magazine.substance3d.com

未经允许不得转载:开心小站长 » 高度图,视差贴图(Bump-maps),置换贴图(displacement),法线贴图的本质

相关推荐