一众大牛都在Metal刚出来第二天就答了题了,但即使是迟了我觉得我也应该说两句。主要是Metal和OpenGL的比较。
以下都是公开信息和我自己的评论,不代表公司观点,严禁转载。(所以评价OpenGL缺点较多,Metal基本上就是把那些缺点取反啦,大家意会,意会。。)
-----
从Developer的角度来说,
1)Metal的出现就是要新学一套API/Shade Language了(废话)。但是如果尝试过就会发现,Metal API和SL要相对『自然』和『先进』的多,这里主要是跟OpenGL比较而言。
OpenGL由于其悠久的历史,整个架构非常落后,主要是方便机器使用,而不是方便人使用。(那时候SGI的大机比人精贵多了)尽管近年来它多次试图改过自新,但依旧没有改变那个状态机架构——这个架构简直就是软件工程的噩梦。最近的新兴的程序语言特性:面向对象(这个新么?新么?),闭包(装逼利器),多线程(手机都8核了喂!)等等对于OpenGL这个绝大部分API连返回值都没有的平台来说,来说简直都是外星生物。而Metal由于年轻,可以吸取这些编程语言领域最新的进展,让众码农们写代码时敲着青轴键盘如沐春风。。。。
2)Metal的CPU消耗比OpenGL显著小。既然OpenGL离机器更近,为何性能会不如Metal呢?这个我觉得就完全是架构问题了。优化过任何OpenGL driver的人都知道,OpenGL这个东西有个特耗时间的步骤,叫做state validation。通俗的说,就是在每次编译好的命令发送到GPU去之前,CPU会把整个OpenGL的状态检查一遍——该bind的texture bind一遍,该编译的shader编译一遍,program检查一遍。。。等等,以防止GPU碰到任何unexpected situation(因为GPU为了效率,结构一般比较简单,碰到错误的东西一般直接就傻那儿了,恢复不了了)这个state validation是每个改变了状态的drawcall和每个frame都会做的。。。(想想这有多少!)而且坑爹的是不管所谓state改变都多大,哪怕你就改了个uniform,OpenGL也得把所有状态查一边,因为他的所有状态都是在一个大状态机里!Metal基本上最大的improvement就是这个,怎么实现的咱就不说了。。。(big brother我怕怕。。)
3)Metal的表现比OpenGL稳定。除了OpenGL的大状态机设计让developer写起来很崩溃,它还有个无语的地方就是极端不透明。翻一翻红宝书蓝宝书什么的,动不动就是OpenGL will handle this, will handle that. 这点其实让追求性能的游戏开发者非常抓狂,因为你不知道OpenGL什么时候会做出类似于mmap()这样的操作,甚至脑抽启动一下JIT编译器什么的,让你的游戏瞬间卡死。。。(Android那个garbage collection有时候也是同样效果,objective-c去掉了GC对于我们反正是好消息)而Metal则做到了尽量透明,也就是所有耗时的操作,都是在可以预计的时间开始,方便developer安排自己的程序。
4)当然,如果一个游戏是GPU bound,而且优化得跟console游戏一样好(Console优化几乎就是在写gpu microcode),那Metal可以带来的帮助十分有限。但大部分mobile平台上的游戏 1)是CPU bound(draw-call bound),2)小draw call何其多,3)开发时间段,developer没有机会和时间精调。所以Metal可以带来显著的CPU使用率下降。这样developer可以要么享受更低的CPU功耗,要么用节省下来的CPU上更牛逼的AI,处理更多的物理,等等。
5)对了,OpenGL的大状态机搞multithread很悲催,而Metal是multithread-native。如果没有什么牛逼AI可以占用CPU资源的话,那就霸占别的CPU core发海量drawcall吧!
----
从user的角度来说,就是能看到更牛掰的画面啦。我认为尤其是场景丰富度(增加drawcall)或者AI和物理(增加available cpu time)两方面应该有希望得到显著的提高。
----
从商业环境的角度来说,Metal能不能成功,主要还是要看同行们的支持力度啦。现在的mobile gaming领域,大部分游戏貌似都用得那几家的引擎,所以他们都已经搞定了。(crytek,unity,ea他们在6月发布前就已经开始做demo了,开源cocos2d也已经有初步支持了)其他的开发者们,像鹅厂这种,不知道有没有什么行动。。。。(我也想问题主大牛!!谁能带我拜见一下啊喂!!)。然后上面有人提到mobile gaming进客厅的事情。。(咳咳。。咳咳。。)
----
最后从implementer角度来说。我估计这个Metal跟Microsoft DX12, AMD的Mantle十分类似(只是估计,因为我无法知道另外两个,DX12连个详细spec都不给普通开发者看 * _ *),但Apple有一个的优势就是从bare metal到app层都可以自己控制,实现想法简单一些,走的快一些。
----
关于不是开放API这个事情。。。其实也是不得已而为之。。。要知道Khronos那(nei)玩意儿。。。恩。。。就连Nvidia都忍不了他们。现在Nvidia弄了一大堆没经过ARB批准估计也永远批准不了的extension实现了类似Metal/Mantle/DX12的功能,什么token rendering。。。已经把OpenGL弄得像一门新语言了。OpenGL其实本来不同平台的优化要求就完全不同,支持的extension千差万别,通用性也根本无从谈起。它2000年或许是先进生产力,现在2015年,是应该一代新人换旧人啦。