移动设备性能指南

概述

以下是有关如何设置内容以便最优化移动平台性能 的注意事项与建议。这些事项按照最严重到最不严重的顺序排列。

  • 务必在设备上运行之前,先构建光照。

  • 务必禁用大多数后处理功能。实际上,可用于 iPad4 的功能只有 Temporal AA 和胶片设置,包括装饰图案。默认状态下,会启用一系列极其耗内存的功能,如 Bloom 和 DOF,因为 PC 和移动设备之间具有相同设置。在使用默认设置的情况下,后处理功能很容易就会消耗 60+ms。我们希望在更高端设备上使用 Bloom、DOF 和光束。 show postprocessing (显示后处理)可用于设备上切换 PP,并查看其消耗内存量。

  • 务必正确设置预计算的可视性。为此,您需要在玩家走动的位置附近放置 PrecomputedVisibilityVolumes,并构建光照。您必须确保构建光照和运行游戏时使用相同的 P 等级(亦自己不会构建子等级)。可通过在设备上输入 stat initviews 或在预览器中确认该设置是否起效,并确保 Statically occluded primitives > 0。使用 r.ShowPrecomputedVisibilityCells 1 可使编辑器中的单元可视化。

  • 谨慎使用屏蔽且半透明的材料,只在覆盖小部分屏幕的地方使用。 iOS 设备非常适合对不透明表面着色,因为在大部分情况下,它们只对每个像素着色一次。但是,对于屏蔽和半透明材料,必须对每个层都进行着色。通过过度绘制,可方便地使一帧的总 GPU 时间达到两倍以上。在移动预览器中使用着色器复杂度查看模式查看热点。

  • 在任何视图下,整个场景的描绘调用应为 <= 700。蔽塞性较差的区域,如横向纵览的风景,对此将是一个极大的挑战。在设备上使用 stat openglrhi,以及在 PC 上的 ES2 预览器中使用 stat d3d11rhi 可查看效果。

  • 在任何视图下,整个场景的三角形计数应为 <= 500k。必须达到这个水平,iPad4 和 iPad Air 上的多边形计数才能达到 30fps。在设备上使用 stat openglrhi,以及在 PC 上的 ES2 预览器中使用 stat d3d11rhi 可查看效果。

  • 使用材料时,应尽量少用纹理查询和指令。可用的纹理采样器有 5 个,但是如果全部使用,则材料将消耗相当多内存。现在,可使用 PC 指令计数来进行优化,并使用 ES2 预览器着色器复杂度来查看总内存消耗量。

  • 在材料中只能使用独立纹理攫取。这就是说,不能以任何形式操控像素着色器(基本颜色和粗糙度等),例如缩放。可改用新的 CustomizedUVs 功能在顶点着色器中执行缩放。某些特殊功能(如环境映射)需要在 UV 上加上数学函数,在特殊情况下这样做也没问题。

  • 尽量采用正方形纹理,因为它们消耗的内存量较小,尺寸应始终使用 2 的次方(512, 1024, 2048)。在 ES2 预览器中使用 listtextures 来查看所有纹理所占用的内存情况。

性能层级

UE4 支持在移动设备上使用各种光照功能。使用这些功能将影响系统性能,可能会导致游戏在速度较慢的移动设备上运行效果差。如果可混合和匹配大多数 UE4 移动光照功能,则将这些功能归类到以下等级会比较有用。在构建移动游戏时,您应根据游戏所需的图形质量和支持的设备类型来决定使用哪些功能。可在 iOS 开发 and Android Development 下的设备兼容性页面中,查看 Epic 已测试过的设备以及我们认为最合适的层级的详细说明。

LDR(低动态范围)

低动态范围(LDR)模式是 UE4 支持的最高性能层级,推荐用于不需要光照或后处理功能的游戏。若要使用此模式,您必须在 项目设置编辑器 的“渲染”部分中位启用项目的 Mobile HDR 设置。

Advantages

  • 这是移动设备上最快,也是间接消耗最低的模式。该模式允许您的游戏即使在较慢的移动设备上也能流畅运行。

  • 仍然对“材料”编辑器提供完全访问,以定义定制着色器,甚至执行简单着色以模拟光照。

Limitations

  • 场景颜色写入到伽马空间,每个颜色通道固定在范围 [0,1] 之内。

  • 半透明原色在伽马空间中调色。在大多数情况下,这要求您编写的半透明纹理和材料要不同于 HDR 或普通 PC 游戏。

  • 在此模式中,不可使用后处理功能。

Recommendations

  • 确保将所有材料的着色模型设置为不点亮,以获得最高性能。

  • 请勿在场景中放置灯光,或者依赖光照以获得最佳性能。

  • 在材料的顶点着色器中考虑执行尽量多的操作。要达到上述目的,可启用定制的 UV,将节点连接到定制 UV 上,然后使用纹理坐标节点在像素着色器中读取它们。

基本光照

在此层级中,可利用静态光照和完全粗糙材料创建具有有趣光照的场景,同时使性能最大化,以便在更大范围移动设备上使用。

Advantages

  • 可使用静态光照和全局照明功能。

  • 全 HDR 管道,可使用色调映射等后处理功能。

  • 在线性空间内调色半透明,使您可像任何其他 UE4 游戏一样编写内容。

Limitations

  • 由于您将所有材料标记为完全粗糙,因此材料上就不会产生有趣的镜面反射。

  • 如果您还选择禁用光线贴图方向性,普通贴图不会有影响。

Recommendations

  • 使用完全粗糙标记集编写所有材料。

  • 考虑在材料中禁用光线贴图的方向性,以提高性能。

  • 在贴图中只能使用静态光线。

  • 禁用 bloom 和消除锯齿。还要遵照胶片和其他颜色的基本设置。有关详情,请参见 移动后处理

全 HDR 光照

在此层级中,您可利用 UE4 中可用于移动端的大多数 HDR 光照功能,以及某些后处理功能。使用这些功能需求用较多的内存性能来换取高品质光照功能。

Advantages

  • 可使用静态光照和全局照明功能。

  • 全 HDR 管道,可使用某些后处理功能。

  • 在线性空间内调色半透明,使您可像任何其他 UE4 游戏一样编写内容。

  • 逼真的表面镜面反射,支持各种粗糙度。

  • 完全支持普通贴图表面,允许使用有趣的表面细节,也不会在网格中加入许多多边形。

Recommendations

  • 考虑启用 bloom 以充分利用 HDR 光照管道。

  • 逼真的镜面反射与 HDR 光照相结合,可导致高光混叠。您应充分利用粗糙度功能的普通贴图,以帮助减少由于普通贴图中的高频信息导致的高光混叠。您也可在后处理量中考虑启用消除锯齿,以帮助减少这种现象的发生。

  • 有效放置放射捕捉,以获得最佳效果。

  • 在场景中只使用静态光线。

全 HDR 光照,每个像素都带有来自太阳的光线

在此层级中,您可利用 UE4 中可用于移动端的所有 HDR 光照功能。此层级与“全 HDR 光照”层级相同,具有相同的优势与推荐,除了单方向光线的渲染质量更高。

Advantages

  • 全 HDR 光照层级的所有功能和优势。

  • 基于每个像素的散射和镜面光照适用于单方向光线。

  • 高品质预计算距离为单方向光线提供阴影。

Recommendations

  • 全 HDR 光照层级的所有推荐都适用于此处。

  • 在场景中只能使用静态光线,除了对于单方向光线,应将静态光线设为静止。

着色器复杂度查看模式

您可在 PC ES2 预览器中,使用着色器复杂度查看模式来查看材料成本。若要使用该模式, 只需在 PC ES2 预览器的控制台中输入 viewmode shadercomplexity。以 SM5 着色器复杂度为例, 绿色代表性能良好,亮红色表示内存消耗非常大,白色或粉色表示内存消耗极大。以下是来自 移动端案例展示的一些示例:

1.png

2.png

3.png

柱子材料在这里相当耗内存,半透明体积贴片也很耗内存。在此场景中,我让他们把透明贴片移除,因为他们太消耗内存了。

此处的柱子很耗内存,因为他们使用了全部 5 种纹理查询,还加了许多层叠。否则,这些场景只够使用 30fps。

此处的树使得像素极其消耗内存。如果玩家离得更近一些,或者用该材料覆盖了他的屏幕,则会极大地消耗内存。

移动内容缩放系数

移动内容缩放系数是一种缩放项目分辨率的方式,以便最佳匹配用于查看项目的移动设备的屏幕分辨率。 您可创建并存储多个设备的配置文件,方法是在项目配置文件夹中新建一个名为 DefaultDeviceProfiles.INI 的 .INI 文件。 在这个文件内,您可通过输入以下命令来指定对项目分辨率所作的更改。

 r.MobileContentScaleFactor = 

在下图中,您可看到使用上述命令对移动内容缩放系数进行设置的示例。

T_MCF_INI_File.png

上图截取自 UE4 Tappy Chicken 项目,显示了在各种移动设备上游戏时 Tappy Chicken 项目分辨率的变化。 文件上部用于处理 iOS 设备的分辨率缩放,文件下部用于处理安卓设备的分辨率缩放。 请务必注意每个 r.MobileContentScaleFactor 的后面都带有一个数字。 这个数字用在命令后面,用于决定应将项目分辨率放大还是缩小。

iOS 的移动内容缩放系数

在对 iOS 设备使用移动内容缩放系数时,在 r.MobileContentScaleFactor 后面输入以下数字将产生以下结果。 请注意:任何非 0 缩放系数的实际分辨率都将被修正,以匹配屏幕纵横比,并固定至原始分辨率。

iOS 缩放系数直接与苹果的缩放系数系统相关。

r.MobileContentScaleFactor 0.0:将使用设备的原始分辨率。

r.MobileContentScaleFactor 1.0:在 Retina 设备上采用非 Retina 分辨率。

r.MobileContentScaleFactor 2.0:在 iPhone 5S 和 iPad Air 等设备上采用全原始分辨率。

r.MobileContentScaleFactor 3.0:iPhone 6+ 的全原始分辨率。

安卓的移动内容缩放系数

在对安卓设备使用移动内容缩放系数时,在 r.MobileContentScaleFactor 后面输入以下数字将产生以下结果。 请注意:任何非 0 缩放系数的实际分辨率都将被修正,以匹配屏幕纵横比,并固定至原始分辨率。

r.MobileContentScaleFactor 0.0:将使用设备的原始分辨率。

r.MobileContentScaleFactor 1.0:将尝试为您提供横向 1280 x 720 分辨率,纵向 720 x 1280 分辨率。

r.MobileContentScaleFactor 2.0:将尝试为您提供横向 2560 x 1440 分辨率,纵向 1440 x 2560 分辨率。