贴花Actor用户指南

指导如何使用延迟贴花actor。

Windows
MacOS
Linux

延迟贴花提供了更好的性能和更方便的维护。写入GBuffer而不是重新计算照明有几个好处:

  • 许多光源的性能变得更加可预测,因为所有光源都使用相同的代码路径,所以对光源计数或类型没有限制。

  • 操作屏幕空间遮罩还可以实现一些在其他情况下很难实现的效果(比如湿层)。

贴花通过在贴花影响区域周围渲染一个方框来渲染。

将贴花添加到关卡

向场景添加贴花的最简单方法是在 内容浏览器(Content Browser) 中选择合适的贴花材料,然后在视口中 右键单击,并从上下文菜单中选择 放置Actor(Place Actor)。然后可以使用变形工具调整贴花的大小和方向。

Decal_1.png

调整大小、平铺和偏移

创建贴花后,您可以使用平移和旋转控件对其进行定位和定向。

Decal_2.png

非等分缩放控件控制贴花卷的宽度、高度和远平面距离。

延迟贴花属性

延迟贴花只有几个属性:

项目

说明

材质(Material)

此属性保留了将用作贴花的材质。

排序顺序(Sort Order)

此属性允许用户设置一个值来控制多个贴花在堆叠时的排序方式。较高的值在顶部渲染。

设置排序值时,请小心操作。在太多不同的贴花上设置太多的排序值会使这些贴花无法按状态排序,这可能会损害性能。

材质设置

DecalBlendMode 设置定义了如何将材质属性(漫反射、镜面反射、法线、不透明度...)应用到GBuffer。

不透明度用于混合贴花作用。一个高效的贴花只需要处理少量的GBuffer属性。 我们当前优化的案例由以下其他模式表示:DBM_DiffuseDBM_SpecularDBM_EmissiveDBM_Normal

项目

说明

半透明(Translucent)

它将混合完整材质,更新GBuffer,不适用于烘焙光照。

染色(Stain)

它将调制基色,混合其余部分,更新GBuffer,不适用于烘焙光照。

法线(Normal)

它将仅混合法线,更新GBuffer,不适用于烘焙光照。

自发光(Emissive)

它仅适用于附加自发光。

DBuffer_半透明颜色、法线、粗糙度(DBuffer_Translucent Color, Normal, Roughness)

它适用于非金属,也可以放入DBuffer中用于烘焙光照。如果没有连接法线,那么它将成为DBM_TranslucentNormal。

DBuffer_半透明颜色(DBuffer_Translucent Color)

它适用于非金属,也可以放入DBuffer中用于烘焙光照。

(DBuffer_半透明颜色、法线)DBuffer_Translucent Color, Normal

它适用于非金属,也可以放入DBuffer中用于烘焙光照。如果没有连接法线,那么它将成为DBM_DBuffer_Color。

DBuffer_半透明颜色、粗糙度(DBuffer_Translucent Color, Roughness)

它适用于非金属,也可以放入DBuffer中用于烘焙光照。

DBuffer_半透明法线(DBuffer_Translucent Normal)

它适用于非金属,也可以放入DBuffer中用于烘焙光照。

DBuffer_半透明法线、粗糙度(DBuffer_Translucent Normal, Roughness)

它适用于非金属,也可以放入DBuffer中用于烘焙光照。如果没有连接法线,那么它将成为DBM_DBuffer_Roughness。

DBuffer_半透明粗糙度(DBuffer_Translucent Roughness)

它适用于非金属,也可以放入DBuffer中用于烘焙光照。

(实验性)体积距离函数(Volumetric Distance Function (experimental))

它将根据LightVector在不透明度中输出一个有向距离。

DBM_ScreenSpaceMask 比较特殊,因为它可以影响一个特殊的遮罩通道,即SSAO当前使用的通道(环境遮挡)。这使贴花能够覆盖或淡化某些区域的作用。

DBM_DiffuseSpecularEmissive 是影响多个GBuffer通道的模式。

注意,材质混合模式也会影响GBuffer值的混合方式。因此,可以将漫反射的颜色相乘。

您可以使用GBuffer视图模式检查逐像素存储的GBuffer值。

贴花本地位置是0到1范围内的第3个位置。纹理UV给出了x和y分量。如果您需要z分量,您可以连接一个CameraVector节点来获得所有3个矢量分量。

性能

受贴花影响的对象的网格体复杂性不影响性能。贴花的性能取决于着色器的复杂性和屏幕上的着色器边框的大小。

我们可以进一步提高每个贴花的性能。在理想情况下,贴花的边框较小,以获得更好的像素性能。这可以手动实现。虽然自动化的方法是可行的,但是优秀的设计人员也可以通过调整布局来进一步提高性能。

视图模式 ShaderComplexity(编辑器UI或"viewmode ShaderComplexity")可以用来查看对像素着色成本的影响,它使用一个像素着色器成本进行估算,并在多个贴花重叠时累加。 目前,贴花遮罩功能在这方面没有效果(由于使用了模板硬件特性,遮罩部件应该有较低的固定成本)。 以下显示了没有贴花时(左图)、带有贴花时(右图)、在法线渲染模式下时(上图)以及启用ShaderComplexity时(下图)的场景:

DecalShaderComplexity.jpg

颜色越深,表示这些像素的性能成本越高。这些信息可以用来优化正确的着色器,去除几乎不可见的贴花或更有效地放置它们。

当前局限

  • 我们目前只支持延迟贴花,而且它们只对静态对象有效。

  • 法线混合当前不能围绕对象。

  • 流送尚未连接,所以请确保纹理没有流送。

  • 遮罩贴花(不影响其他对象)没有完全实现。

2x2块瑕疵修复

贴花的边缘可能有2x2像素块瑕疵,如下面的屏幕截图所示。

2x2_artifacts.bmp

这正是节点"贴花导数(Decal Derivative)"的用武之地。必须小心使用这个节点,因为它对性能有很大的影响。它返回各向异性纹理过滤所必需的贴花的默认纹理坐标在X轴和Y轴上的导数,但计算方法与使用硬件的默认节点和DDX/DDY节点不同,以避开这个2x2像素块瑕疵。

Decal_Derivative.png

使用它可以修复受益于它的贴花上的瑕疵。

2x2_no_artifacts.bmp

当前局限

  • DecalMipmapLevel不支持自定义UV,但您可以修补它的输出。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback