研发实战:《Showdown》如何通过AppSW技术提高性能
撰文介绍了AppSW是如何提升应用性能
(映维网Nweon 2022年05月09日)Meta最初在2021年发布了Application SpaceWarp(AppSW)。这是一种面向开发者的优化技术,允许应用以实际显示刷新率的一半进行渲染(例如72 FPS的一半36 FPS),从而为合适的内容释放额外的计算能力。在Meta的初始测试中,AppSW为应用提供了高达70%的额外计算,而且几乎没有可感知的瑕疵。
日前,软件工程师扎科·德雷克(Zac Drake)撰文介绍了AppSW是如何提升应用性能。值得一提的是,这属于系列博文,而本文是Part 1。下面是映维网的具体整理:
《Showdown》是Epic利用UE4开发的PC VR演示内容,并在2014年首次在Connect大会亮相。团队将这个作品移植到Quest 2,并希望尽可能保持PC版本的视觉逼真度,同时以一致的90 FPS运行。为了达到这个目标,你必须为移动渲染器显著优化CPU和GPU性能。
本文介绍了AppSW是如何提高《Showdown》的性能,并演示如何自行分析AppSW和其他渲染设置的影响。
要遵循本文中的步骤,请通过App Lab下载安装Quest版《Showdown》,而项目源代码请访问GitHub。
1. AppSW
AppSW能够帮助你轻松提高性能。它允许应用以半速率渲染,而系统则以全速率合成显示,从而能够每帧为CPU和GPU留出余量。在《Showdown》中,AppSW给了团队足够的空间来处理更多的PC版效果,同时依然达到90 FPS。所述效果包括颜色LUT和更多用于子弹碰撞和爆炸的粒子。
下面我们来看看AppSW和其他渲染设置是如何影响性能:
2. OVR Metrics
在启动《Showdown》之前,请安装OVR Metrics。获取这个工具和其他工具的最简单方法是通过Oculus Developer 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》中使用的众多其他优化,并描述如何以及何时使用它们。