电脑故障问答网

 找回密码
 立即注册
查看: 119|回复: 11

PC Profile工具-Nsight/GPA入门

[复制链接]

2

主题

5

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2022-10-7 17:16:20 | 显示全部楼层 |阅读模式
最近在学习PC端Graphics Debugger工具,尝试了用Nsight和Intel GPA对端游进行截帧分析(仅供学习用!),把自己学习到的内容整理如下,希望对刚开始使用这些工具分析的同学有帮助。
注:本文的示例应用都是本地连接(gpasample.exe),成功尝试了hook Steam中的游戏(有的游戏对关键模块加壳就可能连不上或者无法分析..)
大致目录:Intel GPA截帧、Nsight截帧、DXBC的一些学习和参考
Intel GPA

官网链接:https://software.intel.com/en-us/gpa
官方介绍视频教程:https://www.youtube.com/watch?v=zLEUC3C9SKQ
概念:Erg---Anything contributing to the duration of the frame
GPA是一套工具,可以分析游戏的CPU/GPU性能,主要用于帮助开发者优化性能,不仅能针对Intel显卡也可以分析Nvidia等。因为主要查看绘制过程所以我主要使用了前两个工具,Monitor用于连接应用,Frame Analyzer用于查看捕获的Frame,包括绘制调用、Shader、资源文件等等。(视频里介绍说一般GPU limited使用Frame Analyzer分析,CPU limited使用Platform Analyzer分析)



GPA工具包



从官网下载最新版后启动Graphics Monitor(Steam里的游戏打码了)

Hook Steam里游戏主线程的方法:在下面的路径输入Steam的安装路径("C:/Program Files (x86)/Steam/Steam.exe"),在这里启动Steam然后从库中启动游戏(Monitor的设置里要开启Auto-detect launched applications),就可以自动Hook上。


下面的图示以本地应用gpasample为例,直接输入exe地址启动就好。
进入游戏后,可以直观看到帧率显示,DX版本及分辨率。





Ctrl+F1显示全部操作及UI



Ctrl+Shift+C捕获当前帧

然后打开Graphics Frame Analyzer,Open刚刚捕获的帧。


图里紫红色的区域就是当前Draw对应的像素。上方的数据直方图可以自行选择XY轴来看对应的指标、哪个DC耗时最长等,当前根据DC聚合排列,也可以根据RT、ShaderSet排列。



捕获的Shader

上图所示是Shader查看,以天空盒为例,这个sample实现比较简单,所以Shader语言很幸运的抓到了Hlsl,一般发行的游戏都是预编译的shader所以大概率抓到的是DXBC(shader汇编语言),就只能自己大概感受一下了...(忘记在哪里看的了说runtime的shader才会抓到hlsl)。



抓到的贴图可以保存出去(贴图保存有png和jpg格式),Geometry同理也可以保存但是没有uv信息(obj格式)。



画面右下角的这几个选项是用来对当前调用做一些基础的变换debug性能差异的,相当于旧版本GPA的Experiments功能。

PS : GPA从某个版本以后对界面做了改动,官网一个教程里的就是旧版界面(https://youtu.be/kQrO0rMqEWY),在最左侧会显示所有RT信息,其它功能虽然UI位置不同但整体没有太大变化。



旧版本界面

Nvidia Nsight

Nsight我尝试了两种工具,一个是Nsight Graphics(官网下的最新版 2019.3.1),一个是Nsight Visual Studio Edition 5.4(因为Graphics都只支持DX11,12等,而我想分析的游戏是DX9的..所以下了个旧版本的VS Edition),这里我还有个疑惑就是这两者有什么区别...都是用于Graphics Debugger的w...
Nsight Graphics

官方文档:https://docs.nvidia.com/nsight-graphics/UserGuide/index.html
连接Steam的方法:成功安装后点击Quick Launch,如GPA Monitor一样输入应用目录,Automatically Connect选择为No,启动Steam后进入游戏,在Attach Tab可以看到游戏的PID,Attach。







点击Capture for Live Analysis进行截帧具体分析,这里更细节的可以看到Pipeline中的HullShader/Domain Shader/Geometry Shader等。

Nsight Visual Studio Edition

下载链接:https://developer.nvidia.com/gameworksdownload#?dn=nsight-visual-studio-edition-2019-2
安装步骤会自动检测电脑里的VS版本,安装好后启动VS会发现多了个菜单栏Nsight,需要配置一下:
https://docs.nvidia.com/gameworks/content/developertools/desktop/nsight/host_basics.htm



安装后VS菜单栏变化

连接Steam并分析的方法:Steam右键Launch with Nsight HUD 5.4,进入steam后从库里进入游戏即可成功连接。
以gpasample.exe为例介绍Nsight的使用:





Ctrl+Z显示全部窗口



空格截帧后跳出当前帧预览窗口

下方的Event序列类似渲染序列但Event≠DC,相当于Erg,可以拖动进度条非常直观的查看渲染调用过程,右侧的工具栏里可以点击save capture to disk,之后就可以用VS打开进行具体的查看与分析。



VS打开的工程目录(这里换了个exe截的帧)

本地调试运行后关闭,点击Nsight->Start Graphics Debugging可运行刚才截到的帧,Ctrl+Z后空格截取,VS界面显示Event序列及对应的渲染信息。





Disassembly可查看Shader代码,Samplers查看Texture信息(默认不显示alpha,可以双击后在Resouces界面开启Alpha通道显示),下面的Constants可根据slot对应shader汇编码猜测一些具体参数。

DXBC

因为unity写完shader后可以compile and show code,所以我尝试了一下发现这样其实可以看到自己编辑的shader的汇编码,有些游戏抓取的dxbc语言和unity的是对应的,包括constantBuffer等(猜测可能是unity开发),所以可以用类似的方法人肉翻译一下shader的算法。
关于具体的dxbc函数分析可以参考以下几个文档:
https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx9-graphics-reference-asm
https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dp3--sm4---asm-
参考


  • 使用Intel GPA与分析3D程序和抓取模型 https://www.cnblogs.com/TracePlus/p/4233606.html
  • Graphic Debugger工具大杂烩,你要的都在这https://zhuanlan.zhihu.com/p/70780719

PS:手游的Profile工具还没有尝试过,有时间会学习一下~
回复

使用道具 举报

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-10-7 17:16:34 | 显示全部楼层
补充新发现:GPA保存图片为bmp格式就可以存出alpha通道,Nsight只能导出rgb通道
回复

使用道具 举报

1

主题

2

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2022-10-7 17:16:47 | 显示全部楼层
找不到之前版本的安装文件了。
2019读取截取帧的时候老Crash。新装的电脑都不能正常读取了 蛋疼
回复

使用道具 举报

0

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2022-10-7 17:16:54 | 显示全部楼层
对 旧版本的安装包是很难找...
回复

使用道具 举报

2

主题

5

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2022-10-7 17:17:29 | 显示全部楼层
补充
1.PIX,微软出的

2.VS 上的图形调试(适用于win10 20xx 版本前)
回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-10-7 17:18:25 | 显示全部楼层
有一张图片画的好
回复

使用道具 举报

0

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-10-7 17:18:58 | 显示全部楼层
为什么只有F11 没有 Capture for Live Analysis进行截帧具体分析
回复

使用道具 举报

1

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2022-10-7 17:19:51 | 显示全部楼层
为啥抓不了原神,是不是原神防了?
回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-10-7 17:20:35 | 显示全部楼层
应该是的 其实大部分游戏都加壳了 不然等于裸奔...
回复

使用道具 举报

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2022-10-7 17:21:01 | 显示全部楼层
大佬,有方法破解吗,给个思路也行[大哭][大哭]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

云顶设计嘉兴有限公司模板设计.

免责声明:本站上数据均为演示站数据,如购买模板可以上DISCUZ应用中心购买,欢迎惠顾.

云顶官方站点:云顶设计 模板原创设计:云顶模板   Powered by Discuz! X3.4© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表