Notifications
Article
Profiler深挖-GPU面板(3)
Published 2 years ago
1.0 K
2
GPU
前面我们讲过GPU只是个硬件,它并不知道要绘制什么? 然而Unity又是个大黑盒,所以很多Unity的程序员都有这个误区,限制程序员对底层的了解。正确的工作方式如下:
CPU->图形API(如OpenGL ES)->GPU驱动程序->GPU->显存->显示器
首先GPU Profiler并不是所有图形API和显卡都能支持的,如果不支持面板中会提示。还有如果打开了 Graphics Jobs (Experimental) 选项,GPU Profiler将会被关闭。
首先来看看各平台GPU Profiler所支持的图形API和显卡。
由于我的Mac系统默认是Metal的图形API 所以,不支持GPU Profiler。不过可以切换到OpenGL core,这样就支持了。如下图所示,把OpenGL core放在第一位就可以了,别的平台类似设置即可。
如下图所示,此时每帧的GPU开销也显示出来了。
如下图所示,GPU的Profiler面板布局和CPU的Profiler面板布局类似。主要显示GPU的耗时部分,由于CPU上基本上我们的代码可以直接访问所以可以在Profiler中看到耗时函数,而GPU这块我们并不能直接访问,而是通过图形API程序间接访问,所以Profiler看到的内容会有点模棱两可,不过仔细观察还是能看到耗时的地方。
1)Opaque(不透明物体):不透明的物体,Unity在处理不透明物体时是从前向后画,这样做的好处可以让Zarly-Z最大化受益。但是有时候不知道为啥,它算的排序是有问题的,所以我建议大家自己设置RenderQueue的值,例如:先绘制地上物体,最后在绘制地面。
2)Transparent(透明物体):不透明物体可以依靠Zarly-Z降低ps的负载,但是透明物体就没办法了,必须以画家算法从后向前画一层层的blend上。
3)Shadow/Depth:阴影深度缓冲,和ZBuffer的原理类似,只是shadow depth是从光的方向来渲染,记录看到的片元信息。在回到视角方向来看这个片元是否能通过这个深度测试?最终确定是否在阴影中。
4)Defferred PrePass:延迟渲染的PrePass,先对场景进行一次渲染,确定几何信息以及深度信息并且保存在G-Buffer中,延迟后在统一进行光照计算。这样做的好处就是,不会向前向渲染一样傻乎乎的计算光照,结果发现好不容易计算出来的结果被后面的东西给挡住了,这就造成了性能的浪费。
5)Defferred Lighting:由于前面的PrePass已经确认了几何深度信息,这里根据G-Buffer就能统一处理光照计算了。前向渲染每添加一个点光,DrawCall就会增加很多,而延迟渲染不会有这个现象。
6)PostProcess:屏幕后处理
7)Other:其他,不被统计的耗时,可以在下面Overview统计中看更详细的细节。
如上图所示,我们可以在Profiler中看到每个渲染的DrawCall数量,以及占GPU的总耗时。这个例子中,可以看到绘制不透明物体占70个DrawCall,其中影子就占了32个。
请大家必须注意GPU的开销,因为现在手机普遍CPU都比较好而GPU较弱。原因就是使用手机的用户大部分都是不玩游戏,所以厂商使劲提升CPU和屏幕分辨率,而GPU比较差很容易出现发热的现象,基本上就是GPU太忙造成的。
Okay~ GPU已经介绍完毕,下一篇我们将继续介绍其他性能面板窗口。
Tags:
雨松MOMO
程序员 - Programmer
17
Comments
雨松MOMO
a year ago
程序员
ylaier写得不错,就是错别字多了些,容易引起误导
感谢 我会注意, 写的太快了 哈哈
1
y
ylaier
a year ago
写得不错,就是错别字多了些,容易引起误导
0