移动设备GPU 性能优化对玩家游戏体验至关重要。侑虎科技 UWA 一直专注于游戏和 VR 应用的性能优化,移动设备 GPU 优化是其关注的重点,为了更好地满足开发者针对不同 GPU 芯片的性能测评与优化,日前他们在全新升级的UWA SDK 2.4.8版本中,推出了 GPU 性能测评工具——<strong>UWA GOT Online GPU 模式</strong>。这也是 UWA 继去年GPU Counter 功能更新增加Imagination PowerVR GPU 芯片支持后的一次重要升级。
全新的UWA GOT Online GPU 模式带来了更全面的GPU 性能优化方案。在 UWA 官方公开的 GOT Online 支持设备列表中,<font color="#c200ff">可以看到对多款Imagination PowerVR GPU的支持:</font>GE8100、GE8200、GE8300、GE8310、GE8430、GE8320、GE8325、GE8340 等,<font color="#c200ff">并且会持续刷新支持Imagination PowerVR GPU的型号,</font>表中还列出了GPU耗时均值、GPU着色、GPU带宽、GPU图元处理、GPU负载等多个评测优化维度。Imagination 将与 UWA 持续合作帮助开发者对GPU 进行更好地优化。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313064-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
现在,让我们一一介绍这些重要功能。
<ul><li><strong>性能简报:</strong>该页面可以快速地帮助开发者把控项目的GPU性能压力情况</li></ul>
<ul><li><strong>GPU分析:</strong>分别从渲染和带宽两个角度,对GPU性能压力进行分析</li></ul>
<ul><li><strong>渲染资源分析:</strong>开启纹理和网格资源分析功能,定位这些资源的具体使用情况</li></ul>
<ul><li><strong>Overdraw快照:</strong>更便捷地定位Overdraw压力来源</li></ul>
<ul><li><strong>GPU温度:</strong>快速判断设备发热的原因是否主要来自GPU</li></ul>
<hr>
<font size="3" style="line-height: 45px;" color="#c200ff"><strong>性能简报</strong></font>
如下图,UWA列出了测试时的FPS、GPU Clocks数据,并用浅红色背景标注了GPU Bound帧。GPU Bound表示GPU性能高压区间,此时GPU计算耗费的时钟周期数过高,可能无法支持满帧运作。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313066-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
同时,UWA也在图表下列出了GPU性能、渲染统计、纹理资源分析和网格资源分析4个模块的参数情况和对应的优化任务队列。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313067-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center>
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313068-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center>
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313069-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
简报的目的是帮助大家在茫茫多的性能指标中,快速筛选出高优先级的优化任务。如需要针对某些指标做更为深层的下探,就可以使用下文中的各个功能进行分析。
<hr>
<font size="3" style="line-height: 45px;" color="#c200ff"><strong>GPU分析</strong></font>
在指标汇总下,展示了测试过程中获取到的各项GPU参数。同时,UWA也根据这些指标间的关联,分别从渲染和带宽两个角度,帮助开发者对GPU性能压力进行具体分析。
<font style="line-height: 40px;"><strong>1. 指标汇总</strong></font>
<div style="border:1px solid #d3d3d3; padding: 15px 20px; margin: 20px 0; border-radius:5px;">
<font color="#c200ff">GPU Time</font>
GPU Time即每帧的GPU耗时。GPU耗时的推荐值和CPU耗时一样,当项目需要维持在30帧时,GPU耗时应低于33ms(UWA推荐控制在28ms更佳)。同时,UWA也列出了渲染耗时Fragment Time和顶点处理耗时Non-Fragment Time数据作为补充。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313070-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
<font color="#c200ff">Clocks</font>
GPU Clocks表示渲染一帧耗费的GPU时钟周期数,和GPU Times一样,也是用于衡量GPU性能的主要指标。通过GPU Clocks,开发者可以快速定位项目的GPU压力主要来自哪些场景,并结合其他GPU参数对GPU压力情况进行具体分析。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313071-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
<font color="#c200ff">GPU Utilization</font>
Fragment Utilization和Non Fragment Utilization分别表示图元处理和非图元处理任务处于活动状态的时间百分比。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313074-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
当Non Fragment Utilization高时,开发者可以从面片数、面剔除、模型复杂度等角度着手进行优化;而当Fragment Utilization高时,则考虑项目中是否存在Overdraw过高、Fragment Shader过于复杂等问题。
<font color="#c200ff">GPU Shaded</font>
在GPU Shaded下,可以获取到相关的Fragment shaded、Vertices shaded、Cycles/Pixel指标数据。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313084-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
其中Cycles/Pixel表示平均每个像素耗费的GPU时钟周期。当画面的Shader复杂度过高/或者Overdraw过高时,GPU需要消耗大量的时钟周期对Shader进行运算,容易造成GPU耗时变高,造成卡顿。通过Cycles/Pixel,即可快速定位高Cycles的场景,需要进一步判断场景的GPU压力是否是由于Shader复杂度过高还是Overdraw过高造成,进行有针对性的优化。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313085-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
Fragment shaded表示每帧Fragment shader执行了多少次,用Fragment shaded数除以设备分辨率,可以侧面反映项目的Overdraw情况。
当Overdraw较高时,容易引起发热和能耗方面的问题。我们可以通过降低半透明粒子特效的粒子数量、使用不规则面片代替矩形面片渲染粒子特效或UI等方式,减少项目的Overdraw层数,降低GPU压力。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313086-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
而Vertices shaded则表示每帧Vertex shader执行了多少次。使用Vertices shaded除以输入图元数,即可得到平均每个图元进行了多少次Vertices shaded。UWA推荐平均每个图元执行次数应控制在1.5次以下。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313087-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
<font color="#c200ff">GPU Bandwidth</font>
和CPU一样,GPU Bandwidth也是芯片耗电的重要指标。当GPU持续进行高负载外部读写时,掉电就会过快。UWA的GPU Bandwidth模块统计了测试过程中单帧的读写带宽总量,通过查看GPU Bandwidth模块,可以快速定位测试过程中带宽较高的场景和原因,并进行进一步测试优化。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313090-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
<font color="#c200ff">GPU Memory Bus Utilization</font>
GPU Memory Bus Utilization,即每帧GPU内存总线负载。它表示当前GPU带宽消耗占总可用带宽的百分比。当GPU Memory Bus Utilization持续较高时,说明GPU访问内存的频率过于频繁,可以通过减少纹理资源与网格资源的大小和数量控制GPU缓存的占比。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313091-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
<font color="#c200ff">GPU Primitive</font>
渲染面是产生GPU压力的重要因素之一,渲染面过多可能是模型过于复杂;也可能是地形、大建筑物等大面积模型没有进行适当的拆分,导致进入视域体的面片可能不多,但提交GPU的渲染面依然很多。
对于这种情况,我们可以通过GPU Primitive下的各项参数来进行初步判断。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313095-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
<ul><li>Input Primitives:提交到GPU端的图元总数,该数值基本等同于引擎端统计的渲染面片总数。</li></ul>
<ul><li>Visible Primitives:在GPU端通过各种裁剪之后,留下的参与渲染的三角面。</li></ul>
<ul><li>Culled Primitives:因为在视域体外而被裁剪的三角面,因为朝向而被裁剪的三角面。</li></ul>
GPU图元处理数量过多会对设备的带宽和能耗造成较大的影响,应尽量在程序端完成剔除,并减小送往GPU的图元数。在3D场景中,比较理想的情况下,可见图元的数量应该接近或高于 50%(对于大部分模型,有一半三角面会因为朝向被裁剪)。如果某些角度下,可见图元的比例非常低,则很可能存在上文提到的第二种情况,从而可以针对性地检查和优化场景中,这个角度下,被提交到GPU的大面积模型。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313099-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center>
</div>
<font style="line-height: 40px;"><strong>2. GPU渲染分析</strong></font>
GPU Clocks是衡量GPU性能的主要指标,结合该曲线,开发者可以快速判断各个场景中的GPU压力。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313102-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
同时,UWA也展示出了GPU Shaded、GPU Primitive指标的均值和性能走势。当某个场景中的GPU Clocks较高时,通过这些指标的推荐值和性能曲线,开发者就可以快速判断是哪些参数造成的GPU渲染计算压力,并采取相应的优化方案。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313103-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
<font style="line-height: 40px;"><strong>3. GPU带宽分析</strong></font>
由于GPU读、写带宽较高时都会造成大量的发热和耗电,需要开发者重点关注。
在相关参数中,也展示了GPU Memory Bus Utilization、GPU Primitive参数。比如当GPU Primitives较高时,就说明提交到GPU端的图元总数较多,可能引起较高的带宽压力。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313104-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center>
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313105-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
<hr>
<font size="3" style="line-height: 45px;" color="#c200ff"><strong>渲染资源分析</strong></font>
当参与渲染的纹理和网格资源越多、采样越多时,资源内存会变高,GPU带宽和GPU Clocks也会相应上涨。为了保证让参与渲染计算的资源物尽其用,开发者可以手动开启纹理和网格资源分析功能,定位这些资源的具体使用情况。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313106-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
<font style="line-height: 40px;"><strong>▎纹理资源分析</strong></font>
在纹理资源分析页,除了纹理资源的内存、数量、尺寸等参数外,我们还可以查看纹理渲染利用率、是否开启Mipmap和Mipmap采样率等数据。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313107-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center>
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313113-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
通过纹理渲染利用率,开发者即可快速定位到一直在内存中但从未参与过渲染的纹理资源,以此排查是否存在场景中不可见的渲染物体、不合理的打包和加载策略等可能造成此种浪费的因素。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313114-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center>
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313115-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
而通过Mipmap 0层采样率是否较低(低于20%),则可以判断哪些纹理资源的尺寸过大,开发者就可以通过降低这些纹理资源分辨率缓解内存和GPU压力,同时也不会影响画面效果。
<font style="line-height: 40px;"><strong>▎网格资源分析</strong></font>
在网格资源分析页,除了和纹理资源相似的资源渲染利用率外,我们也可以查看网格的最大屏占比和最小渲染密度数据。渲染利用率为0的网格资源和纹理资源优化方式相似,而网格最大屏占比和最小渲染密度则可以用于排查网格资源的精度是否合理。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313116-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
当网格的最大屏占比小于0.02%时,说明网格在手机屏幕中只占很小的一部分,可见性较低。如果同时网格的复杂度较高,就说明网格的精度过高,开发者可以考虑使用更低精度的模型进行替换。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313117-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center>
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313119-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
渲染密度则表示在平均每一万像素中网格的顶点数,如果该值大于1000,则说明我们在很小的画面中绘制了过于复杂的网格。因此,当此网格的渲染密度最小时,该数值仍然高于1000,那么此网格的顶点数大概率是过高的,开发者可以考虑对这些网格资源进行减面操作,或使用LOD分级处理。
<hr>
<font size="3" style="line-height: 45px;" color="#c200ff"><strong>Overdraw快照</strong></font>
Overdraw表示项目运行过程中单帧中整个屏幕被填充的倍数。在游戏运行过程中,场景中半透明物体的重合会使得同一个像素点在一帧中会被绘制多次,容易造成Overdraw过高,引起设备发热。
在Overdraw快照模块,UWA通过Fragment Shaded(渲染像素总数)与设备渲染分辨率,换算得到了Overdraw的计算值,以帮助开发者对项目的Overdraw情况进行排查。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313120-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
在测试GPU模式时,开发者可以手动Dump采集场景中具体的Overdraw情况。
<center><img src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313121-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
在Overdraw快照模块,即可查看Dump帧各个相机的Overdraw情况。其中Overlay-UI(UWA)相机展示的是UGUI中Overlay部分的Overdraw信息,即所有没有挂在任何相机下UI的Overdraw信息。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313122-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
在柱状图下方,还可以查看所选柱状图的Overdraw热力图,其中颜色越红,表示该处像素在当前帧中被填充的次数较多,Overdraw较高,GPU的压力就越大。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313126-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
开发者可以结合报告截图和Overdraw热力图,更便捷地定位项目的Overdraw压力来源。
<hr>
<font size="3" style="line-height: 45px;" color="#c200ff"><strong>GPU温度</strong></font>
GPU压力较高时容易引起设备发热。UWA统计了设备的GPU、CPU、电池温度,以便开发者判断设备发热的原因是否主要来自GPU。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313127-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
若确认是由于GPU压力导致发热,接下来可以进一步排查与GPU温度情况有关的参数,譬如FPS、GPU Clocks、GPU bandwidth。而功率则会和GPU温度相互影响,也是反应能耗和发热问题的重要参数。
<center><img width="100%" src="https://cdn.eetrend.com/files/2023-08/wen_zhang_/100573424-313128-image…; alt="UWA推出全新GPU性能测评工具,支持多款PowerVR芯片优化"></center><br>
这里特别建议大家:由于CPU和GPU芯片位置较近,当CPU压力较大产生发热时,也可能带动GPU一起发热。所以在优化GPU发热问题时,也要适当结合CPU压力情况进行排查分析。总的来说,当项目存在耗电快、温度高的现象时,开发者可以从GPU性能压力、GPU带宽、CPU主线程、CPU子线程等方面着手,优化发热问题。
———————————
UWA提供的性能测评工具更进一步地拆分和细化了项目的GPU压力成因,为您带来前所未有的优化体验。UWA的目标是让您更便捷、高效地定位项目的GPU压力来源,告别盲目猜测,拥抱精准优化。
如果您对新功能感兴趣,请前往UWA官网下载最新版UWA SDK:
https://www.uwa4d.com/#download
<hr>
<font color="#9a9a9a">本文内容来源侑虎科技 UWA,谢谢</font>
<br>