Adreno Profiler分析任意安卓游戏特效+抓取资源

Adreno Profiler分析任意安卓游戏特效+抓取资源

最近发现了一个非常好用的工具Adreno Profiler,可以用来分析安卓手机上OpenGL ES绘制过程。这个东西牛的地方在于可以抓取任何可以运行的App,而且使用起来非常方便、没有额外限制。这个工具本质上是一个OpenGL ES Draw Call Replay;如果你用过PIX或者GPA,就会感到很非常熟悉了。下图是贵易的魔天记,挂起来毫无压力233

adreno_mtj

由于这个工具是高通提供的,所以只能运行在高通芯片的安卓机上。为什么要强调这一点呢?其实其他厂商也有类似工具,但是从使用限制、方便程度上来说差太多了:

  • iOS可以用XCode自带的Frame Capture,但是这货用起来很不顺手,而且没法抓取第三方应用。
  • 其他安卓厂商也有类似的工具,例如Mali Graphics Debugger,但是使用起来比较麻烦,譬如需要越狱、上传so到系统目录之类的。

下面将具体介绍其使用,然后用两个例子来讲解,一个是抓取分析聚爆Implosion的特效绘制,另一个是用来做cocos2d-x图形性能优化。

ps. 我习惯说Draw Call(DC),工具里是Render Call,下文会混用…

环境配置

软件配置

下载Adreno Profiler并安装,需要注意以下几点:

  • Adreno SDK不是必须的,可以无视;
  • 虽然Adreno Profiler提供了跨平台版本,但这货貌似是c#的,我尝试在OSX下用Mono跑但是折腾不出来,所以最好还是Windows;
  • 需要将adb添加到系统路径,可以直接下载一个Android SDK,但是我国国情导致你不一定能很方便的下载下来;还有一种取巧的办法是所谓的xx手机助手、豌豆荚等工具目录下一般都会自带,指向adb.exe所在目录即可。

硬件配置

需要一个有高通芯片的手机,我这里强烈推荐G家亲儿子Nexus系列!如果手头没有的话,可以去淘宝买个Nexus 4,虽然是几年前的机器、不过一点都不卡,而且一千块钱都不到。

注意 目前Android 5.1上可能出现连接不稳定的情况,见官方论坛,我这边测试5.0倒是一直能用~所以如果遇到这个问题,建议降低系统版本再说。

update 评论区@Hoping White指出,通过adb shell setprop debug.egl.profiler 1命令设置属性能解决连不上的问题。

再注意 需要打开手机的开发者模式,并把电脑设为信任,偷懒的方法是用豌豆荚连一次,跟着指示做就行,驱动都自己装好了。

基础教程

如何抓取一帧

首先手机上打开游戏,运行到需要抓取的界面。然后在电脑打开Adreno Profiler,点左上角的Connect。这里有两种连接方式:手机直接插到电脑上,或者在同一个局域网内使用IP连接。准备好了之后点击Refresh,直至刷出对应的设备和应用:

adreno_connect

双击连接之后,点击Scrubber GL弹出抓取界面,然后点击Capture Frame等待即可

adreno_connect2

这样其实就完成了抓取工作,是不是感觉so easy! 下面将从例子出发,介绍具体的使用。

小技巧:抓取完成之后,可以点击上方的Save将帧数据保存成apr文件,这样可以之后Open,省的每次分析都需要连接手机、打开游戏。

基础使用

这个工具使用非常简单,核心是左下角的Render Calls。它其实是抓取了一帧中所有GL部分的调用及相关数据,然后按照绘制命令组织。当选中不同的Render Call时,工具会显示从一开始到这一个命令的绘制结果,方便看到每一个中间过程。此外,在API Calls中,还可以看到每一个Render Call之前的其他命令,包括各种对GL状态机的修改:

adreno_api_calls

从图中可以看到,在这个绘制动作前,对模板状态进行了设置,然后传了一些Uniform,并修改了顶点属性~更方便的是,具体的顶点数据什么也能直接看到!

adreno_vertex_data

如何查看、导出资源

就纹理来说,在右边可以看到所有显存里的纹理资源,点开可以看到具体的纹理参数和缩略图。在上面有一个小的按钮,可以将所有纹理都保存成一个个文件:

adreno_textures

就Shader来说,同样也是可以看到所有Program,工具还会贴心的标出所有利用了该Shader的Render Call,下面可以看到反汇编出来的指令:

adreno_shaders

就模型来说,选中一个Render Call然后Save Vertex Data就可以导出obj,但是生成的文件还需要稍微修改下才能导入,具体打开看看就懂了~

adreno_obj

我曾经把驯龙高手的地形导出之后放到Unity,毫无压力-。-

adreno_dragons

进阶使用

游戏性能优化

之前zhiwei写过Cocos2d-x+Lua游戏的优化总结,下面我从图形性能为例,来介绍需要注意的几个点~

首先需要看一下每一个Render Call干了什么,是否有意义。根据不同游戏类型,对Draw Call个数应该有个大概掌握。这个当然是越少越好啦~

  • 是否有无效Render Call,我曾经见过一个全屏绘制“无效果”,也就是屏幕内容在绘制前后结果完全一致,不知道到底干啥了…
  • 是否有绘制到屏幕外的Render Call,也就是模型在屏幕外的情况;这个其实应该是引擎自动优化掉相机范围外的物体,不过有的引擎不具有这个能力_(:з」∠)_
  • 是否有被完全挡住的Render Call,这时候需要完全干掉,不然也是会造成性能损失的;话说这个其实也应该引擎自动优化Occlusion来着(╯‵□′)╯︵┻━┻
  • 是否有能够合并的Draw Call,像Unity里有Dynamic/Static Batching技术。
  • 是否有负担比较重的API调用,譬如每帧都修改顶点数据,是否能避免或绕开。

然后需要看一下显存中的纹理数量和大小,这个肯定也是越小越好~

  • 能用压缩纹理的地方就用压缩纹理,RGB444能忍的地方就不要用RGB888;
  • 少用透明贴图,可以节约掉一个A;
  • 可以用NPOT;
  • 无用的纹理尽量不要放太多显存。

需要注意的是显存中纹理占用和包里的纹理占用不同,因为所有纹理资源在进入显存之前会进行解压操作,这就是为什么建议使用压缩纹理。

此外,Adreno Profiler还提供了Graph工具,可以看到应用的许多性能信息,用来对比不同游戏场景下负载:

adreno_graph

工具本身也提供了一些建议供参考:

adreno_suggestions

聚爆特效分析

这个其实源自我之前在知乎上的一个回答:这款游戏中 主角被遮挡部分变成半透明的效果是如何实现的?

在介绍如何绘制被遮挡部分的特效,用了一个小技巧:查看GL Context状态机,这里就可以看到ztest被改成了GREATER,也就是绘制完场景之后直接绘制被挡住的部分~

adreno_gl_context

当然,还可以点击上方的Depth切换出zbuffer查看

adreno_depth

解释刀光特效的时候,主要靠经验积累,大概看下绘制的中间结果就猜出来了-。-本质还是一个很简单的特效。亮点在于绘制第二道刀光时,先绘制了整个场景,然后对其进行了一定的扭曲~

adreno_distort

Adreno Profiler提供了一些很方便的可视化功能,譬如选中一个纹理或者Shader,可以标记出所有使用该资源的Render Call;选中Render Call的时候会在屏幕上标记其绘制效果~

总结 嘛,总之很方便的工具一只~我现在就等着泰坦黎明的安卓版,好好分析下它咋做的啦o(╯□╰)o

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RPGViewer图片资源提取工具 作者:Van 说明: 下载RPGViewer之后,不要忘记同时下载RPGViewerSupportFile。解压RPGViewer后,将RPGViewerSupportFile拷贝到解压之后的目录,然后选择“解压到当前文件夹”即可。 有需要的朋友可以做为研究之用 郑重声明 本程序提供的导入导出功能仅供个人学习研究之用,图像之版权属相关公司所有,请勿将提取的图片或导入修改后的图象文件用于其它用途 功能简介 一、浏览 执行文件菜单中的打开。如果你是第一次查看这个游戏,RPGViewer会弹出对话框让你选择游戏的路径,一般选择游戏主程序所在目录即可 之后就可以用浏览菜单或者浏览工具栏查看游戏中的图片了。 如果遇到不支持的图片格式或者读取图片时发生错误,RPGViewer会在状态栏显示相关的出错信息。 二、搜索 可以根据文件名查找图片。支持查找的游戏列表详见附录1 搜索支持模糊查找、区分大小写和正则表达式,正则表达式的具体定义参见附录3 三、导出(支持bmp、jpg、png和mng格式,mng格式的说明参见附录2。另外支持导出为三国群英传的SHP格式) RPGViewer提供三种导出功能: 1、当前帧 导出当前显示的图片 2、当前图片 当图片仅有一帧时,和导出“当前帧”相同。否则将导出该图片的所有帧。 3、所有图片 导出所有图片(!注意:如果图片有多帧,那么此功能会导出所有帧!) 注:有些导出图片的高度是负的,可能在某些图片浏览器中不能正常显示。建议使用Irfanview或PhotoShop进行查看和编辑 全部导出功能会将所有的图片导出到目标文件夹中,文件名依次为1-1.bmp,2-1.bmp... 四、导入(支持bmp、gif、jpg和png格式) 你可以导入bmp或者png(支持透明色和alpha通道)格式的图片(注:“导入”操作只是引入了一个替换的标记,此时并未进行实际的替换) 如果想取消对当前图片的替换可以使用“导入”菜单中的“还原” 全部图像都替换完之后,执行“导入”菜单中的“保存”,所作的替换就会生效 五、压缩包操作 可以提取游戏数据包中的所有文件,并支持部分游戏的文件替换。支持解包和替换的游戏列表详见附录1 附录1: 浏览和导出支持以下游戏: 大宇:轩辕剑系列(2代、3代、4代以及它们的外传)、轩辕伏魔录,仙剑1(DOS&WIN;版)、新仙剑、仙剑2、仙剑3和仙剑3外传 智冠:金庸群侠传(光盘&硬盘版)、武林群侠传、三国群侠传、天龙八部(部分) 奥汀:三国群英传1~6、幻世录1~2 宇峻:绝代双骄1~3、幻想三国志1、2 弘煜:风色幻想1、SP&2、3、4 光谱:富甲天下3、富甲天下4 汉堂:阿玛迪斯战记、天地劫-神魔至尊传、天地劫序传-幽城幻剑录、天地劫外章-寰神结 新瑞狮:吕布与貂蝉、反三国志、天河传说 目标:秦殇、秦殇前传-复活 金山:新剑侠情缘、月影传说、剑侠情缘2、地雷战、决战朝鲜 KOEI:三国志1~5(头像文件)、三国志6~11、SanInternet、SanBattleField、英杰传系列、 太阁4~5,信长之野望3Win版、信长之野望6(头像文件)、信长之野望7~12、 真三国无双3、 水浒传天命之誓&天导108星、成吉思汗4、王国兴亡录 TGL:神奇传说——远征奥德赛1&2、神奇传说1~3、战国美少女1&2 Falcom:伊苏1、伊苏2(部分图片调色板不对)、英雄传说6(部分)、失落的羽翼、圣界的奇迹、绯苍幻想曲 ego:圣魔大战、新圣魔大战、艾伦希亚战记、红泪、苍月、魔法少年、永远的羁绊、我的美丽天使、秘境传说、乱世奇缘 KEY:Kanon、AIR KID:梦之翼、Never7、Ever17、秋之回忆1~3、秋之回忆-想君 ELF:龙骑士4、同级生2(DOS&Win;版)、下级生 Illusion:欲望的血液4、尾行2、尾行3、BattleRaper2、人工少女2、波动少女1.5、波动少女2 SoftMax:西风狂诗曲 NWC:英雄无敌2、英雄无敌3 EIDOS:盟军敢死队-使命召唤&深入敌后 UBI:英雄无敌5测试版 其它:郑问之三国志 字体:三国志2~5、San9&10;(存为png格式可以保留alpha通道)、MagicWin 导入支持以下游戏: 三1~5头像,三6~10,三11的头像,英杰传系列,大航海4,信长7、8、11、12,成吉思汗4,王国兴亡录 地雷战 三国群英传1~3的PAK文件(仅限于其中的SHP格式)(注:未经严格测试,替换前请一定要备份,以避免不必要的损失) 部分支持信长12和三国志11的bin文件的导入 注: 曹操传的meff不支持导入 查找和解包支持以下游戏: 大宇:CPK(仙剑3和仙剑3外传) 奥汀:PAK(三国群英传1~3、幻世录1、幻世录2)、PCK(三国群英传4&5) 宇峻:*Combat.dat、*Man.dat、*Role.dat(幻想三国志1、2) 弘煜:BMP、FACE、MANBMP、MAPBMP(风色幻想1&SP;)、PAK(风色幻想2)、JBF(风色幻想3&4) 汉堂:DAT(幽城幻剑录、寰神结) TGL:PAC(神奇传说3、远征奥德赛1&2)、PAK(战国美少女2) Falcom:YS(伊苏1)、ED6_DT??.dat(英雄传说6) ego:DAT、TPF(乱世奇缘) KID:DAT ELF:ARC illusion:PP SoftMax:ZMK(西风狂诗曲) NWC:AGG(英雄无敌2)、LOD(英雄无敌3) EIDOS:DIR(盟军敢死队) UBI:PAK(英雄无敌5测试版) 替换支持以下游戏: 奥汀:PAK(三国群英传1~3) 附录2: mng导出格式简介 此格式对应多帧的PNG图片,效果类似于GIF动画,但支持RGB+alpha通道并且无损压缩。可以使用IrfanView、XnView查看,GIMP编辑(相关支持软件可以去http://www.libpng.com/pub/mng/mngapps.html查看) MNG IE插件:http://entropymine.com/jason/mng4ie/(可以到http://free.ys168.com/?pigspy下载,里面提供了注册文件reg.dat和卸载文件unreg.dat) 装了该插件之后可以直接用IE打开mng文件 注1、此导出格式仅适用于生成动画(具体包括:轩辕剑的tsw图片,绝代双骄2&3、幻想三国志1&2的战斗和法术图片,金山的ASF.PAK,西风狂诗曲的OBC文件) 注2、如果用这种格式保存帧数太多、图像范围太大的图片(比如全屏幕的法术),可能需要花较多的时间生成,同时生成的图片也可能会比较大) 注3、你可以使用相关工具进一步减少mng的尺寸(比如使用delta-PNG方式压缩) 注4、当提取当前帧时,会自动保存为png格式 附录3: 正则表达式 具体参见http://msdn2.microsoft.com/en-us/library/k3zs4axe(en-us,VS.80).aspx中的“Regular Expression Syntax” 一些正则表达式的例子: 严格匹配face:^face$ 模糊查找face:face 查找mFace???.shp的文件:mFace...\.shp$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值