求助 Mac 上图形api设置成的Metal,但是没有设置成功

2021-03-29 07:22发布



1条回答
游戏开发狗 -游戏开发爱好者
1楼 · 2021-03-30 14:01.采纳回答

从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层都可以自己控制,实现想法简单一些,走的快一些。

相关问题推荐

  • 回答 6

    第一步:对着Assets点击右键,选择ExportPackage第二步:选择场景文件以及和场景相关的资源或者素材,然后点击Export第三步:给导出的资源取名,并且选择要保存的位置即可

  • 回答 87
    已采纳

    玩游戏玩的很好,说明你对于游戏里面的规则、剧情设置还是比较了解的,对于从事游戏相关岗位来说也是优势之一。但是学习游戏开发还是要对游戏开发的工作内容做进一步的了解,游戏开发涉及代码较多,可以通过进一步的了解,判断自己是否适合学习这个方向,另外...

  • 回答 11

    游戏开发入门不难。后期发展需要你有丰富的奇思妙想。游戏开发肯定是培训好,自学学得不系统,并且不易发现自身薄弱之处。游戏开发的学习时长还是要看你自己对知识与技术的掌握能力,一般来说,游戏开发的学习时长大约在五个月左右。...

  • 回答 18

    个人觉得如果有一定的技术基础的话还是可以考虑自学,如果零基础的话可能会有些难度

  • 回答 10

    问题还是出在粒子的sorting fudge。在unity的2d模式下,游戏本身的背景相当于是sorting fudge的0,当你把粒子的sorting fudge设为0以上的时候,粒子就都会被背景盖住。所以在3d模式下给alpha正值来给add垫底的话,到了2d模式下就会通通不显示。所以遇上这样的...

  • 回答 17

    虚幻4引擎,你会看到和平精英加载页面左下角有这个图标。

  • 回答 8
    已采纳

    转载知乎上的两位答友的回答,各有道理。作者:风小锐链接:https://www.zhihu.com/question/322249959/answer/675883379来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。未来Unity有可能出现3A大作吗? 有可能。基于Unity已...

  • 回答 11

    在Assets文件夹里面.点击右键Create/Material即可以创建材质球

  • 回答 23

    可以让模型师直接作出这样的形状,如果用纯Unity制作,就要用基本游戏对象拼接了,包括楼梯,城堡,都可以拼接出来。正常情况不会这样做,因为不够精美,都是建模师来实现,毕竟Unity不属于专业的建模软件,侧重于实现功能。...

  • 回答 18

    粒子系统由粒子发射器、粒子动画器和粒子渲染器三部分组成,主要用于游戏场景中一些特殊效果,如水、烟火等等

  • 回答 18

    首先,Python开发游戏非常尴尬,原因是没有好用的游戏开发库。Python开发游戏仅推荐PyGame,PyGame是对多年以前很流行的游戏开发库——SDL的封装。但是说实话功能太简陋了,做个动画都得考虑刷新的问题。楼主要做简单小游戏,只需要画一两周熟悉Unity引擎,然...

  • 回答 9

    1.标记水体碰撞的位置2.计算水波的传递 通过波动公式,3D或者2D 波动公式都行3.水面顶点采样波动传递结果计算结果做顶点Y轴偏移

  • 回答 15

    Unity3D中两种阴影的实现传统的ShadowMapShadowMap说起来十分简单,把摄像机和光源的位置重叠,那么场景中该光源的阴影区域就是那些摄像机看不到的地方,主要应用在前向渲染路径中。具体实现分以下几个步骤:如果有平行光开启了阴影,Unity就会为该光源计算它...

  • 回答 18

    Doozy UI是Unity UI视图层的框架,本身使用的还是UGUI的组件,但提供了一套强大的UI管理功能,可以很方便的实现一些炫酷效果,方便的UI系统管理与事件传递机制。

  • 回答 12

    Unity3d更好,因为U3D占有的市场更大,目前cocos大都是用来开发棋牌游戏的,在这方面它有着巨大的优势。而Unity3d既可以用来开发大型3D游戏,也可以用来开发vr游戏、vr应用,这是比较不错的,未来有着巨大的前景。另外ue4也是个不错的选择,近年来用ue4开发的...

  • 回答 11

    当Unity 需要做热更新的时候(2013年开始),而普通的C#又做不到的时候,而对于游戏行业来说Lua脚本热更新已经是很成熟的方案,自然Lua 热更新就成为了Unity热更新的首选。

没有解决我的问题,去提问