EN

# 七、应用性能提升

良好的性能是保证用户拥有自然舒适的VR体验的关键因素。我们提供了一些可以优化奇遇VR应用的方法,供开发者参考。

首先,使用奇遇性能工具来获取CPU/GPU性能指标,确定应用运行效率是受限于CPU计算还是受限于GPU渲染。然后就可以有针对性的进行优化。

提示:性能工具可以直接显示CPU时间。如果CPU时间接近每帧时间(72 FPS意味着每帧渲染13.9毫秒),那么应用程序是受限于CPU的,否则是受限于GPU的。

开发者可参考Unreal官方建议:

https://docs.unrealengine.com/4.27/en-US/SharingAndReleasing/Mobile/Rendering/MobileOptimization/OptimizationandDevelopmentBestPracticesforMobile/ (opens new window)

# 7.1 CPU 优化

# 7.1.1 场景及资源优化

  • 优化脚本,降低代码、算法的复杂度
  • 避免不需要的交互和物理计算
  • 避免视野内放置过多的物体、高多边形模型
  • 尽量共用材质、动画资源
  • 尽量使用压缩纹理格式
  • 尽量使用静态批处理
  • 高三角形计数:建议定位750000到1000000个三角形,这些是每帧总计。从关卡几何体到角色,粒子效果甚至UI元素
  • 复杂面部动画:复杂的面部的动画会增加计算成本,建议仅给定少数几个具有完整细节面部设置的情况下,使用分层骨骼LOD的适当设计的变性骨架可以提供帮助。
  • 布料和头发/毛皮:实时布料物理效果成本高昂,而且在较低分辨率的表现效果非常糟糕。任何真实布料动态计算的物品都应仔细考虑,如果不是非常重要,可以尽量避免类似长而漂移的裙子或者窗帘这种类似的物品。毛发和毛皮效果也是如此,可以采用稍微风格化的方法
  • 茂密的树叶:比较简单的优化就是尽量避免在环境设计中出现茂密的树叶。

# 7.1.2 推荐优化功能

  • 选择Single Pass

# 7.2 GPU 优化

# 7.2.1 场景及资源优化

  • 动态阴影:动态阴影性能开销巨大,每帧计算会给CPU和GPU带来很大的负担,并且经常需要在一帧内多次重新渲染场景。可以通过依赖静态环境光照,获得大幅的性能提升。
  • 全屏效果:比如运动模糊、实时环境光照遮蔽等需要大量的像素吞吐量,谨慎使用这些功能
  • 尽量减少半透明材质的渲染数量

# 7.2.2 渲染优化功能

  • 使用注视点渲染并且选择合适的等级
  • 基于Unreal的MultiView的原生功能的使用

# 7.2.3 推荐的质量配置

  • Pixel Density 1

  • Mobile MSAA 小于4x MSAA

  • HDR : false

# 7.3 功耗优化

奇遇系统统一管控CPU、GPU资源和频率,保障应用的稳定运行。开发者可通过以下途径优化应用的功耗,确保用户体验。

# 7.3.1 场景及资源优化

  • 尽量降低纹理图片尺寸
  • 优化shader性能
  • 优化视频资源,比如编码格式、码率、分辨率等要素

# 7.3.2 推荐的工程配置

Texture Compression:ASTC

# 7.4 性能工具

# 7.4.1 Unreal Session Frontend

分析工具可以实时收集并跟踪QIYU应用的数据,监控性能,可以通过有线以及无线的方式连接QIYU设备。详细使用说明,参考Epic官方文档:

分析工具参考 | 虚幻引擎文档 (unrealengine.com) (opens new window)

# 7.4.2 Unreal Insight

Unreal Insights 工具与Unreal Profiler工具类似,但是稳定性更强。QIYU设备可以通过数据线,与PC端的Unreal Insights 工具建立TCP连接,实时监控QIYU应用的运行状态,迅速发现应用运行过程中的性能瓶颈,适用于优化性能,收集、分析和显示运行时的数据。详细的使用说明,请参考Epic官方文档:

Unreal Insights介绍 | 虚幻引擎文档 (unrealengine.com) (opens new window)

使用方法:

Unreal Insights可执行文件路径:\UnrealEngine\Engine\Binaries\Win64\UnrealInsights.exe

设置:

  1. 安装开发应用程序,需要首次启动游戏,二进制文件才能创建其关联的UE4项目目录 /sdcard/UE4Game/

  2. 通过ADB指令通过USB在设备上建立TCP连接(Unreal Insights监听TCP端口1980) adb reverse tcp:1980 tcp:1980

  3. 编辑文件:UE4CommandLine.txt

    • 在引擎文件夹中找到模板文件 \UnrealEngine\Engine\Build\Android\UE4Game

    • 复制粘贴后,删除末尾的扩展名 UE4CommandLine.txt.template.template

    • 根据需要修改此文件

../../../<ProjectName>/<UProjectName>.uproject /Game/Maps/<MapName> -trace=log,counters,cpu,frame,bookmark,file,loadtime,gpu,rhicommands,rendercommands,object -statnamedevents -tracehost=127.0.0.1 -tracefile=-tracefile=/sdcard/UE4Game/MostRecentTraceCapture.utrace
  1. 将所需文件复制到设备的项目文件根目录。UE4CommandLine.txt

    adb push UE4CommandLine.txt /sdcard/UE4Game//

目录/标志说明:

  1. - 虚幻引擎项目的名称。这将与 设配中的路径匹配。/sdcard/UE4Game/
  2. - UProjectName将与输出二进制文件(由引擎描述)匹配,因此只需使用APK名称或在游戏目录中查找文件即可。.uproject
  3. - 这是可选的,但它允许基于每个映射自定义启动参数。如果知道地图名称,可以将其放在这里。
    • 注意:如果有正在使用的场景,则可以仅为该地图设置追踪,以便追踪开销不会影响常规地图上的其他分析。因为可以将该启动参数文件保留在同一位置,而不必在启动类型之间删除或重命名它。
  4. -trace- 允许自定义要进入的通道以进行跟踪。以下是在分析时使用的一些组合:

    • 最详细/最多开销 log,counters,cpu,frame,bookmark,file,loadtime,gpu,rhicommands,rendercommands,object

    • 主要内容/最小的开销 -counters,cpu,frame,bookmark,gpu

  5. -statnamedevents- 当与选项结合使用时,这将激活更多的CPU计时事件 -trace=cpu。

  6. -tracehost- 具有要连接到的正在运行的Unreal监听实例的主机的 IP 地址 (127.0.0.1)。

  7. -tracefile- 用于在设备上定义要将文件转储到的本地路径,作为实时分析的替代方法。可以将其保留在静态位置,并每次覆盖它,以始终保留最新的跟踪.trace。