实测使用multitexture的PVRTC格式耗电量大于单纯根据节点排序优化节点

前言:
我将引擎的logic、render计数器(counter)拉出来改了使用,实测数字显示跟cocos提供的左下角debug数值相同。
测试共拥有8张atlas,图片都使用江南百景图中的测试图片。
实验:
我将png的图片打包使用成pvrtc并在iphone7 iphone8上运行,共8张png(被pvrtc格式扩展后看以看成每张都是1024*1024).
实验数据是
不使用multitexture,单纯根据节点布局实验数据:
image
使用multitexture
image

无论是iphone7 还是iphone8 GPU的较长测试时间(5分钟)均值接近,基本可以认为等同,CPU的较长测试时间(5分钟)峰值相差较大,均值稳定接近
但是耗电量差距较大,multitexture的耗电量稳定的是不使用的2倍
image

如果不使用节点排序的情况,最差乱序版drawcall是1203,耗电量非常大,但不做讨论,这里只讨论优化过的节点排序效果.

问题:
扒拉了引擎的计数器,发现总均值(cpu+gpu)相近的情况下,为什么耗电量居然相差两倍,是否还有其他影响因素
(使用插件是商店的YHMultitexture)
image

无论是用YHMultitexture还是论坛其他的multi技术分享
例如https://forum.cocos.org/t/topic/137651还是https://forum.cocos.org/t/topic/136349
原理都一样,不会影响到具体测试数值,这里不做具体讨论

@jare 大大,帮忙看看,或者说耗电量问题还跟其他的相关?我目前只知道gpu+cpu,实在想不到还有其他相关

话说,multitexture这个东西到底怎么用呢? :8:

这个简要回答解释不清楚,建议看看我在问题中的两个multitexture链接,里面基本有解释

8张atlas做multitexture,耗电量不一定更低,因为gpu的计算量变大,显存负载增加,这些都是耗电和发热的原因

正常情况,gpu会用shader代码计算每一个像素,但是gpu可以同时计算很多个像素,所以渲染一帧的时间很短

但是multitexture的shader代码里有if,gpu为了还能大量并行计算,会把每一个分支的代码都计算一遍,这就导致每一个像素都要从不同的图集里采样8次(CCSampleWithAlphaSeparated就是采样函数),虽然这个过程因为gpu是并行计算而不会增加太多耗时,但这都是实实在在的gpu与显存的沉重工作,耗电和发热就不奇怪了

所以multitexture也不能滥用,只适合少量图集就能降低大量dc的情况,计算量x2和计算量x8是完全不同的性能表现

正解,这东西慎用

明白,谢谢解惑