利用Intel® Graphics Performance Analyzers (Intel® GPA) 优化Earth From Another Sun图形性能



背景信息

IntelGPA是一款非常强大便捷的图形分析工具,开发者可以轻松使用IntelGPA来快速定
位ReleaseBuild的性能问题抑,其强大的单针抓取功能可以非常精准的定位到性能热点抑
或是Debug显示错误。
本文我们将以正在开发中的游戏Earth From Another Sun为例,想大家介绍IntelGPA的使用方法。
本次优化的目标主是让GTX1060-3G在我们的压力测试场景中,在中画质的情况下始终保
持60帧+的帧数。

下载地址:
https://software.intel.com/content/www/us/en/develop/tools/graphics-performance-analyz
ers.html

使用IntelGPA快速定位系统瓶颈:

图形显示器(GraphicsMonitor)

安装完IntelGPA后,运行GraphicsMonitor,利用GraphicsMonitor启动需要debug的程
序,这里我们启动EFAS


进入游戏后可以看到GraphicsMonitor的GUI,按ctrl+f1切换模式:


可以从GraphicsMonitor中得知,在压力测试场景下,游戏的帧数在50左右,离60的目
标帧数是有一定差距的,那么我们接下来DEBUG一下性能。

利用override模式,我们可以快速debug到系统瓶颈所在,这里我们介绍几个非常效率的
常用模式:
NullHardware/DisableDrawCall:
一般用于快速确定系统的瓶颈在CPU还是GPU,如果开启后帧数没有提高,往往说明瓶颈
在CPU,NullHardware暂时只支持Intel显卡,我们的测试平台是GTX10603G,开启Disable
DrawCall后,游戏帧数达到了90FPS,可以确定系统瓶颈在GPU端:


1x1ScissorRect:
可以屏蔽显卡光栅化(Rasterization)之后的大部分计算,这个模式主要包含的计算包括
vertex阶段的计算,在EFAS中还包含了部分特效,computeshader以及蒙皮的计算:


在1x1ScissorRect模式下,游戏帧数也有了较大的提升,这说明在光栅化之前的计算负担
成为了瓶颈。针对这种情况,可以通过使用更低的LOD来降低场景面数,将部分GPU程
序用CPU多线程重写,将蒙皮计算挪到CPU端计算来实现更为合理的计算资源分配。

Simplepixelshader:
顾名思义,这个模式可以消除pixelshader的计算,在EFAS中带来了大概10帧左右的提
升。

Texture2x2:
这个模式会强制场景中的所有贴图都用一个2x2的4色贴图来渲染,在EFAS中这个模式
并没有带来什么提升。如果遇到这方面的瓶颈,在UNITY/UE4等主流引擎中可以尝试用
virtualtexture/TextureStreaming技术,或者是在资源倒入引擎时限制贴图分辨率,抑或是
减少贴图取样(texturefetch)来消除瓶颈。

DisableAlphabending:
这个模式将消除半透明混合所带来的瓶颈,在我们当前的场景没有遇到这个瓶颈。实际上个
别场景我们被大量的半透明极大的影响了性能,EFAS主要是将这部分计算转换成基于屏幕
的计算来消除瓶颈。

通过GraphicsMonitor我们能快速的定位到系统的瓶颈所在,接下来我们将利用Graphics
Frameanalyzer。

GraphicsFrameanalyzer

在游戏中按下快捷键ctrl+shift+c可以快速截取当前帧的快照进行详细分析,运行Graphics
Frameanalyzer可以打开快照,对每个指令进行详细的性能debug:


这里我们主要想快速debug性能问题,所以将单位选为GPUElapsedTime:


可以看到几个延时很高的GPU指令。当然,从延时最高的部分开始优化是一个不错的主意,
不过考虑到我们是deferredrenderer,这样的绘制延时分布也是有一定原因的。我们先来验
证一下刚刚把蒙皮计算挪到CPU上的思路是否可行。
在GraphicsFrameanalyzer(GFA)中,我们可以看到每一个绘制指令的详细内容,根据GFA
中的GPU程序Exe,我们快速定位到了所有的蒙皮指令,并且还发现了一个看不到的模型
的蒙皮计算:


很明显这个敌人在画面中并没有出现,它却参与了蒙皮计算,看来是culling设置的问题,
选中了所有的蒙皮计算后,发现蒙皮计算只占用了0.11ms,看来刚刚把蒙皮转移到CPU
的想法并不能有效解决瓶颈问题,考虑到计算资源的特性,可能还会给CPU造成过多压力。
除了蒙皮以外的GPU程序消耗还还不到100us,看来这一部分已经优化的相当好了。

EFAS是一款基于UNITYSRP开发的游戏,可以利用Sampler和Commandbuffer在渲染
管线中插入自定义debugsample,并且这些sampler是可以在GPA下显示的,开启debug
region后,我们可以轻松在GPA中了解到SRP中的每一个环节的延时:


一目了然,阴影,光照计算和一个半透明效果计算占了大部分,并且体积光的延迟也不小。
针对光照计算的优化,烘焙光,以及降动态阴影质量,都能带来的提升。为了保证帧数,我
们也考虑在中画质中关闭体积光计算。放弃SSS材质,用depthfog和粒子代替体积光体
积雾。
针对ForwardTransparent的不合理延时,我们里可以点击柱状图一探究竟。结果发现有一
片不显眼的半透明粒子覆盖了大量屏幕面积,并且重叠了很多层:

经过检查,图中的粒子效果有多层叠加,并且所使用的shader会计算光照,这都是没必要
的。我们替换了unlitshader,并且降低了粒子分辨率之后,得到了喜人的结果:


我们将问题粒子的绘制延迟从0.97ms降低到了0.035ms,并且效果基本没变!

结语:

利用IntelGPA,我们可以非常高效的定位系统的瓶颈,并且非常准确的找到计算资源的分
配,快速对优化方式作出判断。

Comments

  1. How to make money from gaming with free coins - Work
    Make money from gaming 구리 출장샵 with หาเงินออนไลน์ free coins. This is 통영 출장샵 a quick tutorial on how to make 창원 출장샵 money from gaming with free coins. The best 경주 출장안마 part is that all the

    ReplyDelete
  2. Computers can statistically decide the play with the biggest expected return. Skill and intuition at enjoying in} video poker aren’t sufficient, as you’re alleged to do what’s statistically greatest an everyday basis}. But should you miss those, try for a straight flush or a 카지노사이트 royal flush. However, if you’ve obtained a single deuce, the video poker strategy turns into a little tough however manageable.

    ReplyDelete

Post a Comment