以前經常用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生成

歡迎交流 [email protected]

推薦閱讀:

相关文章