苹果再下一盘很大的棋?Metal优化作用及影响浅析

苹果再下一盘很大的棋?Metal优化作用及影响浅析
来源:3vsheji.com 作者:火石 发布时间:06-24

WWDC大会上,大部分网友关注的多是iOS 8的新功能新界面,但这是苹果的开发者大会,苹果推出的Metal以及新的编程语言Swift其实更重要,普通用户暂时看不到这些技术的作用和意义,但是对开发者来说,他们才更重要,苹果掌控整个iOS软件及硬件平台的能力太强大了,也能更好地服务开发者,这显然是碎片化的安卓系统暂时比不了的。

Metal是什么?开发者的救星吗?

AMD当初推Mantle优化时,曾把底层API(Low-level API)这个让开发者头疼而普通人根本不了解甚至没听说的技术名词带到了大众面前,我们也知道了这样一种情况——尽管有着DirectX、OpenGL、OpenGL ES等标准化图形API,但是开发者依然要面临API效率不高、间接开支太多、游戏性能优化不够等窘境,这跟硬件架构发展速度有关,也跟API自身发展太慢有关。

所以AMD提出了Mantle,它源于主机平台的优化技术,而AMD已经拿下了索尼和微软的主机订单,但是Mantle主要是用于PC系统的,而苹果的Metal主要用于自己的iOS平台,桌面的Mac系统倒不是重点。

苹果的Metal不仅在理念上跟Mantle相近,实际上这个API的名字也很有意思,表明上看Metal不过是“金属”的英文,但是Close To Metal(简称CTM,详细解释参考维基百科)已经是专有技术名词,这个词不太好翻译,中文中好像没找到有对应的意思。CTM之前是ATI提出的一种低层级硬件编程接口,当初主要是用于GPGPU通用计算,后来成为Stream SDK中的一部分,到现在AMD搞的已经是HSA异构运算了,CTM的提法也很少见了。


WWDC大会上苹果公布了Metal API的使命,首先是大幅降低间接成本

总之,苹果推出Metal API,其目的不外乎如下几个,最重要的当然是极大地减少间接成本(overhead这个词也不太容易翻译,字面意义指的是间接开支或者成本,但是这个意思还不够准确),之前介绍Mantle中我们有过实例解释,如今的3D渲染中,GPU渲染速度很快,但是CPU处理速度反而跟不上了,所以GPU通常要等CPU完成任务才能进行下一步,这里的等待时间就算是overhead的一个例子,Mantle就有助于降低等待时间。

其次,苹果的Metal不仅可以用于图形渲染,还涉及通用计算(compute),这一点所知信息更少,不过ARM、AMD、高通对异构运算都很上心,苹果虽然推动国OpenCL通用计算标准的发展,但在这一点上之前并没什么动静,Metal能带来什么新改进还有待开发。

苹果还推出了Metal Shader语言,同时为图形及计算优化,支持预编译着色器、状态对象以直接的及命令调度,有助于开发者在应用中获得最高性能及效率。

不过更让我感兴趣的是苹果提到了多线程效率优化的问题,从中我们可以或许可以看到苹果未来处理器的设计。目前的A7是双核的,搭配1GB内存,有了Metal之后,苹果大幅提升了CPU的多线程效率,多核CPU也有了用武之地。此前的传闻就表示iPhone 6所用的A8处理器会是四核心设计,同时搭配2GB内存,有了Metal之后苹果升级四核处理器也越来越可信了(苹果的PDF资料中介绍线程优化部分使用的是三线程例子,A8会不会这么奇葩使用三核心呢?)。

Metal的性能及局限,会取代OpenGL ES吗?

说了这么多Metal的有点,它到底能为我们带来什么好处呢?尽管目前还没有公开的测试,但是从开发者那里零星获得的消息显示了Metal带来的性能改进——10倍,当然这里的10倍提升不是最终的游戏性能,而是游戏渲染中的draw call命名数量,这个说法跟AMD之前介绍Mantle时都是一模一样的,后者也是改善了多线程效率,draw call命令数量提升10倍。


AMD介绍Mantle时也提到了draw call命令数量的问题,主流的水平是3000-5000个

单纯的Draw Call命令数量还是不够直观,我们来做个对比——AMD之前介绍Mantle时也是以draw call为例,目前主流的桌面硬件性能是生成3000-5000个,Mantle的目标是10万个,而在支持Metal的游戏《禅境花园》中,有了Metal支持之后其draw call命令生成能力也达到了5000个,换句话说A7+Metal之后draw call上性能已经达到了桌面PC的水准。


禅境花园的渲染效果图

Metal的局限:只支持A7,或与PowerVR 6架构有关

Metal听起来各种美好,只是也会有一定的限制,苹果在WWDC上提到它只支持A7处理器,今年的A8什么的当然也会包括在内的。A7是第一款实用的64位移动SoC处理器,它使用的GPU为PowerVR G6430,算是4个“核心( Imagination称之为Cluster簇)”吧。

苹果Metal目前只支持A7可能有两个原因,商业上的策略或者技术上的限制,A7之前是iPhone 5上的A6及iPad 4上的A6X,他们并不过时,市场策略原因不支持Metal有点解释不过去,这跟苹果风格也不太符,笔者还是倾向于技术限制,因为A7使用的PowerVR 6架构跟之前iPhone、iPad所用的PowerVR 5系GPU有很多不同。

A7的PowerVR G6430属于Rogue架构,不仅提升了性能及并行性,而且Rogue架构支持更多新技术,比如OpenGL ES 3.0及OpenCL 1.2、DX11等,PowerVR 6系列也是首个通过OpenCL 1.2认证的移动GPU,在图形渲染、计算及并行方面都有很大改进,这也许是A7上才开始有Metal的解释,AMD也是在图形、计算性能双重进步的GCN架构上才推出了Mantle。

Mantle会取代OpenGL ES吗?不会,但OpenGL ES地位会变得尴尬


A7硬件与游戏层之间原本是OpenGL,现在中间的变成了苹果的Metal

WWDC大会上,苹果介绍Metal时还谈到了与OpenGL的对比,上图做的就很有意思,Metal与OpenGL同样位于游戏和底层硬件之间,但是OpenGL给人的感觉是臃肿的,而Metal更薄,预示着效率更高,代价更小。但在谁死谁活的问题上,Metal显然不可能取代更标准化的OpenGL规范,正如AMD的Mantle比DX11高效,但也没取代DX11一样。

但是,在简洁高效而且性能又好的Metal面前,OpenGL ES的地位肯定会有些尴尬,在苹果和Metal的双重吸引力之下,开发者有什么理由不选择Metal呢?


对于OpenGL来说,他们要做的就是如何奋起直追,微软都更新DX 12规范了,而之前的GDC大会上也开发者们展示过Approaching Zero Driver Overhead(近似零驱动过载)这样的技术,效果、原理跟Mantle及苹果的Metal都差不多,OpenGL的动作要够快才行,不然等Google公司也来个自有API标准之后,OpenGL真的要颜面无存了。

Metal前景如何?道路是光明的,钱途也是光明的

虽然小编自诩果黑,不过在Metal似乎找不到什么“喷点”,因为Metal一发布,Crytek、宝开(PopCap)、EPIC、Unity等引擎公司就跟进了,这态度跟AMD当初推Mantle优化时可不一样,EPIC创始人Tim Sweeney不仅是NVIDIA的好朋友,更是坚定的水果派,他对Mantle优化一直无动于衷,但Metal很热心,UE4引擎已经开始支持Metal了,首款游戏就是《禅境花园》,此前这款游戏的开发者已经展示了Metal在游戏开发中的强大作用了。


首先支持Metal API的公司都是大腕级的,还都有很出名的引擎

考虑到苹果目前的地位,Metal获得移动平台游戏开发商的鼎力支持并不是难事,厂商完全可以把Metal的代码加入到自己的游戏引擎中,这样未来还可以轻易移植到iPhone 6或者iPad Air 2、mini 3等产品上去。

再往后说,尽管Metal目前只适用于A7处理器,但是未来潜力不可小觑。苹果现在已经不局限于单纯的数码设备了,无心插柳的AppleTV也成功打进客厅,如果哪一天苹果推出主机一样的游戏平台大家也不要惊讶,现在的移动处理器在性能上已经比得上上一代主机了,NVIDIA最乐于将Tegra K1与Xbox 360、PS3比较。在这些涉及游戏较多的市场中,Metal大有可为。

Mac系统因为使用的都是PC厂商的硬件,不论是Intel的CPU还是AMD、NVIDIA的GPU,苹果暂时都没有iOS平台那样的掌控力,所以Metal短时间内不可能登录Mac平台,但是别忘了,每年都有传闻称苹果在开发自己的处理器取代Intel处理器,初期可能会从Macbook Air着手,自家的A系处理器取代Intel、AMD也不是没这么可能,届时Metal也一样可以发挥效果。

安卓怎么办?该把赌注压在Google身上吗?

安卓与iOS双雄的竞争早已如火如荼,开放的安卓已经在数量和份额上超越,双方的应用程序数量无法拉开差距,但iOS上的应用程序质量和体验公认优于安卓平台的,而苹果在iOS平台上推出Metal优化无疑会进一步加大iPhone、iPad游戏质量上的优势,安卓掌门人Google是不是该做点什么了?


安卓目前正向64位升级,但在图形API上又落后苹果了

某些方面来看,Google跟苹果一样也是掌握着安卓生态中的系统一环,二者都没有掌控硬件中的GPU环节,再考虑到安卓系统的碎片化,Google的控制能力显然不如苹果,他们依靠自己的力量推出类似Metal API的可能性实在很小,因为安卓硬件系统中存在多家不同的GPU供应商,Imagination的PowerVR、高通的Adreno、ARM的Mali再加上NVIDIA自家的GeForce、Vivante的GCxx系列,他们各自的架构不一,各家的优化工具也不同,巧妇Google面对这么多不同的菜系也很难 做出满足每个人口味的大餐。

剩下的路只能是结盟,一种可能是Google联合上述五家厂商共同推出Google版Metal优化API,第二种可能则是Google与OpenGL官方组织合作,从OpenGL ES规范着手优化,这就跟微软的DX 12标准有点相似了。

无论哪种选择,安卓生态软硬件的复杂性都会让这条路很难走,因为牵涉多个厂商的利益,最终在效率和效果上难免要打折扣,很容易陷入一种“所有人都有的功能相当于所有人都没有”的尴尬地步,Metal绕开OpenGL ES目的就是提高效率,而同样是这样的目的,苹果还推出专门的Swift语言。

再说了,OpenGL ES 3.0规范制定这么久了,安卓到4.3才开始支持,手机厂商可是很少会对以前的旧机型升级安卓4.3或者4.4系统的,国内公司尤甚。

Google会这么做吗?可能他们已经在做了,运气好的话,本月的I/O大会上或许就能宣布什么消息,不一定是推出优化API,至少应该表态让大家看到安卓平台也在努力优化游戏性能,不然的话开发商越来越不重视安卓优化了,这对Google来说可不是好事。

Metal不会改变游戏规则,但让iOS更美好

苹果推出的Metal名字乃至作用跟AMD的Mantle都有很多相似之处,它不是那种彻底改变规则的事物,但有了它,iOS平台上的游戏开发以及最终的游戏性能都会更简单更高效,最终不论是开发者还是用户都会对苹果的平台更依赖,而且也给对手除了一个难题——使用Metal开发的游戏在移植到其他平台时会更困难,如果竞争对手不能提供有竞争力的选择,那么应用体验上两极分化的局面更难解了。


你可能感兴趣的:(游戏开发,引擎开发,图形引擎,图形图像,游戏引擎,手机游戏)