自有游戏
自有游戏因为有源码,所以分析工具比较多。
RenderDoc
RenderDoc最早是CryEngine的一个图形调试工具,现在开源了。这个工具主要用在Windows平台,mac平台还在开发之中,目前进度比较慢。工具本身可以深入分析DirectX 11的图形渲染,记录API调用,记录渲染状态,记录渲染资源等等,功能非常全面,使用简洁。
虽然工具也可以支持OpenGL,但是对OpenGL的支持还不够成熟,所以主要还是用来对DirectX进行分析。
这个工具已经集成到了Unity Editor的Windows版本,可以直接在编辑器里使用。
XCode Instruments
XCode自带的图形调试工具已经非常好用了,如果是开发iOS游戏,XCode自带工具已经能够满足需求。
Unity开发的游戏,导出成iOS工程之后,一样也可以用XCode的图形调试功能进行调试。
Visual Studio Frame Debugger
VS自带的图形调试工具,功能也很强大,当然也只支持Windows平台。因为现在的游戏开发主要集中在iOS和Android的移动平台,所以用到的不多。
Unity Frame Debugger
Unity自带的图形调试工具。这个功能就比较弱了,不过因为集成在了Unity中,打开很方便,所以偶尔也能用下,看看大致的渲染步骤。
第三方游戏
第三方游戏没有源码,但是有一些GPU工具可以辅助查看渲染状态,分析渲染过程。这些工具一般都是GPU的硬件提供商负责开发和维护的,也没有开源版本可以使用。
PVRTrace
PVRTrace是Imagination Technology提供的GPU分析工具。安卓手机上的使用步骤如下:
测试的安卓手机需要使用Imagination Technology的GPU。虽然在苹果的手机上,SGX系列的芯片用的很多,但是安卓平台上SGX用的并不是特别多。亚马逊的Kindle Fire HD用的是SGX芯片组
安卓手机需要Root。可以使用一键root工具进行root操作
手机安装PVRHub
在PVRHub中开启Trace,选择目标应用之后PVRTrace就会开始记录渲染的数据
渲染的结果数据是保存在手机上的,需要使用adb将渲染数据pull到本地
打开PVRTraceGUI,导入渲染数据
到此为止就可以开始分析数据了
但是最终并没有能过成功使用PVRTrace工具,遇到了下面这些问题:
我开始测试的手机是小米2,GPU并不是SGX系列,而是高通的Adreno系列。PVRTraceGUI的Image窗口无法显示渲染的framebuffer。
换成Kindle Fire HD之后,发现Kinde的root不太好弄,失败了几次,就不尝试了
这些问题总结起来,其实也就是没找到合适的root过的SGX GPU的设备。并不是工具本身的问题。
Adreno Profiler
Adreno Profiler是高通的GPU渲染调试工具,功能上类似PVRTrace,提供了渲染API记录和回放分析的功能。这个工具当然也是针对高通的芯片组开发的。
我手上正好有小米2的设备,于是测试了Adreno Profiler,但是最终也没有成功。
Adreno Profiler基于mono制作,所以推荐在windows平台使用,我也是在windows平台使用的,没有测试mac版本。使用之前需要安装Android SDK,因为工具需要使用SDK里的adb。
需要测试游戏有联网功能,否则无法连接,PerfHud ES也有同样的要求。
满足这些前提条件之后,Adreno Profiler成功启动了,并且能够成功连上手机。但是使用球球大作战测试,发现在抓取了一帧数据分析,Adreno Profiler出现C#报错。最终也没能解决这个问题。
Adreno Profiler确实是所有的调试工具里设置起来最简单的,但是实际使用却有bug。Bug导致了无法使用Adreno Profiler。
PerfHud
PerfHud是nVidia的图形分析工具。nVidia的工具功能强大全面,之前也用过,在桌面平台应用很广。
但是由于nVidia的GPU,即Tegra系列,在手机平台的市场占有率并不是太高,所以一直没有机会能在移动平台使用这个设备。
PerfHud ES集成在了Nvidia CodeWorks中,需要下载CodeWorks才可以使用。CodeWorkd会自动下载齐全的安卓开发环境,所以如果机器上还没有开发环境,使用CodeWorks一键搭建环境是非常省力的。不过CodeWorks下载的IDE还是Eclipse,已经过时了。
启动的时候,PerfHud ES可能会找不到adb,需要在启动的时候指定adb的路径