首发于游戏+
Graphic Debugger工具大杂烩,你要的都在这

Graphic Debugger工具大杂烩,你要的都在这

当我们想使用一些各大厂商的SDK Debug工具对于自己的游戏进行性能分析时,亦或是想学习一下别人游戏中用到的先进的制作方法和工艺流程的时候,常常会不知所措。甚至会听到很多开发者抱怨说这个软件太难用了,根本连不上手机。这款Debug工具软件太挑了,没有对应的真机设备等等。那么今天我将把我近几年来用到的逆向分析工具全部罗列一遍,并阐述如何使用,我相信在这里边肯定能找到适合您的。

(一),PC游戏

如果是端游游戏,考虑使用的工具有NSight,Intel GPA,RenderDoc

这里以NSight为例,抓取FIFA18 PC游戏的一帧,以此介绍下NSight如何逆向分析,口述不如截图来的实在,这里就贴图啦、

1,右击游戏exe,然后选择Luaunch with Nisight

2,弹出如下界面

3,进入游戏后看到性能分析窗口

4,按下 Ctrl + Z组合键,弹出抓帧界面

5,按下键盘上的空格键,抓取一帧

6,拖动下边的时间轴,可以看到DrawCall的绘制过程

7,点击下载按钮,把当前帧的数据工程文件下载到本地磁盘上

8,打开下载的路径,看到下载的文件都在这了,选择一款对应的VS版本,双击解决方案就可以打开了。

9,这里我选择VS2015.sln,打开VS工程,修改编译x64模式,右击工程rebuild

10,启动调试分析

11,接下来和上方的4,5,6步骤一样,接下来我们找到左侧球员的T恤来分析

Mesh网格
顶点数据格式
PS阶段纹理贴图
像素Shader
像素Shader,汇编指令
顶点Shader,汇编指令

(二),手机游戏

(1)利用Android模拟器抓帧

对于手机游戏,可以用Andriod模拟器分析自己游戏性能,也可以安装到真机上再分析,个人感觉真机上上分析的更准确一些,所以推荐大家能真机分析的还是真机分析,在没有可用设备的情况下,则可以通过模拟器分析也行,采用模拟器分析的软件可以选用Intel GPA,简单示范如下所示。

1,以管理员身份打开Graphic Monitor,附加模拟器的exe程序到Graphic Monitor中(不要问我为什么选择夜神模拟器)。

2,上述操作完后会自动拉起模拟器应用程序。如下图,在左上方显示FPS等信息式样,按下Ctrl +F1还可以看到详细信息。

3,截取了登陆界面的一帧数据。虽说看到上图中的 Frame Capture CTRL + SHIFT + C 也能截取帧数据,但不知道为什么不起作用(早期的GPA版本是可以的,现在不知道啥情况)。我们找到和它一起安装的System Analyze图标并打开,通过它抓取数据。出现实时数据窗口后,点击相机图标,抓取当前帧数据。

4,在桌面上我们找到GraphicsFrameAnalyzer2019 R1.exe并打开,就会看到刚才我们抓取的一帧图像,Frame Analyzer各个窗口的具体功能已标注在图上。

5,我们选取了左侧角色的drawcall,如下图,窗口面板功能已标记在图中。

点击展开Show All Resources会显示更多资源,包括shader资源,我们也会看到更多的数据流向,Input进去的是什么,Output的又是什么。

(2)利用Android真机抓帧

对于手机真机分析的可以选择的工具有很多。可以根据不同厂商的GPU SDK选择对应的软件。比如高通骁龙手机可以选用SnapDragon Debugger,Mali手机可以选用Mali.Graphic Debugger,用了NVIDA Tegra的手机可以选用Tegra Debugger等等。如果以上对应的手机都没有,那么也不要慌,我们依然可以搞,在这里我极力推荐RenderDoc,开源,免费,稳定,RenderDoc不跟具体的手机厂商挂钩,所以也不用担心用什么手机,直接连搞定。

RenderDoc

1,连接设备,以管理员身份打开RenderDoc工具,手机开启USB调试,还要确保电脑上已经安装好了Android SDK。如果是第一次使用RenderDoc,默认RenderDoc会自动向手机上安装一个RenderDoc的服务。安装完成以后看到界面的左下角的Replay Context:Local,点开,会出现当前连接上的手机,选择连接上的手机完成。(我这里用的是小米的黑鲨手机)

2,点击连接手机设备的选项,真机上会出现下方图1显示的界面,如果成功连接了左下方的按钮也会切换成下方图2显示的状态。

图1
图2

3,找到游戏在手机上对应的包名,然后选择Launch。

当你选择了对应的进程以后呢,如果该款游戏不是Profile版本,就会弹出如上图所示的警告,具体原因官方也说了,见下方图1。这个时候继续点击黄色框,让它尝试帮你fix一下,不过这个可能会花费一些时间(因为相当于在build时候做错的事情现在要在runtime修正它)。点击后会出现下方图2的界面,不管它,直接选择Yes。然后出现下方的图3,漫长的等待。漫长的等待之后,如果成功完成了重新patch,那么也会弹出图4的界面

图1
图2
图3
图4

4,截取一帧并进行逆向分析。下方图1点击立即抓帧按钮,抓取一帧。然后双击抓取的图像,弹出一个窗口等待抓取完毕,如下方图2所示。紧接着会弹出下方图3所示的帧分析窗口,具体每个子窗口是干什么的,已经标记在图上

图1
图2
图3


5,选取其中绘制角色的一次drawcall分析如下

  • Texture贴图分析窗口,可以看出该角色采用了三张贴图。法线大小256,由于是卡通游戏,所以法线不需要太精细,256的大小是值得学习的。
保存Chanel贴图,TGA格式保存
  • Mesh网格分析窗口。可以看出具体的网格Mesh数据格式,都包含哪些顶点属性。
图1 Mesh窗口
  • PiplineState窗口

我们在游戏开发中,一般只负责编写vertex shader和fragment shader,其他的Geometry Shader和Tesselation Shader,甚至Compute Shader由于性能耗费太大,基本不会使用。所以主要分析这两个shader,shader中用到的数据以及数据的格式都标注在图上了。当我们自己的游戏渲染不正确时,我们需要在这一步分析Shader之间数据的传递,VBO,EBO,Texture纹理单元的绑定关系等等,进而找到问题的所在。

输入的顶点数据格式
Vertex Shader的输入输出数据流向
贴图和Shader中Uniform属性的绑定对应关系
Fragment Shader

SnapDragon Profiler

上文也提过了,如果手头有对应型号的手机,采用对应厂商的SDK Debug分析工具也是可以的,因为我手头的手机是小米黑鲨手机,正好采用的是高通骁龙845的处理器,所以在这里我采用高通骁龙自家的SDK调试工具SnapDragon Profiler来再次逆向分析一遍,并详细讲解该工具如何使用,如何调试分析,以及每个窗口的作用。 流程步骤都写在每张图的下方注释区域了。

1,连接手机
2,抓取一帧
3,截取一帧各窗口介绍
4,纹理窗口介绍
5,顶点Mesh窗口

还剩下Mali Graphic Debugger和Tegra Debugger没有说。对于Tegra Debugger而言基本可以忽略了以后,因为目前来说采用NVIDA Tegra的手机是少之又少(Mi3可能是其中一款)。现在看来就剩下Mali手机的Mali Graphic Debugger的使用介绍了,这里有一篇非常好的文章,以前我就是按照这篇文章操作的,当时是红米2A移动版,所以在此就不实操了,贴出文章地址

另外官方的使用手册我当时收藏过一份,可能不够新了,感兴趣的可以看一看。

到此能想到的常用的分析调试工具使用方法基本讲解完了,这些工具不仅仅能帮助我们在项目前期学习借鉴别人游戏中用到的先进技术和制作流程,更重要的是到了项目后期可以利用它分析自己游戏项目中存在的性能瓶颈,尤其是GPU瓶颈。

这些工具在分析渲染流程时都各有所长,没有哪一个比哪一个好的说法,所以在我们使用时,还是要根据自己的需求和目标来选择对应的工具才是上乘之道。(完)

编辑于 2019-07-01 20:42