虚幻引擎4中的特定深度
虚幻引擎4在PBR渲染系统之外引入了一个新的深度缓冲器,名为“特定深度”。该缓冲器被应用于编辑器内置的轮廓选择效果、遮蔽网格物体的渲染以及透明度的特定筛选等场景。本文将探讨在材质编辑器中使用这个缓冲器的基本技巧,并解释其在实际项目中的一些特点。
在使用“特定深度”功能来实现预期效果时,请仔细阅读文末的“问题与限制”部分,这能帮你避免数小时的调试困扰,减少不必要的漏洞修复工作。
特定深度基础(Custom Depth 101)
若你从未使用过该功能,可在静态网格物体和骨骼网格物体的渲染设置中,点击开启“Render Custom Depth”。
若要查看这个缓冲器,可点击视界选项中的“Buffer Visualization”。需注意,靠近镜头的物体在该缓冲器中几乎呈黑色,较难发现。
物体轮廓渲染(Rendering Object Outlines)
当需要渲染特殊网格物体(如坠落的同伴、可用的战利品盒子等)的轮廓时,我们需要一个缓冲器来获取它们的剪影,“特定深度”功能便是为此设计的。
当缓冲器存储了物体的深度信息后,我们可以在后处理过程中对临近像素进行取样并进行深度比对。若临近区域有深度信息但无像素信息,就将其涂成轮廓的颜色。
我们还可以采用另一种技巧,即对比特定深度和场景深度,为所有遮蔽物体绘制一个半透明夹层。若特定深度大于场景深度,则使用白色与场景深度进行混合。
综合这两种方法,我们能得到如下处理效果:
我跳过了大部分实现细节,若你有疑问,请在评论区留言。该效果可下载,你可在游戏中随意修改使用。
- 轮廓后处理【下载】
- 带有遮蔽像素上的半透明面纱的轮廓后处理材质
将 .uasset 文件复制到你项目的内容文件夹后,你必须在场景中添加一个后处理体积,并开启“Unbound”特性。另外,别忘了在“Blendables”下加入后处理效果材质。
筛选内三角(Culling Inner Triangles)
当在具有内三角(如人物的眼睛、嘴巴、手臂或支撑的盔甲)的模型上使用半透明材质时,你会注意到材质上会出现明显的高亮,看起来不太正确。我们可以利用“特定深度”功能解决这个问题。
通过将角色渲染到特定深度缓冲器中,我们可以筛选掉物体外壳后面的像素。在对比场景深度和特定深度时,应加入一点深度调整,以防止包括外壳在内的过多像素被筛选掉。材质的创建非常简单:
材质节点——你可以复制这个链接的内容,直接将节点粘贴到自己的材质中。(项目源代码可在 Github 上找到)。
我在以下设置中对比了打开和关闭深度筛选功能的效果。在右侧的人物中,遮蔽像素显示为红色。我将每个人物渲染了两遍,最终发现半透明材质无法正常渲染进特定深度的限制(对于情景深度这是正常表现,但在半透明物体上开启特定深度则不尽人意)。你可以下载项目代码查看具体实现方式。
对于“Switch”,我们在一个隐匿效果中使用了筛选技巧,使其具有更连贯的“外壳”,并高亮显示了一个有很多重叠像素的网格物体。
值得注意的是,如果多个材质都使用了该功能,那么只有最靠近镜头的物体会被正确筛选。从图像中可以看到,若有多个网格物体重叠,就会出现错误。使用此功能时一定要考虑到这一点,若在较少或彼此独立的场景中使用,则不会出现错误。
该问题可能通过在筛选中加入一个最大深度改变值来解决。目前我暂不深入讨论这个问题,待其造成实际麻烦时再进行处理。
多色轮廓效果(Multi - Color Outline Effect)
几个引擎版本之前,随着“特定深度”功能的出现,“Stencil Index”缓冲器功能也被引入。借助此功能,我们除了能实现许多出色的效果外,还能创建多色轮廓效果。点击此处 了解该效果,包括可下载的材质。
问题与限制(Issues & Limitations)
“特定深度”功能不能用于半透明材质。若要使用,你需要拷贝物体,然后使用一个简单的遮光材质,开启“特定深度”功能并关闭“Render Main”功能。可在 AnswerHub 上查看该问题的相关信息。
由于缓冲器中充满了使用特定深度的物体,当物体重叠时(一个在另一个后面),根据深度数值的使用方式,该功能可能无法正常工作。例如,若使用特定深度来筛选内三角,一个透明的网格物体可能会被全部筛选出去。一个可能的解决方案是在寻找内三角时添加一个最大深度差,以减少错误。