上回文说到的主要是手游,这次说说别的。在PC平台上,IntelGPA的缺点是:
- 只能用核显,性能比较差
- 只支持DX
- VertexBuffer抓不全,导出模型比较难
PC上另一个重要工具就是NSight了,NVidia自家出的显卡debugger。不仅能用于CUDA科学计算的debug,还有FrameDebugger能分析渲染。集成在VisualStudio里,而且OpenGL和DirectX都支持,而且VertexBuffer直接能抓出来很全的数据。最重要的是,是用N卡渲的,性能不成问题了。
这次用NSight看中的PC上的游戏,是塞尔达旷野之息(Zelda:BotW,用WII模拟器)和STEAM的游戏。
NSight使用方法
- 新建一个VisualStudio空工程
- 工程上右键-Nsight User Property,Launch External Program选上要启动的程序。如果直接是游戏就不勾下面的is launcher,如果是steam等启动器就够is launcher
- 菜单栏-NSight-Start Graphic Debugging启动程序。启动后,程序左上角应该有HUD显示帧率等
- 菜单栏-Pause And Capture Frame就可以抓帧了!
NV官方有一个UserGuide,基本是笔者上面的描述。
Chrome有一个用nsight来debug的教程,操作是类似的。
Wii模拟器上的游戏
理论上PC模拟器的游戏都能用NSight来抓帧分析。这次选的是Wii的。当然主要是因为Switch还没有模拟器咯,而Wii有CEMU。任天堂最新的一些游戏在Wii上都有发行,这是坠吼地。最近出到1.11.5了,ZeldaBotW已经不卡咯。
不过装CEMU还有一些配套工作,比如装CEMUhook, graphicpack等,参见这个教程。
装完当然就可以分析了!
ok,CEMU是OpenGL的渲染。API可以看的很全。好吧,四千多个DC??Switch机子性能可以啊,手机只能到这个1/10都不到啊。
管线相当复杂,明显是defer,但是笔者是没怎么看懂,切了很多很多RT。。。
VertexBuffer很全,但是数据感觉很诡异,猜测得写个脚本parse一下,原生的数据可能格式不对。
草的倒伏是画了一张法线图!厉害咯
STEAM游戏
自然也是可以的,StackOverFlow上这个帖子说的很明白了。重要的是勾上”Application is Launcher”就好咯。
启动以后要勾个进程。然后等着启动看到HUD就跟之前一样了。
不知道为啥watchdog没起来,这里起了一个Besiege的。ok顶点数据很全,而且都标好语义了,是位置/法线/UV一清二楚可以导出咯!
总结一下:PC上几乎可以透视到所有游戏的渲染流程。甚至能抓出来模型和贴图进行逆向工程,可以作为学习其他游戏的有力手段。
以上。
博主很有意思,很好玩的技术博客。
谢谢关注!
AMD的显卡和cpu的日子过不了了