frame rate
frame time

控制台指令 Console command

a low-level general system used to query metrics of the engine at runtime
access to diagnostic information

在pc上可以直接输入命令
在quest上跑app时候,链接pc,然后输入

  1. adb shell "am broadcast -a android.intent.action.RUN -e cmd 'stat unit'"

image.png
UE4会执行与现有函数匹配的函数
上述这条会发送 ‘stat unit’到应用控制台

ADB Command Prompt Consideration: if you have a typo(输入错误) , 系统会自动忽略命令,而不告诉你为什么,。

Stat Unit

image.png
provide frame time information in milliseconds.
在UE4中输入这个命令,会提供5个信息

  • Frame:总的帧数时间
  • Game:主线程,游戏逻辑、物理、网络、和BP都在这里
  • Draw:渲染线程的帧数时间
  • GPU:GPU完成一frame所需要的时间
  • DynRes:

Stat Unitgraph

与上述一样,但是提供graph,前10s的内容。
image.png

Stat FPS

以毫秒为单位的

  • FPS
  • Frame Time
    • 使用frame time 更好,因为它是线性的

Stat Game

与游戏线程相关的CPU时间
image.png

Stat Engine

可以很好地查看

  • 网格体三角形数量
  • 帧数时间
  • 帧同步时间:game thread time wait for render thread complete

image.png

Stat Scenerendering

CPU渲染线程的成本
image.png
ExclusiveMax相加应该与stat unit的Draw Time相等

Stat GPU

显示GPU 的工作成本。它是与指定标签的UE系统相对于的所有绘制成本,也就是GPU操作计算的成本
image.png
quest并不支持,因为架构不支持准确地为单个绘制调用分配持续时间
当项目被设置为使用Vulkan 作为图形API时,这个命令会给出每次通过的时间

Profile GPU

捕获GPU渲染时间,它会根据操作和操作所属的系统进行注释和分组,是非常好用的功能。
image.png

可视化选项

UE4 Editor 是一个 what you see is what you get 的实时渲染引擎和编辑器,WYSIWYG editor

这可以方便我们快速迭代,但是,这并不能替代在设备上的实际测试,尤其是性能测试

修改预览模式

Setting - Preview Rendering Level - Shader model 5 (Rift)/ Android ES3.1(Quset)

视图模式

动态光照

(Shader model 5 only)

View Mode(Lit) - Optimization Viewmodes - Light Complexity
它会估计所有动态光照(设置为可移动光的移动部分)的像素计算开销
不建议使用这个可视化选项估计Quest的光照性能,因为两个平台关于光照计算的方式很不同
image.png

着色器

View Mode(Lit) - Optimization Viewmodes - Shader Complexity
它会计算为每个像素在执行的像素着色器指令的总数,没有光照下
索然听起来很准确但是实际上并不能准确表示性能,
image.png

使用UE前端

找到文件目录

  • Engine - Binaries - Win64- UnrealFrontend.exe

找到Session Front end - MySessions
高亮应用,然后找到Profile,点击Data Capture
再次点击停止捕捉、
image.png
然后获得所有UE可以收集的metrics

image.png

UE之外的工具

更加强大,但是也更加难以使用

Systrace

是Android SDK附带的通用CPU性能工具
位置:NVPACK - android-sdk-windows-tools-monitor.bat

image.png
在enable application traces from 设置想要追踪的app
然后选择参数
note
设置一个比较大的trace buffer size ,比如10000(kb),因为追踪的输出可能非常大
如果缓冲区不够大,部分输出就会被丢失,而丢失的信息如果对于追踪流程很重要,周四hi偶就会跳出一个错误提示

追踪结束会生成trace.html。用chrome打开,
image.png

要追踪GPU,遵循下列步骤
Oculus Documentation - GPU Systrace

  1. adb shell ovrgpuprofiler -e

在游戏开始之前使用这个指令

Render Doc 🚊

Render Doc 是一款开源的软件,在图形学程序员中很受欢迎,
它可以使用OpenGL,Vulkan或者DirectX 来配置Rigt和Quest的应用程序
对于Rift
UE中可以使用插件RenderDoc
点击右上角就可以自动capture

为了使RenderDoc通过Android连接到UE4的程序,确保项目设置中,for distribution没有被标记。

接下来一些细节的说明,等到我的图形学有所进展再来补充笔记。

优化性能工具的使用考虑

消除可能导致性能差异的外部因素

Dynamic Clock System

动态时钟系统

  • 如果你的app不满足帧率,默认会增大CPU和GPU的时钟频率
  • 如果app表现良好而当前频率过高时会下调时钟频率

使用adb命令锁定

  1. adb shell setprop debug.oculus.cpuLevel 4
  2. adb shell setprop debug.oculus.gpuLevel 4

这是Quest的最大值

锁定之后就可以从分析工具中获得一致的读数,因为quest默认状态下的运行时钟频率是不断变化的,

HMD position

锁定后不会影响渲染
image.png

How a tool collects/presents data

熟悉工具是如何收集和显示数据的

有些工具会对数据进行修改,以方便读取,。但也会降低精度
比如,有时候Gmae Frame Time显示的是一段时间的平均值因为屏幕快速显示是难以看清的。