常见截帧方案的使用记录

完成岗前培训的过程中,对常见截帧工具进行了分析与使用,并对不同的游戏进行实际的截帧测试,之后会不断扩充测试游戏列表。

背景

岗前培训需要对部分3A游戏截帧,从而进行画面分析,实际操作下来发现比较新的3A的DRM都做的比较严密,很难成功进行截帧。

本文对尝试过的截帧方案进行记录,以供之后参考。

常见截帧工具

RenderDoc

RenderDoc发布时已经是2014年,当时D3D9已经被逐步淘汰,因此RenderDoc完全不支持D3D9,并且未来也没有支持计划。不过可以尝试使用DXVK(使用Vulkan重新实现了D3D9等旧图形接口)将D3D9转为Vulkan进行调试。

使用RenderDoc调试Steam启动的游戏时,会常用到Global Hook功能,需要注意,该功能要求关闭Secure Boot功能,并且RenderDoc需要被安装在系统盘,因为非系统盘不会给安装目录生成short name,并且经过测试发现,即使使用指令生成short name也无法正常使用Global Hook功能。因此最好将RenderDoc安装在系统盘。

部分特殊情况下可以通过dll wrapper的方式对进程进行注入,从而绕过部分的防御机制,详细参见此文章另一篇文章。基本原理为实现一个对应图形api dll的wrapper,在加载api dll的同时,加载RenderDoc的调试dll。

PIX

目前最新版本不支持D3D9与32位程序的调试。Steam的游戏子进程能被自动识别。

旧版本的PIX支持D3D9,可以通过 DirectX Software Development Kit 捆绑安装(此博客详尽的展示了旧版PIX的使用方法)。安装时可能遇到 S1023 的报错码,此时可以通过卸载系统中所有的VC++ 2010进行修复,详见此回答

不同于目前新的截帧工具,旧版的PIX不能对子进程进行监听,因此需要通过steam启动的游戏无法正常被监听。查阅资料后发现,根据此回答,可以通过在游戏可执行问价的目录下创建steam_appid.txt,并在其中写入该游戏的appid(可以通过系统主菜单的快捷方式属性中的URL获取),通过这种方式,大部分游戏都可以绕过steam进行启动。

Nsight Graphics

Nvidia提供的截帧工具,截止到现在的最新版已经不支持32位程序,需要回滚到2021.4左右的版本。需要注意,安装新版本的Nsight之后,需要重启进程,否则依然会报不支持32位进程的错,存在一定的迷惑性。

并且,官网提供的Nsight的最旧版本是2020版本,该版本已经不支持D3D9的调试,需要额外注意。更早版本官网并未提供下载,目前也没有找到其他第三方的下载存档。

GPA

新版本同样不支持d3d9。旧版本官方没有提供归档,不过可以从一个论坛页面找到支持D3D9的版本,但是测试发现,该版本能够在部分d3d9游戏中正常截帧,但是分析时无法正常打开,会给出 An unexpected error occurred.的报错,该问题在此讨论中被认为是GPA版本过新导致的问题,不过由于官方并不提供旧版安装包,因此无法进行测试。

Apitrace

Apitrace支持D3D9调试,不过目前还不支持D3D12调试。

Apitrace可以通过dll wrapper的方式进行调试,这种方式在D3D10与D3D11以外的情况下无需执行指令,只需正常运行可执行文件即可进行trace(详见Apitrace说明文档)。这种wrapper的方式可以解决游戏运行时需要通过Steam启动,导致 apitrace 指令无效的问题。

不过,Apitrace的主要问题在于,其无法进行逐draw call的绘制,只能记录draw call的调用情况与逐帧的绘制结果,难以进行分析。

Apitrace的官网的Links章节提供了一些类似工具的相关链接,如果上述工具依然无法满足需求,可以进一步调研。

游戏测试

怪物猎人:荒野

RenderDoc无法正确识别API。

Nsight能够正常监听,但是截帧时游戏崩溃,将游戏画面设置修改为全低,可以截帧,但是结果全黑。

使命召唤20:现代战争3

RenderDoc在注入时报错,Global Hook也无法注入。

Nsight同样无法正常监听进程。

使命召唤12:二战

与使命召唤20类似,无法正常截帧。

使命召唤8:现代战争3

D3D9游戏,上述工具无法进行截帧,COD系列的DRM做的都比较到位。使用DXVK,RenderDoc能正常注入,但是截帧时游戏崩溃。旧版PIX则无法通过steam_appid.txt的方式绕过steam启动,注入失败。

生化危机RE引擎系列

2代重置、3代重置、村庄可以正常使用RenderDoc截帧,4代重置无法截帧,API被识别为None。

这里比较怀疑是D加密导致的问题,因为截止至2025.4.30,上述生化危机作品中只有4代依然存在D加密(因此这里怀疑怪物猎人荒野也是同样的问题)。

生化危机6

D3D9游戏,旧版PIX也无法截帧,会提示该游戏禁止截帧分析(This program has indicated that it cannot be used with Direct3D profiling/analysis tools),DX应该提供了相关的接口给开发者。

生化危机4HD

D3D9游戏,可以使用旧版的PIX正常截帧。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部