虚幻引擎4引入了新的深度缓冲区及其PBR渲染系统。它称为“自定义深度”,可用于诸如编辑器内置的选择轮廓,遮挡网格的渲染或自定义透明度的效果。我将在材料编辑器中讨论使用此缓冲区的一些基础知识,并解释我在自己的项目中使用该缓冲区的一些功能。
使用“自定义深度”时,请务必仔细阅读页面底部的“问题与限制”,以免您费时费力和不必要的调试。
自定义深度
目录
101
对于以前从未使用过此功能的用户,可以在“详细信息”面板中名为“渲染自定义深度”的“渲染”类别下为静态和骨架网格物体启用“自定义深度”。
要查看此特定缓冲区的渲染输出,请转到“编辑器”视口的viewport-options中的“缓冲区可视化”。请注意,靠近相机的物体几乎是黑色的,可能很难看清!
虚幻编辑器中的自定义深度可视化器
渲染对象轮廓
为了在特定的网格物体周围绘制轮廓(例如下落的盟友,可用的战利品容器等),我们需要一个缓冲区来获取它们的轮廓。自定义深度对此非常适合。
使用填充有我们对象深度信息的缓冲区,我们可以通过在后期处理中对相邻像素进行采样来执行简单的深度比较。如果邻居有深度信息,但像素本身没有-我们将其着色为轮廓线颜色。
通过将自定义深度与SceneDepth进行比较,我们可以使用另一种技术为所有被遮挡的几何图形绘制半透明的叠加层。如果CustomDepth大于SceneDepth,则将白色色调与SceneColor混合在一起。
结合使用这两种技术会产生以下后期效果:
我跳过了大多数实施细节–如果您有任何问题,请随时在下面的评论部分中提问!我已经提供了该效果供下载,可以随时在您的游戏中进行修改和使用。(请检查新段落以获得此效果的更详细和高级的版本!)
新增:多色轮廓效果
几个引擎版本之前,“模板深度”缓冲区与“自定义深度”一起添加。这使我们能够创建许多其他有趣的新花样的彩色轮廓!单击此处以了解此新效果及其使用方法。
剔除内部三角形
在具有内部三角形(眼睛,嘴巴,手臂或一点点盔甲穿过)的角色之类的模型上使用透明度时,您会在材质中看到引人注目的突出亮点,并且看起来根本不正确。我们可以使用“自定义深度”解决此问题。
通过将角色渲染到“自定义深度”缓冲区中,我们可以剔除网格外壳后面的任何像素。比较“场景”和“自定义”的深度时,应添加一个小的深度偏移,以防止包括外壳在内的太多像素被剔除。为此的材料设置非常简单:
材质节点 – 复制此url内容,您可以直接将上述节点粘贴到您自己的材质中。(项目源可在GitHub上获得)
我在下面的设置中比较了启用和禁用的深度剔除。右侧的字符以红色显示所有被遮挡的像素。我将每个角色TWICE渲染为围绕一个限制工作,即透明材质根本无法渲染到自定义深度(这是SceneDepth的正常行为,但是在应用了透明度的网格上显式启用“自定义深度”时,这是不希望的)。确切地看到这是怎么做的。注意:从4.20开始,您可以通过启用材料中的选项“允许自定义深度写入”来渲染自定义深度的半透明材料。这消除了对第二个网格组件的需求,这是一个巨大的工作流程改进。
在我们的游戏《 Switch》中,我们在隐身效果上使用了这种剔除技术,使其具有更加一致的“外壳”,并在具有很多重叠像素的网格上突出显示。
重要的是要知道,如果多种材料使用此技术,则只有最靠近相机的物体才被正确剔除。在此图像中,您可以看到如果多个网格重叠,则会发生错误。在考虑使用此技术时应考虑到这一点–如果您很少使用此效果或在一致的隔离方案中使用它可能永远不会成为问题。
可以通过在剔除时添加最大深度增量来解决此问题。我没有必要进一步探讨这个问题,但是将来在它引起实际问题时可能会再次讨论。
其他用途
如前所述,在我们的游戏Switch中,我们使用了“自定义深度”来实现许多功能,其中一个功能是使用X射线材料将玩家暴露在墙后–我在下面添加了一个简短的视频,以早期了解概念验证。
问题与局限性
- 对于半透明材料,您需要在材料中启用“允许自定义深度写入”!(这仅适用于4.20+,我尚未确认确切添加的时间)
- 由于缓冲区使用“自定义深度”填充了所有对象,因此当您具有多个重叠的网格物体(一个在另一个网格物体之后)时,该缓冲区将不起作用,具体取决于您使用深度值的方式–如果您使用“自定义深度”来覆盖透明网格物体,则可能会被完全剔除剔除内部三角形。一种可能的解决方法是在查找内部三角形时增加最大深度差以减少误差。