2评论

用GPA对android应用绘制分析

HelloHuan 2018-01-22 1k浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯GAD游戏开发行业精英群711501594

以前经常用GPA来perf端游的绘制,很多perf工具例如perfhud,pix对于加壳的程序总是束手无策,但是GPA却不受这个限制,可以自动HOOK 3D程序的子进程。


对于Perf手游的分析软件也有很多,例如AdrenoProfiler、SnapdragonProfiler、UnityProfile、Mali_Graphics_Debugger等工具,但都有诸多限制:

1、 还得找个对应芯片的真机,最好还ROOT过

2、 USB连接线不稳,总是容易断开,重新连接

于是就想着能否使用GPA等工具来分析android模拟器,经过一番折腾,发现奏效了。


其实方法很简单,记得把Android模拟器改为DirectX的渲染模式,然后找到模拟器的EXE,当成一般的3D程序HOOK工具就可以了。

然后就可以看看一些游戏是咋渲染的了:


可以看到角色渲染方面使用的Sampler和Shader,不过很遗憾,代码是Assembly的,需要自行的转成HLSL。



附带个决战平安京的渲染分析:


角色绘制:


展示角色 与 战斗角色,使用完全不同的Mesh、Texture来制作,相当于两个完全不同的模型。


展示角色,渲染效果:仿PBR的次世代材质制作。通过MASK来区分不同区域,调节金属度,粗糙度,高光范围等,shader共91条指令数。无阴影计算



对应的 战斗角色的几何有 1857 个三角面

角色渲染的材质也很简单,使用了单个shader,指令数很低,使用了两张贴图,256*256 ColorTexture(RGB)+AlphaTexture(A8),并通过_change_color和_AlphaMtl分别控制颜色和Alpha的调制。

角色的两张贴图均未使用Mipmap。

角色阴影采用最简单的平面阴影计算,类似FakeShadow的效果。


战斗场景绘制

战斗场景地面:

地面绘制很简单的,用一张4096*4096的32位精度贴图绘制,贴图中直接包含了场景的光照和阴影信息,地面网格就是两个三角形的PLANE,无任何额外光照阴影计算和LightMap,可调节的Parameter也仅用于控制整体的alpha和color表现。

4096*4096的大地表贴图

场景细节物体

场景细节物体使用与地面网格相同的材质表达,均使用一张贴图,带Mipmap生成



欢迎交流 helloahuan@163.com

想免费获取内部独家PPT资料库? 观看行业大牛直播?

立即扫码加群

本文作者

腾讯GAD公众号

腾讯GAD 游戏开发者平台

正在为您生成个性化社区首页

已为您定制专属社区首页

选择关注标签

全新改版的GAD,想你所想,等你体验...
  • 策划{{selectCount.plan}}
  • 开发{{selectCount.program}}
  • 美术{{selectCount.art}}
  • VR/AR{{selectCount.vr}}
{{tab.name}}
跳过

选择关注用户

  • {{tab.user.NickName}} {{tab.introduction}}