Memo of Analysing Game Rendering 2 | 分析游戏渲染的姿势备忘之二

上回文说到的主要是手游,这次说说别的。在PC平台上,IntelGPA的缺点是:

  • 只能用核显,性能比较差
  • 只支持DX
  • VertexBuffer抓不全,导出模型比较难

PC上另一个重要工具就是NSight了,NVidia自家出的显卡debugger。不仅能用于CUDA科学计算的debug,还有FrameDebugger能分析渲染。集成在VisualStudio里,而且OpenGL和DirectX都支持,而且VertexBuffer直接能抓出来很全的数据。最重要的是,是用N卡渲的,性能不成问题了。

这次用NSight看中的PC上的游戏,是塞尔达旷野之息(Zelda:BotW,用WII模拟器)和STEAM的游戏。

NSight使用方法

  1. 新建一个VisualStudio空工程
  2. 工程上右键-Nsight User Property,Launch External Program选上要启动的程序。如果直接是游戏就不勾下面的is launcher,如果是steam等启动器就够is launcher
  3. 菜单栏-NSight-Start Graphic Debugging启动程序。启动后,程序左上角应该有HUD显示帧率等
  4. 菜单栏-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上几乎可以透视到所有游戏的渲染流程。甚至能抓出来模型和贴图进行逆向工程,可以作为学习其他游戏的有力手段。

以上。

参考资料

NSight

NSight的Graphic Debugger使用方法

Wii模拟器CEMU

CEMU安装方法

发表评论

电子邮件地址不会被公开。 必填项已用*标注