四.鸿蒙Next游戏平均帧率分析
这里我们把顺序倒一下,先做平均帧率分析。我们首先肯定余总说的31%平均帧率提升没问题,然后这31%是“方舟图形引擎”和芯片共同作用的结果,那下面我们就来看下两者分别提升了多少比例。
1.鸿蒙Next游戏性能的软硬件提升比例
余总原话中“方舟图形引擎”是在前面的,但具体测试我们是从后面开始的,先得确定纯芯片硬件对游戏的提升,再反推得到软件部分的数值。为此,我们直接上3dmark这个游戏测试权威,下图就是最近百度上,某知名评测博主发布的一次深度评测跑分对比:
此次评测的主体对象就是mate70 pro+和mate60 pro+,新老两款手机都升级了最新鸿蒙4系统,同时使用了相同版本的3dmark(安卓平台),因此测试的OS系统、应用等软件部分几乎是一样的,差异也就直接反映在了硬件上。
均测结果是mate60pro+跑分1568(平均帧率9.39帧),相比去年测试圈认可的1500~1550略有增加,这也说明本次测试用了鸿蒙4最新版,因此这款mate60pro+和余总在发布会上对比的软硬件几乎也是一样的。而mate70pro+跑分则是1880(平均帧率11.26帧),总体提升幅度为20%,当然现阶段也有其他博主跑1900和1850分左右的,因此1880处于中上水平,数据相对可靠。
到这里,我们知道纯硬件的提升大概在20%左右,而剩下“软件部分”的提升则可以通过“帧率模型”估算得出大致为12%。这里并不是简单相减(31%-20%=11%),而是需要在帧时间上进行软硬拆分的,具体算法可以在后续介绍。
现在问题是余总对比的是鸿蒙Next版mate70 pro+和鸿蒙4.x版mate60 pro+,因此这里的软件提升,并不是鸿蒙Next相对友商OS的提升,而是鸿蒙Next的OS层相对于鸿蒙4的提升。也就是说,这里软件部分的对比基准是鸿蒙4,而提升幅度就是鸿蒙Next的改进部分。
2.鸿蒙Next改进部分对游戏性能提升的分析
下面我们将重点讨论鸿蒙Next的OS层改进部分对游戏性能的影响。由于没有这方面的确切数据,我们目前的最佳方案,就是从鸿蒙Next官方明确的性能提升手段中,找到我们能确认影响游戏的技术。这里我们找了一圈发现只有下面三项符合:
首先是“方舟图形引擎”改进的2D绘图性能提升了26%,这个是官方明确的,这意味着鸿蒙Next的App能够提供更流畅、更高效的视觉体验。官方说法是这26%来自鸿蒙Next改进的高并行低负载“统一渲染引擎”,那这个“统一渲染引擎”对游戏有提升么?其实“统一渲染引擎”的原理和Vulkan是类似的,只不过主要针对多进程App进行优化。而游戏主体由于是单进程,并且在mate60 pro+这种高端机型上会直接调用Vulkan,因此实际性能提升非常有限。
其次是鸿蒙Next改进的“方舟调度引擎”,这个也是官方明确的。余总PPT的介绍是,鸿蒙Next使用了改进的“方舟调度引擎”后,流畅度提升39%。这背后大概率是改进了“动态资源调配”功能,特别是对CPU、GPU资源的优化调配,而游戏是资源(数据)消耗大户,因此能确认这项技术改进也和游戏有关。但这里“调度引擎”依然主要还是针对多任务,因此游戏提升也很有限。
最后就是在硬件优化层面(内核、驱动等),我们肯定鸿蒙Next是要好于(至少等于)鸿蒙4的,否则鸿蒙Next就成逆向优化了...那这一块是实打实的鸿蒙Next核心优化,至于在游戏性能方面能提升多少,因为瓶颈不会在这块,那也只能说是次要提升。
以上三项就是官方明确并且和游戏相关的性能提升手段。如果我们按8:2原则定义游戏性能提升的主次比例,显然这三项只能占2成这部分,除此之外如果还存在其他手段,那也只好归为更次要的手段,因此次要项的总体比例不会超过3成,否则余总说的“方舟图形引擎”对游戏性能的提升就更少了。那么问题来了,剩下的7~8成也就是游戏性能中8%~9%左右的提升是从“方舟图形引擎”哪部分来的呢?
这里有一点大家差点忘了,鸿蒙Next是跑不了Android原生应用的(包括游戏和前面的3dmark),因此官方是主推和开发商一起合作开发、优化的,也就是说鸿蒙Next上的应用其实都是定制的,这一点App和游戏情况差不多。所不同的是,在图形性能优化方面,两者存在本质的区别:使用系统UI的App其主体优化来自系统底层,也就是说只要设计合理,App应用层的绘图性能就很难上去了,因此之前说的26%可以确定来自OS内部;而游戏则完全不同,游戏中图形性能的主要优化来自应用层“游戏引擎”,因此在“游戏引擎”可修改的情况下,很难确定OS层到底贡献了多少提升。这也就是官方(余总)在说游戏性能方面,要笼统地把鸿蒙Next版mate 70 pro+的软硬件提升都算上才是31%的原因。
于是这里产生了一个问题,就是同样的App,如果鸿蒙Next版相对Android版性能有明显提升,那我们可以说鸿蒙Next的OS核心技术起到了作用;但是同样的游戏,鸿蒙Next要强于Android,那我们只能说鸿蒙Next版的“游戏引擎”比Android版“游戏引擎”要定制得更好。因此对于鸿蒙Next而言,从操作系统角度去和Android比游戏性能那还有什么意义呢?
要知道相对于OS层,上层“游戏引擎”的性能优化手段多了去了(具体干货可以在后续介绍),有传统的基于3D图形算法的各种优化手段,可分无损和有损两种,其中无损优化基本都是“游戏引擎”封闭内置的,而有损优化则会提供选项给玩家;还有目前流行的基于图像算法或AI(超分、超帧、动分等)的优化技术,这些图像技术都是有损的,可能会产生诸如像素错位抖动、画面延迟残影等现象,一般也提供选项。这些优化技术,虽然略微修改下就能提升10%,但由于要依赖“游戏引擎”本身,并且很多都是有损的,一般原则是能放在“游戏引擎”中的就尽量内置,实在要调用三方的就以sdk形式接入,基本不会把它们搞到底层OS系统去产生各种问题。
说到这里,大家也看出来了,其实上层的游戏性能优化技术和鸿蒙Next并没有啥关系,更不是什么鸿蒙Next核心技术。况且余总说的这些商业版3D游戏用的还都是Unreal、Unity等跨端“引擎”,难道鸿蒙4和安卓版的同款“游戏引擎”中就没有这些优化技术了么?官方一味宣扬游戏开发商要和鸿蒙Next紧密合作,是否意味着开发商自己在应用层的跨端优化和技术也可以成为鸿蒙Next的一部分呢?
另外还有一些游戏开发商为了适配鸿蒙Next,不得不对二次开发(或自研)的“游戏引擎”进行大规模、不必要的修改,由于存在各种问题,最后在稳定性和其他层面出现了很多负面影响,这是否也是一种得不偿失呢?带着同样的问题,我们再来看游戏启动速度。
五.鸿蒙Next游戏启动速度分析
我们先看下游戏启动时都干了些啥:
游戏启动时会按顺序做以下几件事:网络更新、资源加载和数据预处理,同时为了缓解等待时间,还会加入启动动画。从软件执行角度讲,整个过程就是下载数据、异步调用系统底层IOAPI,加载完再让CPU处理的过程,因此“启动速度提升”其本质就是网络/IO/内存/CPU等硬件以及OS系统性能的整体提升,和图形处理的快慢在原则上并没有啥关系。因此要是游戏启动速度提升了,那其他App的启动速度肯定也有相应提升。所以也就是说,如果游戏启动速度要和“方舟引擎”有关,那也应该是和“方舟存储引擎”或“方舟内存引擎”相关,为啥会和“方舟图形引擎”扯上关系呢?
原来情况是这样的,这里的启动速度“提升”其实是“方舟图形引擎”把原本要客户端编译的shader文件,预编译好从服务器下载,是这样提升了52%的很大一部分时间。但仔细想下这个问题,会发现漏洞很大:
1.游戏shader资源更新后,shader编译是首次运行时才执行的,之后“游戏引擎”会去读之前的Cache(BinShader),这样对于普通玩家来说,shader编译要几天甚至几周才会碰到一次,那么这种低频次“启动速度提升”有何实际意义呢?
2.远程BinShader作为一个应用层的游戏开发技术,实际上20年前就有了,早在DX8和OpenGL 2.x的“远古时代”很多网游就有用到了。这个说白了就是离线预编译+后端部署+前端下载+API加载这么个过程,和网页数据下载其实没啥区别,难道这么个东西也属于“方舟图形引擎”或者鸿蒙Next的核心技术么?确定友商们的Android搞不来?
3.作为游戏开发运营商,我们使用的Unreal、Unity甚至自研的跨端“游戏引擎”早已适配远程BinShader技术了,那怎么办呢?......
注:本系列文章旨在通过从热门技术的特定专业角度,深入浅出讨论其中的孰是孰非,从而更好地促进我们的守正创新。故而对于颠倒是非之评论,将保留完整司法权利。