本文主要是介绍如何评价 Apple 为 iOS 8 推出的 Metal 图形 API?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考
Metal Programming Guide: About Metal and this Guide
Metal Shading Language Guide: Introduction
Metal Programming Guide: About Metal and this Guide
Metal Shading Language Guide: Introduction
1 条评论
按投票排序 按时间排序
16 个回答
Milo Yip, 游戏程序员、《游戏引擎架构》译者
Jack Liu、黄灿、離娮 等人赞同
自答補充一下自己的想法:
- Apple的軟硬件平台本身不開放,無須使用Android所需的OpenGL ES標準。除了跳過一些跨平台層的適應性接口可以提升性能,從商業上考慮,同一跨平台遊戲在iOS的表現較運行Android的好,即使硬件是一樣的。估計未來評測君可大造文章了。
- 提升性能估計應該是減少CPU方面的額外開銷,並且在CPU上可以預先進行一些工作(例如shader編譯、預先組建command buffer)等。這些有可能也能減少GPU閒置時間。但這些性能優化,可能更重要的是令硬件更連續地工作,減少耗電。對於draw-call多但shader簡單的2D遊戲來說可能更明顯。
- 以前iOS和Android遊戲開發可以統一使用OpenGL。現在需要更改引擎,雖然對支持跨平台的引擎來說不會太難,最麻煩的是shader的移植。為了支持A7前的設備大概要兩套shader。可能會出現HLSL/GLSL/MSL的cross-compiler,或是要從更high level的語言編譯成這些目標語言。
Shaojing Li, Software Engineer in Compute Graphics
WatchPigs、刘典、知乎用户 等人赞同
一众大牛都在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年,是应该一代新人换旧人啦。
以下都是公开信息和我自己的评论,不代表公司观点,严禁转载。(所以评价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年,是应该一代新人换旧人啦。
Yong He, CS PhD student
钱康来、尼玛1123、ye sun 等人赞同
其实跟DirectX12没有本质区别。都是把图形接口搞成了类似console的样子,通过允许用户预创建命令列表来给驱动预先初始化的机会,从而减少驱动层面的CPU开销,将绝大多数CPU工作交给应用灵活处理。都是一样的东西,每个厂商都搞自己的硬件层API只会给开发者带来麻烦而已。另外我觉得现在关于图形接口实在是过度炒作。其实都没啥内涵。
Vinjn张静, Full-Stack Mixed Reality Engineer
Lue大毛、Colliot、道器 等人赞同
OpenGL-ES 前途堪忧,坐等 Google 来补刀。
Metal 很可能会上 Mac。Metal 和 Mantle 有关系么?长得像,名字也像。
Mac 又是用的 AMD 芯片。(误,只有 Mac Pro 用 AMD)
写游戏引擎的开心了,一年内支持了两个新的 API。
MSL 长得很像 HLSL。
Metal 是 Obj-C 的,不过考虑到只能在苹果平台使用,也无所谓。
(待续)
2015-0902 更新,Metal 果然上 Mac 了,Google 果然补刀了,我真是神预言。
Metal 很可能会上 Mac。Metal 和 Mantle 有关系么?长得像,名字也像。
Mac 又是用的 AMD 芯片。(误,只有 Mac Pro 用 AMD)
写游戏引擎的开心了,一年内支持了两个新的 API。
MSL 长得很像 HLSL。
Metal 是 Obj-C 的,不过考虑到只能在苹果平台使用,也无所谓。
(待续)
2015-0902 更新,Metal 果然上 Mac 了,Google 果然补刀了,我真是神预言。
文刀叉点, 知之为不知
黄二狗、道器 赞同
以我这几天看到的资料
metal是和opengl并行的
也就是说不是替代的关系而是并存的关系
好处在于执行效率很高,如果要举一个不恰当的比方,比如你小时候的传话游戏,你对相邻的人说一句话,然后一个一个传,再问最后一个人第一个人说了啥。
opengl就相当于你隔着5个人传话
metal可能相当于隔着2个人传话
虽然并不完全是一样的情况,但是执行效率大概是这样子
但是metal另外一个问题在于支持的人不算多,以及是新东西
发布会上显示也就虚幻4、寒霜(没说是寒霜多少)、Cry还有unity
其实ipad和iphone这么多年了,虚幻没多少真金白银,unity才是潜在最大的赢家
但是支持归支持,很多人愿不愿意做就是另外一回事了
总结一下:有发展总归是好事,只能这么说,事情肯定不会变坏,不会因为有了metal,ios的游戏反而变差了,但是到底能不能变好,也不好说。
另外,苹果都说了,专门针对a7深入优化的,5s、air、mini2以下的人都洗洗睡了吧,和你们没关系
metal是和opengl并行的
也就是说不是替代的关系而是并存的关系
好处在于执行效率很高,如果要举一个不恰当的比方,比如你小时候的传话游戏,你对相邻的人说一句话,然后一个一个传,再问最后一个人第一个人说了啥。
opengl就相当于你隔着5个人传话
metal可能相当于隔着2个人传话
虽然并不完全是一样的情况,但是执行效率大概是这样子
但是metal另外一个问题在于支持的人不算多,以及是新东西
发布会上显示也就虚幻4、寒霜(没说是寒霜多少)、Cry还有unity
其实ipad和iphone这么多年了,虚幻没多少真金白银,unity才是潜在最大的赢家
但是支持归支持,很多人愿不愿意做就是另外一回事了
总结一下:有发展总归是好事,只能这么说,事情肯定不会变坏,不会因为有了metal,ios的游戏反而变差了,但是到底能不能变好,也不好说。
另外,苹果都说了,专门针对a7深入优化的,5s、air、mini2以下的人都洗洗睡了吧,和你们没关系
仪思奇, 爱好摄影的软件工程师
知乎用户、XXX XXX、陆晓东 等人赞同
Metal不是为了取代OpenGL或者对抗DirectX的。
Apple设计Metal向下是为了进一步压榨硬件性能。加强针对硬件的定向优化。向上笼络各大游戏引擎提供商,引入广泛支持。
说到底这是进军客厅,对抗游戏主机的战略储备。虽然目前的A7还不能完全跟PS4、XO这样的次时代主机比肩,但是凭借定向优化,超越一切同时代Android解决方案还是游刃有余的。事实上PS、Xbox这样的主机能卖很多年不换芯主要就是靠定向优化。Metal这招算是师夷长技以制夷。
另外:预计短期内Metal不会很快登录OS X。Macbook系列硬件满负荷运转后散热还是太吃力了。
补充 1:定向优化为什么不可以是针对OpenGL的?
OpenGL现在面向移动设备的主要标准叫OpenGL ES。这个标准是通用标准考虑到了广泛的兼容性。但是作为倡导硬件严格为软件服务的苹果,为了强化自己的软件平台,裁剪公共标准,增补自身优势已经成了必须的手段。既然已经自创了A7这一处理器标准,那还有什么理由不动OpenGL呢?
补充 2: @ 泽淹的问题:会不会移植到桌面?
我个人认为,短时间内看不到希望。理由有两方面:
首先,Mac仍不是良好的游戏设备。在当前整个Mac产品线中,几乎所有设备内部空间都设计的十分紧凑。虽然Mac Pro的表现不详,但是Macbook、iMac的发热和满负荷时的噪音都让人没法享受游戏乐趣。
其次,Metal主打的就是定向优化,而目前Mac系列产品则是开放式的硬件组合。CPU和显卡每一代都会有所不同。不利于定向优化。而且,在游戏主机中所使用的CPU和GPU都是经过细致的定制,与零售版相近型号也有所不同。即便是针对某一特定型号,优化的意义也不大。相比之下硬件进化趋于平稳的iOS平台更适合Metal。
Apple设计Metal向下是为了进一步压榨硬件性能。加强针对硬件的定向优化。向上笼络各大游戏引擎提供商,引入广泛支持。
说到底这是进军客厅,对抗游戏主机的战略储备。虽然目前的A7还不能完全跟PS4、XO这样的次时代主机比肩,但是凭借定向优化,超越一切同时代Android解决方案还是游刃有余的。事实上PS、Xbox这样的主机能卖很多年不换芯主要就是靠定向优化。Metal这招算是师夷长技以制夷。
另外:预计短期内Metal不会很快登录OS X。Macbook系列硬件满负荷运转后散热还是太吃力了。
补充 1:定向优化为什么不可以是针对OpenGL的?
OpenGL现在面向移动设备的主要标准叫OpenGL ES。这个标准是通用标准考虑到了广泛的兼容性。但是作为倡导硬件严格为软件服务的苹果,为了强化自己的软件平台,裁剪公共标准,增补自身优势已经成了必须的手段。既然已经自创了A7这一处理器标准,那还有什么理由不动OpenGL呢?
补充 2: @ 泽淹的问题:会不会移植到桌面?
我个人认为,短时间内看不到希望。理由有两方面:
首先,Mac仍不是良好的游戏设备。在当前整个Mac产品线中,几乎所有设备内部空间都设计的十分紧凑。虽然Mac Pro的表现不详,但是Macbook、iMac的发热和满负荷时的噪音都让人没法享受游戏乐趣。
其次,Metal主打的就是定向优化,而目前Mac系列产品则是开放式的硬件组合。CPU和显卡每一代都会有所不同。不利于定向优化。而且,在游戏主机中所使用的CPU和GPU都是经过细致的定制,与零售版相近型号也有所不同。即便是针对某一特定型号,优化的意义也不大。相比之下硬件进化趋于平稳的iOS平台更适合Metal。
李宏伟, webgl专栏维护者,gpu架构师,…
fang cai、白菜、知乎用户 赞同
从llvm到swift到metal,君不见这些都是apple的封闭商业理念结果么?从图形api这个本身来说,opengl也好,dx也好,mantle也好,metal也好,性能不会相差太多。gl api要用的好相对难一点,但每家shader优化都是个痛。metal不会多好,但是apple可以对opengles支持的差一点,结果就是在apple平台上gl死掉,metal独霸ios。将来的格局就是
GL android, pc cad, steam, ps4
DX pc gaming, xb1
Mantle, pc gaming
Metal, apple
看看apple那么点市场份额,就算在ios全面制霸metal,也改变不了什么图形的大格局。
GL android, pc cad, steam, ps4
DX pc gaming, xb1
Mantle, pc gaming
Metal, apple
看看apple那么点市场份额,就算在ios全面制霸metal,也改变不了什么图形的大格局。
柴健翌, 法律专业工程师,业余逗比字幕君。人类玻…
其实我觉得这个使得app更像游戏主机了,至少在图形上进一步,支持更多直接访问底层硬件的操作,因为opengl或者ios的图形库在手机芯片上跑,开销还是太大,所以需要开放更多直接访问。
当然和游戏主机直接跑在内核模式,图形库全靠游戏自带,你要乐意的话完全自创图形API还是差得远
当然和游戏主机直接跑在内核模式,图形库全靠游戏自带,你要乐意的话完全自创图形API还是差得远
参考
Metal Programming Guide: About Metal and this Guide
Metal Shading Language Guide: Introduction
Metal Programming Guide: About Metal and this Guide
Metal Shading Language Guide: Introduction
按投票排序 按时间排序
16 个回答
Milo Yip, 游戏程序员、《游戏引擎架构》译者
Jack Liu、黄灿、離娮 等人赞同
自答補充一下自己的想法:
- Apple的軟硬件平台本身不開放,無須使用Android所需的OpenGL ES標準。除了跳過一些跨平台層的適應性接口可以提升性能,從商業上考慮,同一跨平台遊戲在iOS的表現較運行Android的好,即使硬件是一樣的。估計未來評測君可大造文章了。
- 提升性能估計應該是減少CPU方面的額外開銷,並且在CPU上可以預先進行一些工作(例如shader編譯、預先組建command buffer)等。這些有可能也能減少GPU閒置時間。但這些性能優化,可能更重要的是令硬件更連續地工作,減少耗電。對於draw-call多但shader簡單的2D遊戲來說可能更明顯。
- 以前iOS和Android遊戲開發可以統一使用OpenGL。現在需要更改引擎,雖然對支持跨平台的引擎來說不會太難,最麻煩的是shader的移植。為了支持A7前的設備大概要兩套shader。可能會出現HLSL/GLSL/MSL的cross-compiler,或是要從更high level的語言編譯成這些目標語言。
Shaojing Li, Software Engineer in Compute Graphics
WatchPigs、刘典、知乎用户 等人赞同
一众大牛都在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年,是应该一代新人换旧人啦。
以下都是公开信息和我自己的评论,不代表公司观点,严禁转载。(所以评价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年,是应该一代新人换旧人啦。
Yong He, CS PhD student
钱康来、尼玛1123、ye sun 等人赞同
其实跟DirectX12没有本质区别。都是把图形接口搞成了类似console的样子,通过允许用户预创建命令列表来给驱动预先初始化的机会,从而减少驱动层面的CPU开销,将绝大多数CPU工作交给应用灵活处理。都是一样的东西,每个厂商都搞自己的硬件层API只会给开发者带来麻烦而已。另外我觉得现在关于图形接口实在是过度炒作。其实都没啥内涵。
Vinjn张静, Full-Stack Mixed Reality Engineer
Lue大毛、Colliot、道器 等人赞同
OpenGL-ES 前途堪忧,坐等 Google 来补刀。
Metal 很可能会上 Mac。Metal 和 Mantle 有关系么?长得像,名字也像。
Mac 又是用的 AMD 芯片。(误,只有 Mac Pro 用 AMD)
写游戏引擎的开心了,一年内支持了两个新的 API。
MSL 长得很像 HLSL。
Metal 是 Obj-C 的,不过考虑到只能在苹果平台使用,也无所谓。
(待续)
2015-0902 更新,Metal 果然上 Mac 了,Google 果然补刀了,我真是神预言。
Metal 很可能会上 Mac。Metal 和 Mantle 有关系么?长得像,名字也像。
Mac 又是用的 AMD 芯片。(误,只有 Mac Pro 用 AMD)
写游戏引擎的开心了,一年内支持了两个新的 API。
MSL 长得很像 HLSL。
Metal 是 Obj-C 的,不过考虑到只能在苹果平台使用,也无所谓。
(待续)
2015-0902 更新,Metal 果然上 Mac 了,Google 果然补刀了,我真是神预言。
文刀叉点, 知之为不知
黄二狗、道器 赞同
以我这几天看到的资料
metal是和opengl并行的
也就是说不是替代的关系而是并存的关系
好处在于执行效率很高,如果要举一个不恰当的比方,比如你小时候的传话游戏,你对相邻的人说一句话,然后一个一个传,再问最后一个人第一个人说了啥。
opengl就相当于你隔着5个人传话
metal可能相当于隔着2个人传话
虽然并不完全是一样的情况,但是执行效率大概是这样子
但是metal另外一个问题在于支持的人不算多,以及是新东西
发布会上显示也就虚幻4、寒霜(没说是寒霜多少)、Cry还有unity
其实ipad和iphone这么多年了,虚幻没多少真金白银,unity才是潜在最大的赢家
但是支持归支持,很多人愿不愿意做就是另外一回事了
总结一下:有发展总归是好事,只能这么说,事情肯定不会变坏,不会因为有了metal,ios的游戏反而变差了,但是到底能不能变好,也不好说。
另外,苹果都说了,专门针对a7深入优化的,5s、air、mini2以下的人都洗洗睡了吧,和你们没关系
metal是和opengl并行的
也就是说不是替代的关系而是并存的关系
好处在于执行效率很高,如果要举一个不恰当的比方,比如你小时候的传话游戏,你对相邻的人说一句话,然后一个一个传,再问最后一个人第一个人说了啥。
opengl就相当于你隔着5个人传话
metal可能相当于隔着2个人传话
虽然并不完全是一样的情况,但是执行效率大概是这样子
但是metal另外一个问题在于支持的人不算多,以及是新东西
发布会上显示也就虚幻4、寒霜(没说是寒霜多少)、Cry还有unity
其实ipad和iphone这么多年了,虚幻没多少真金白银,unity才是潜在最大的赢家
但是支持归支持,很多人愿不愿意做就是另外一回事了
总结一下:有发展总归是好事,只能这么说,事情肯定不会变坏,不会因为有了metal,ios的游戏反而变差了,但是到底能不能变好,也不好说。
另外,苹果都说了,专门针对a7深入优化的,5s、air、mini2以下的人都洗洗睡了吧,和你们没关系
仪思奇, 爱好摄影的软件工程师
知乎用户、XXX XXX、陆晓东 等人赞同
Metal不是为了取代OpenGL或者对抗DirectX的。
Apple设计Metal向下是为了进一步压榨硬件性能。加强针对硬件的定向优化。向上笼络各大游戏引擎提供商,引入广泛支持。
说到底这是进军客厅,对抗游戏主机的战略储备。虽然目前的A7还不能完全跟PS4、XO这样的次时代主机比肩,但是凭借定向优化,超越一切同时代Android解决方案还是游刃有余的。事实上PS、Xbox这样的主机能卖很多年不换芯主要就是靠定向优化。Metal这招算是师夷长技以制夷。
另外:预计短期内Metal不会很快登录OS X。Macbook系列硬件满负荷运转后散热还是太吃力了。
补充 1:定向优化为什么不可以是针对OpenGL的?
OpenGL现在面向移动设备的主要标准叫OpenGL ES。这个标准是通用标准考虑到了广泛的兼容性。但是作为倡导硬件严格为软件服务的苹果,为了强化自己的软件平台,裁剪公共标准,增补自身优势已经成了必须的手段。既然已经自创了A7这一处理器标准,那还有什么理由不动OpenGL呢?
补充 2: @ 泽淹的问题:会不会移植到桌面?
我个人认为,短时间内看不到希望。理由有两方面:
首先,Mac仍不是良好的游戏设备。在当前整个Mac产品线中,几乎所有设备内部空间都设计的十分紧凑。虽然Mac Pro的表现不详,但是Macbook、iMac的发热和满负荷时的噪音都让人没法享受游戏乐趣。
其次,Metal主打的就是定向优化,而目前Mac系列产品则是开放式的硬件组合。CPU和显卡每一代都会有所不同。不利于定向优化。而且,在游戏主机中所使用的CPU和GPU都是经过细致的定制,与零售版相近型号也有所不同。即便是针对某一特定型号,优化的意义也不大。相比之下硬件进化趋于平稳的iOS平台更适合Metal。
Apple设计Metal向下是为了进一步压榨硬件性能。加强针对硬件的定向优化。向上笼络各大游戏引擎提供商,引入广泛支持。
说到底这是进军客厅,对抗游戏主机的战略储备。虽然目前的A7还不能完全跟PS4、XO这样的次时代主机比肩,但是凭借定向优化,超越一切同时代Android解决方案还是游刃有余的。事实上PS、Xbox这样的主机能卖很多年不换芯主要就是靠定向优化。Metal这招算是师夷长技以制夷。
另外:预计短期内Metal不会很快登录OS X。Macbook系列硬件满负荷运转后散热还是太吃力了。
补充 1:定向优化为什么不可以是针对OpenGL的?
OpenGL现在面向移动设备的主要标准叫OpenGL ES。这个标准是通用标准考虑到了广泛的兼容性。但是作为倡导硬件严格为软件服务的苹果,为了强化自己的软件平台,裁剪公共标准,增补自身优势已经成了必须的手段。既然已经自创了A7这一处理器标准,那还有什么理由不动OpenGL呢?
补充 2: @ 泽淹的问题:会不会移植到桌面?
我个人认为,短时间内看不到希望。理由有两方面:
首先,Mac仍不是良好的游戏设备。在当前整个Mac产品线中,几乎所有设备内部空间都设计的十分紧凑。虽然Mac Pro的表现不详,但是Macbook、iMac的发热和满负荷时的噪音都让人没法享受游戏乐趣。
其次,Metal主打的就是定向优化,而目前Mac系列产品则是开放式的硬件组合。CPU和显卡每一代都会有所不同。不利于定向优化。而且,在游戏主机中所使用的CPU和GPU都是经过细致的定制,与零售版相近型号也有所不同。即便是针对某一特定型号,优化的意义也不大。相比之下硬件进化趋于平稳的iOS平台更适合Metal。
李宏伟, webgl专栏维护者,gpu架构师,…
fang cai、白菜、知乎用户 赞同
从llvm到swift到metal,君不见这些都是apple的封闭商业理念结果么?从图形api这个本身来说,opengl也好,dx也好,mantle也好,metal也好,性能不会相差太多。gl api要用的好相对难一点,但每家shader优化都是个痛。metal不会多好,但是apple可以对opengles支持的差一点,结果就是在apple平台上gl死掉,metal独霸ios。将来的格局就是
GL android, pc cad, steam, ps4
DX pc gaming, xb1
Mantle, pc gaming
Metal, apple
看看apple那么点市场份额,就算在ios全面制霸metal,也改变不了什么图形的大格局。
GL android, pc cad, steam, ps4
DX pc gaming, xb1
Mantle, pc gaming
Metal, apple
看看apple那么点市场份额,就算在ios全面制霸metal,也改变不了什么图形的大格局。
柴健翌, 法律专业工程师,业余逗比字幕君。人类玻…
其实我觉得这个使得app更像游戏主机了,至少在图形上进一步,支持更多直接访问底层硬件的操作,因为opengl或者ios的图形库在手机芯片上跑,开销还是太大,所以需要开放更多直接访问。
当然和游戏主机直接跑在内核模式,图形库全靠游戏自带,你要乐意的话完全自创图形API还是差得远
当然和游戏主机直接跑在内核模式,图形库全靠游戏自带,你要乐意的话完全自创图形API还是差得远
这篇关于如何评价 Apple 为 iOS 8 推出的 Metal 图形 API?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!