虚幻引擎4在PBR渲染系统之外引入了一个新的深度缓冲器。它叫做“特定深度”,它被用在诸如轮廓选择的编辑器内置效果,遮蔽网格物体的渲染以及透明度的特定筛选中。我会讨论一些在材质编辑器中使用这个缓冲器的基本技巧,并对我在自己项目中使用它的一些特点做些解释。

当你使用特定深度功能来达到你想要的效果时,请仔细阅读在页尾的“问题与限制”。这会使你省去数小时的头痛和减少不必要的漏洞修复。

泰课在线

特定深度基础(Custom Depth 101)

如果从来没有使用过这个功能的话,请在静态网格物体和骨骼网格物体的渲染那一栏中,点击开启“Render Custom Depth”。

泰课在线

想要查看这个缓冲器点击视界选项中的Buffer Visualization。

泰课在线

注意靠近镜头的物体几乎是黑色的很难被发现。

泰课在线

物体轮廓渲染(RenderingObject Outlines)

想要渲染特殊网格物体(例如一个坠落的同伴,一个可用的战利品盒子等等)的轮廓时,我们需要一个缓冲器以获得它们的剪影。特定深度功能即为此而设计的。

当缓冲器中存储了物体的深度信息时,我们可以通过在后处理过程中对临近像素的取样来进行深度比对。如果临近区域有深度信息,但是没有像素信息,我们就把它涂成轮廓的颜色。

我们可以使用另外一个技巧,即对比特定深度和场景深度为所有遮蔽物体画一个半透明夹层。如果特定深度比场景深度大,使用白色与场景深度进行混合。

综合两种方法我们得到了以下处理后的效果:

泰课在线

我跳过了大多实现的细节——如果有什么疑问请在下面的评论区中留言。这个效果可以下载,请在你的游戏中随意修改使用。

轮廓后处理【下载】

带有遮蔽像素上的半透明面纱的轮廓后处理材质

在把.uasset文件复制到你项目的内容文件夹之后你必须在你的场景中添加一个后处理体积,然后开启Unbound特性。另外别忘记在Blendables下加入后处理效果材质。

泰课在线

筛选内三角(Culling Inner Triangles)

当你在例如人物这样的有内三角(眼睛,嘴巴,手臂或者支撑的盔甲)的模型上使用半透明时,你会注意到在材质上会有一个明显吸引你注意力的高亮,看起来不正确。我们可以使用特定深度功能解决这个问题。

通过将我们的角色渲染到特定深度缓冲器里,我们可以筛选任何在物体外壳后面的像素。当对比场景和特定深度时,我们应加入一点深度调整以防止包括外壳在内的过多像素被筛选掉。材质的建立非常简单:

泰课在线

材质节点——复制这个链接的内容你可以直接将以上节点粘贴到你自己的材质中。(项目源代码在Github上可以找到)。

我在以下的设置中对打开和关闭深度筛选功能做了对比。在右侧的人物中,遮蔽像素显示为红色。我将每个人物渲染了两遍,最终发现了半透明材质根本不能渲染进特定深度的限制(对于情景深度这是正常表现,但是在半透明物体上开启特定深度就不尽人意了)。你可以下载项目代码来看看这究竟是怎么完成的。

泰课在线

对于Switch 我们在一个隐匿的效果中使用了筛选技巧,给予它一个更连贯的“外壳”并且高亮了一个有很多重叠像素的网格物体。

值得注意的是如果多个材质都使用了这个功能那么只有最靠近镜头的物体会被正确筛选。在这张图像中你可以看到如果你有多个网格物体重叠错误就会出现。在使用这项功能时一定要考虑到这点——如果你在很少的或者彼此独立的场景中使用那么就不会有错误了。

泰课在线

该问题可能通过在筛选中加入一个最大深度改变值来得到解决。我没有必要深入讨论这个问题,但是也许在以后当它开始造成实际麻烦时再解决。

多色轮廓效果(Multi-Color Outline Effect)

几个引擎版本之前随着特定深度功能的出现Stencil Index 缓冲器功能也被加入其中。这样我们可以在许多非常厉害的效果之外创建多色轮廓效果。点击此以了解该效果,包括一个可下载的材质。

泰课在线

问题与限制(Issues & Limitations)

特定深度功能不能用于半透明材质。这样的话你需要拷贝物体,然后使用一个简单的遮光材质,开启特定深度功能并关闭Render Main功能。在AnswerHub上查看该问题。

因为缓冲器中充满了使用特定深度的物体,当物体重叠在一起时(一个在另一个后面)根据你如何使用深度数值也许它不会正常工作——如果你使用特定深度来筛选内三角,一个透明的网格物体也许会被全部地筛选出去。一个可能的解决方案是当寻找内三角时添加一个最大深度差以减少错误。