科技魔方

研发实战:《Showdown》如何通过AppSW技术提高性能

AR/VR

2022年05月10日

  Meta最初在2021年发布了Application SpaceWarp(AppSW)。这是一种面向开发者的优化技术,允许应用以实际显示刷新率的一半进行渲染(例如72 FPS的一半36 FPS),从而为合适的内容释放额外的计算能力。在Meta的初始测试中,AppSW为应用提供了高达70%的额外计算,而且几乎没有可感知的瑕疵。

  日前,软件工程师扎科·德雷克(Zac Drake)撰文介绍了AppSW是如何提升应用性能。值得一提的是,这属于系列博文,而本文是Part 1。下面是映维网的具体整理:

  《Showdown》是Epic利用UE4开发的PC VR演示内容,并在2014年首次在Connect大会亮相。团队将这个作品移植到Quest2,并希望尽可能保持PC版本的视觉逼真度,同时以一致的90 FPS运行。为了达到这个目标,你必须为移动渲染器显著优化CPU和GPU性能。

  本文介绍了AppSW是如何提高《Showdown》的性能,并演示如何自行分析AppSW和其他渲染设置的影响。

  要遵循本文中的步骤,请通过App Lab下载安装Quest版《Showdown》,而项目源代码请访问GitHub。

  1. AppSW

  AppSW能够帮助你轻松提高性能。它允许应用以半速率渲染,而系统则以全速率合成显示,从而能够每帧为CPU和GPU留出余量。在《Showdown》中,AppSW给了团队足够的空间来处理更多的PC版效果,同时依然达到90 FPS。所述效果包括颜色LUT和更多用于子弹碰撞和爆炸的粒子。

  延伸阅读:Meta(Facebook)分享:什么是Application SpaceWarp

  下面我们来看看AppSW和其他渲染设置是如何影响性能:

  2. OVR Metrics

  在启动《Showdown》之前,请安装OVR Metrics。获取这个工具和其他工具的最简单方法是通过OculusDeveloper Hub(ODH)。

  打开ODH

  选择Downloads下载>Applications应用>OVR Metrics Tool

  点击Downloads下载

  现在配置工具:

  在ODH中,转到Device Manager设备管理器

  在Device Actions设备操作界面启用Metrics HUD

  单击Metrics HUD设置

  在这里,我们可以选择需要显示的数据和图表。如下配置:

  现在启动《Showdown》。

  团队加入了一个名为“头部锁定模式”的功能。它提供的静态camera在分析不同的渲染设置时非常有用。你可以点击右拇指摇杆进入这一模式。它将暂停场景并锁定camera位置和方向,以便渲染的每个帧都相同。要解锁camera并取消暂停时,请再次单击右拇指摇杆。

  锁定要剖析的帧后,按B键打开渲染设置菜单。通过右扳机键(向上)和右握把键(向下)选择菜单项。按A键切换所选菜单选项。这包括:

  AppSW(开/关)

  CPU/GPU level(1/2/3/4)

  FFR(关闭/低/中/高/最高)

  帧率(72/80/90)

  像素密度(1.0/0.9/0.2)

  Tonemap Subpass(开/关)

  MSAA(1/2/4/8)

  渲染设置菜单

  再次按B键隐藏渲染设置菜单。

  OVR Metrics HUD

  在这个屏幕截图中,你可以看到在关闭和再次打开AppSW时FPS和GPU利用率的变化。请注意,启用AppSW时,OVR Metrics将报告一半的目标帧率。

  你可以仔细观察菜单中的每个选项是如何影响CPU和GPU的利用率。你同时可以尝试120 FPS的支持,看看它如何影响各种渲染设置的性能。

  要在头显中以120 FPS速度运行,请执行以下操作:

  点击Quest系统菜单的时钟以打开Quick Settings快速设置

  单击右上角的Setting设置按钮

  选择Experimental实验性功能

  打开“120 Hz Refresh Rate/120 Hz刷新率”

  要在自己的应用程序中切换相同的渲染设置,可以使用等效的adb命令:

  ASW:

  adb shell “am broadcast -a android.intent.action.RUN -e cmd ‘r.Mobile.Oculus.SpaceWarp.Enable 1’

  CPU/GPU level:

  adb shell setprop debug.oculus.gpuLevel 3

  adb shell setprop debug.oculus.cpuLevel 3

  FFR:

  adb shell setprop debug.oculus.foveation.dynamic 0

  adb shell setprop debug.oculus.foveation.level 2

  帧率:

  adb shell setprop debug.oculus.refreshRate 90

  像素密度:

  adb shell “am broadcast -a android.intent.action.RUN -e cmd ‘vr.PixelDensity 1.0’”

  Tonemap subpass:

  adb shell “am broadcast -a android.intent.action.RUN -e cmd ‘r.Mobile.TonemapSubpass 0’”

  MSAA:

  adb shell “am broadcast -a android.intent.action.RUN -e cmd ‘r.MobileMSAA 1’”

  注意:所述命令可以添加到ODH的自定义命令部分。

  有关Oculus系统属性的更多信息,请访问这一页面。

  3. Perfetto

  通过OVR Metrics,我们能够看到AppSW的性能优势。接下来,我们可以通过Perfetto看看渲染阶段。

  要使用Perfetto收集渲染阶段跟踪数据,需要修改默认配置。

  在ODH打开Performance Analyzer性能分析器

  点击右上角Record 录制按钮旁边的“…”,并选择“Perfetto Settings”。

  选择Custom自定义

  用下面字符替换现有的linux.ftrace block :{ "config": { "name": "linux.ftrace", "ftraceConfig": { "ftraceEvents": [ "sched/sched_switch", "power/suspend_resume", "sched/sched_wakeup", "sched/sched_wakeup_new", "sched/sched_waking", "sched/sched_process_exit", "sched/sched_process_free", "task/task_newtask", "task/task_rename", "ftrace/print" ], "atraceCategories": [ "gfx", "view", "webview", "camera", "dalvik", "power" ], "atraceApps": [ "com.oculus.samples.ShowdownQuest" ] } } },

  请注意atraceApps部分中的package identifier。你需要在这里添加其他需要跟踪的应用程序。

  单击保存

  在设备上启动应用程序

  单击Performance Analyzer性能分析器中的Record记录按钮

  在游戏中执行你想要设定的任何动作(例如关闭/打开AppSW)

  点击Stop停止按钮

  一旦Perfetto浏览器窗口打开,你将需要开始关注一定的trace。

  注意,其中一些已列出两次。选彩色的,不要选绿色的。

  com.oculus.samples.ShowdownQuest

  RenderThread

  RHIThread

  GameThread

  FenceChecker

  com.oculus.vrruntimeservice

  OVR::TimeWarp

  下面是在AppSW关闭和打开时Perfetto跟踪数据的两个屏幕截图。请注意,启用AppSW后,帧间时间增加了一倍。尽管我们由于一定的开销而不能使用所有这些时间,但它确实为CPU和GPU处理提供了更多的时间。

  AppSW关闭

  AppSW开启

  以上就是Application SpaceWarp对《Showdown》的影响。在下一篇博文中,我们将介绍Quest版《Showdown》中使用的众多其他优化,并描述如何以及何时使用它们。

+1

来源:映维网

推荐文章