浅谈手游的图形API 手游游戏信息可视化图表

最近,不少玩家都发现《王者荣耀》更新到某个版本后,似乎变得特别卡 。而有心的朋友进一步观察,发现在是由于《王者荣耀》的“优化”引起的 。《王者荣耀》针对不同机型,会使用不同的图形API渲染图像,而这些API的效率并不相同 。就算是同样配置的不同机器,《王者荣耀》使用的API不一样,流畅程度也大不一样 。

浅谈手游的图形API 手游游戏信息可视化图表

文章插图
很多玩家都发现《王者荣耀》最近更新后掉帧,iPhone也不能避免,这是什么造成的?
此外,《王者荣耀》进行更新后,所使用的游戏API可能会发生变化,这会导致游戏突然比上一个版本变得卡顿了很多,或者流畅了不少 。为什么使用不同的图形API,会有不同的“优化”效果?今天我们就以《王者荣耀》为出发点,谈谈手游中所使用的API吧 。
《王者荣耀》都会使用什么图形API?
很多朋友或者并不明白游戏API的意思 。简单来说,游戏想要显示图像,就需要使用相关的图形API和系统对接,而使用不同的API,会大大影响游戏的运行效率、显示效果,流畅度和特效都会有所不同 。具体到《王者荣耀》,虽然大家下载的或者都是一样的安装包,但它却会根据不同的机型,选择不同的API运作,因此流畅度也各不相同 。《王者荣耀》都使用什么API和怎样的优化方略?我们从游戏登入界面就可以观察到 。
浅谈手游的图形API 手游游戏信息可视化图表

文章插图
这里会显示《王者荣耀》的版本号,最后的“O2,F”则很大程度上可以看出游戏会否流畅
仔细观察《王者荣耀》登入界面的左上角,可以发现有“O2,T”、“O2,F”等字样,视设备不同,还会出现“O3,T”、“O3,F”、“V,T”、“M,T”,这些字样其实就标明此时的《王者荣耀》所使用什么图形API来运作,以及是否使用多线程优化,字样的含义具体如下:
O2:使用OpenGL ES 2.0 API
O3:使用OpenGL ES 3.X API
M:使用Metal API(iOS平台特有)
V:使用Vulkan API(安卓平台特有)
【浅谈手游的图形API 手游游戏信息可视化图表】T:使用多线程(多线程True)
F:使用单线程(多线程False)
如此一来,我们就很容易明白《王者荣耀》登录界面出现的字样意味着什么 。例如出现了“O2,F”,就意味着游戏此时使用的是老旧的OpenGL ES 2.0接口,并只调用单线程,没有对多核心多线程进行优化 。
我们也可以看到,《王者荣耀》所使用的图形API以及优化方略是多种多样的,几乎囊括了手游大部分会出现的情况 。这些图形API在效率上有优劣之分,使用不同的API会极大程度影响流畅度,这也是为何《王者荣耀》有人觉得卡顿,有人觉得流畅的一大原因 。
手游使用的图形API孰优孰劣?
为什么你玩《王者荣耀》会觉得卡顿?最有可能的情况就是,《王者荣耀》既使用了老旧的图形API,又没有进行多线程优化,例如上文提到的“O2,F” 。不同的图形API的确会对运行效率造成影响,我们这就来说说手机中常见的几个图形API 。
OpenGL ES 2.0 。这是一个相当古老的图形API 。OpenGL ES由OpenGL演化而来,精简了OpenGL的大量内容,以适配移动设备,几乎所有的手机都会支持OpenGL ES这个图形接口 。OpenGL ES 2.0这个版本在2007年已经发布,安卓2.0(NDK)/安卓2.2(JAVA)、iOS5以后的版本,以及黑莓OS、WebOS等平台都支持OpenGL ES 2.0,普及率非常高 。
浅谈手游的图形API 手游游戏信息可视化图表

文章插图
OpenGL ES 2.0可以看做是OpenGL 2.0的子集,但也有一些不同之处
OpenGL ES 2.0和现在最新的图形API相比,显然是不够先进高效的,在一些使用情况下还会颇显麻烦 。例如,针对不同的硬件,它需要游戏提供不同的纹理包进行适配,如果你是一名安卓游戏的老玩家,应该还会记得以前玩安卓手游需要为PowerVR、Mali、Adreno、Tegra等不同的GPU找不同的纹理包,这是OpenGL ES 2.0带来的局限 。在效率方面,OpenGL ES 2.0以现在的目光来看也不甚理想,因此如果你运行《王者荣耀》发现用的是“O2”,而且没有对多线程优化,极有可能会出现掉帧卡顿 。
浅谈手游的图形API 手游游戏信息可视化图表

文章插图
在几年前,玩安卓手游基本都得找GPU对应的纹理数据包,这是OpenGL ES 2.0带来的局限
OpenGL ES 3.X 。从名字就可以看出这是OpenGL ES的更新版本 。安卓4.3、iOS7以后的版本支持OpenGL ES 3.0,安卓5.0之后的版本支持OpenGL ES 3.1,安卓6.0以后的版本支持OpenGL ES 3.2 。而苹果在iOS8开始主打Matel图形API,不再以OpenGL ES为重点 。