为什么国内那么多开发者喜欢用虚幻或者Unity?
虚幻第一版1998年问世,Unity第一版2005年面世
简单介绍
首先,使用哪一款游戏引擎去制作一款游戏,并不是根据使用者的喜好来制定的。
开发者们的喜好千奇百怪,但最终能在技术选型中影响到结果的,往往是技术积累以及引擎本身的特性。
目前,虽然Epic的虚幻因为Unreal5的预览发布,声势滔天,说他惊艳了全球的游戏产业,绝不为过。其Nanite虚拟微多边形几何技术和Lumen动态全局光照技术,几乎可以算得上是一次渲染界的产业革命了。
这种新的渲染技术有多牛逼呢?
一定要打比方的话,就相当于模拟信号到数字信号的转变,说它是一次对业界的降维打击,我想反对的人不会太多。
这两种技术都采用了新的思路来解决美术方面的问题,一个干掉了场景多边形数量上限的帽子保证了美术在导入模型的时候不会因为多边形数量过多而头秃,后者则宣称不需要DXR的硬件支持就可以达到Runtime RTX的效果。
两个大饼看上去简直无比香甜,不由令人想到,2009 年,Tim Sweeny 在 CGDC 做过的一个分享。
分享叫做 《下一个次世代——万亿次浮点运算时代的游戏开发》,说的好像就是这个十年后的引擎。
如果Unreal真正做到了他宣传的水平,那么无疑它很有可能征服市场。
但是,我要说但是了,一款新的游戏引擎从预览发布到完全能用,可能是一场长征。
不知道有多少人记得当年Unreal的实时光照鸽了多久……
就如同开头所说,决定用哪一款引擎去做游戏,不是根据喜好来的。
就一套生产力工具而言,很多时候美好的未来并不见得能带来多大的市场,好用,简单,稳定,量足管饱才是刚需。
可用性和鲁棒性反而是计算机系统评估中权重很高的项目。
所以,哪怕是Epic的大股东,腾讯,它自家新发布的四十款游戏中,目前选择Unity的比例依旧高达80%以上。
由此可见,Unreal虽然看上去非常强大美好,喜欢的人很多,但是并不那么接地气,有点空中楼阁的意思。
在国内游戏引擎市场占有率上,还是可用性和鲁棒性相对更高的Unity占据了压倒性优势的。
Unreal的强大和不足
市场是诚实的,虽然Unreal非常优秀,但好像大家都不怎么买账,这到底是为什么?
第一,它选择了c++作为主要开发语言。很好,很强大。
作为一门Native语言,c++最典型的描述就是瑞士军刀。灵活,强大,锋利。
选择它,就不会有难以控制和预测的垃圾回收的烦恼。
选择它,就不需要考虑胶水语言、托管语言、脚本语言的低效。
选择它,程序员可以用最直接的方式实现最优秀的解决方案。
但是,选择它就意味着要自己管理内存,要自己去管理第三方库的编译、链接、兼容问题,要自己去实现具体方案的每一个步骤。
对于经验老到的程序员来说,这三个问题每个问题都和地狱一样。他们当然可以用苦练很多年的独门绝学淌平这些问题,但游戏不是一个人开发出来的……
别人怎么办?别人连在面试里提自己掌握和精通c++这门语言都不敢。
面对很有可能漏得到到处都是pAActor或者pUStruct,面对老板们拍着桌子要求他们快糙猛干,老码农们愉快地打出了GG。
第二,它的视觉效果极其优秀,非常适合3A级别的游戏。
作为一款游戏引擎,可以说它能满足大多数脑洞不太大的游戏艺术家们对于画面的追求。
或者说,大多数时候,一款Unreal游戏的画面不够好评时,瓶颈绝对不是出在引擎上。
是的,别想太多,用虚幻还做不出好画面,唯一的可能就是使用者太菜了。然而,如此强大的游戏引擎,又犯了忌讳。
它的确非常适合高水平的团队制作大体量的3A游戏,可是国内的游戏市场里……
不,甚至国际游戏市场里,现在也是小体量的游戏占据了绝对的主流。
记得暴雪的老头子前两年开发布会的时候提过一个经典的问题:“难道你们都没有手机吗?”他问的方式不对。
正确的问法是:难道你们没有2080ti吗?而标准的回答是:是的,我们没有,我们只有骁龙865。
于是,面对一个空项目都能打出200m包体的引擎,制作人们选择了放弃。
这块肉很香,但咬不动啊。
第三,Unreal是开源的。非常有Hacker精神,也非常值得赞赏。
很久以前我还在用cocos做游戏的时候,跟到过一个引擎自身的漏洞。
这个漏洞会导致引擎在满足一定的条件时,会误判字符串长度,从而显示乱码。
它非常折磨人,当时我的想法是,如果cocos不是开源的,可能我就要一直头疼下去了。
那一次,开源救了我的命!开源消灭了我变秃头的可能!是的,毫无疑问,同样一个引擎,开源总比不开源更好。
但是,纵观我那么多年的经验,其实使用第三方库过程中,开源救命的也就那一次。
这意味着,开源和闭源在技术选型中的权重往往不高。因为大多数实践中,work around更具有性价比。
就好像用户使用Linux而不用Windows的原因有很多,但只有极少数人仅仅是因为linux开源而windows闭源从而选择linux是一个道理。Unreal的开源的确是巨大的优势,但很遗憾在用户群体中这个优势的权重还不够高。
总结一下
总之,Unreal是非常强大的引擎,但他的渲染太重了,对于大多数游戏来说,过于强大。
在Unreal5中,它甚至能做到千亿级别的多边形和动态光照,看上去强到开创了新世纪。
它的几何数据虚拟化的想法和技术,的的确确是划时代的进步。
这项技术将复杂场景的几何全局参数化到统一的虚拟地址空间里,同时通过算法把这种映射带来的畸变和噪音降低到最低,以上的处理过程,都是需要大量深奥的微分几何理论来保证的。
这种划时代的进步,简直是数学是上帝的语言最好的佐证之一。
但正如那些问题,有多少人擅长使用上帝的语言呢?
或者说,当今的游戏产业里,有多少场景需要使用到这种数量级的多边形和动态光照呢?
影视业可能会用到,但很显然梦工厂是看不上UE的,然后呢?然后就没了。
有人要问了,你刚才不是吹了很久3A级别的渲染效果吗?没毛病啊,我是吹了很久Unreal,但我有说过3A游戏都用它吗?
《全战》系列是自研引擎。
《刺客信条》用的是自研引擎。
《黑魂》用的是自研引擎。
《美国末日》,《神秘海域》用的还是自研引擎。
《GTA》是自研引擎,《老头滚动条》还是自研引擎。
什么叫惊喜,这就叫惊喜。
那么到底谁在用Unreal?
枪、车、球、家装、VR……
以前有一个游戏技术选型的时候。
我问制作人,我们用Unreal好不好啊?
他说好啊,做个次世代手机游戏出来啊,赞。
我问策划,我们用Unreal好不好啊?
他说好啊,蓝图功能多好啊,我自己能改系统了,赞。
我问开发组长,我们用Unreal好不好啊?
他抄起键盘就砸了过来,“他妈的做到一半程序员掀桌子的话,烂摊子谁来收?”
Unreal最大的问题不是不好用,而是它自带的Demo太优秀了,优秀到大多数人做出来的东西连它自带的Demo都不如。
然后,我们反观Unity。
网上总是流传各种Unity的负面新闻。
但其实,不正是因为用的人多,才会不停成为热点的吗?
为什么大家喜欢用Unity呢?
第一,它选择了C#作为主要开发语言。
C#是一种托管语言,和c++比,不够Native,不够高效,和脚本语言比,又不够灵活。
但它胜在全面。
强类型,跨平台,语法糖,应有尽有。比简单的脚本语言强大,比c++更简单易用。
值得吐槽的是托管语言必须要面对的一个垃圾回收、和源管理问题。
往常,开发者们只能通过Unity自身的Profile功能来大幅度优化来解决不可预测的卡顿和崩溃。
但随着2019LTS版本中增量GC的功能推出,这个问题已经可以被引擎本身缓解一部分。
增量GC是指,引擎通过在多个框架上分配工作负载,来把一次性的大型的中断替换成多次小型更频繁的中断。
通过这种粉碎式的替换,在游戏引擎运行过程中实现一种近似于load balance的效果,从而消灭突如其来的巨大卡顿,降低开发者的优化压力。
第二,Unity的渲染系统虽然不够突出,但是也足够好用。
传说中的Unity做不了高端游戏,绝对是一个误会。
我们往往不这么做,仅仅是因为市场更看好手机平台的游戏,要知道在我国PC的渗透率只有可怜的30%左右。
主机市场更惨,但是介于某些敏感的原因我就不解释了,我相信只要是个老玩家都懂,任何合格的我朝游戏从业人员都不会把做主机游戏当做一个目前可行的方案。
是的,我们不用Unity去做高尖端游戏,不代表它做不了次时代画面的游戏。
Unity画面不行已经是老黄历了。
譬如《奥日2》,《帕斯卡契约》,
最近两款画面广受好评的游戏,就都是Unity开发的。
还有最近发布的PS5游戏《Oddworld Soulstorm》预览,这款游戏也是Unity做的。
视频如下:【2020索尼PS5发布会】《Oddworld SoulStorm (奇异世界:灵魂风暴)》宣传片
由于背负着沉重的老黄历包袱,近年来Unity在渲染上花的功夫还是比较足的,虽然真要实现超高水平的渲染还是会很耗,但一般的大制作问题不大。
譬如Unity2018就已经推出,在Unity2019LTS中开箱即用的High Definition Render Pipeline。
这款新的渲染管线是专门为了高性能显卡设计的,支持许多诸如Shader Model5.0之类的次世代特性。
可惜的是,它必须在支持cpu shader的平台上才能使用,因此,业界使用到它的机会也不多。
不过这不是引擎的问题,将来手机硬件升级以后,该强大的渲染管线支持高端手机将不会是问题。
届时,Unity开发的次世代手机游戏将会更普遍。Unity同样没有遗忘它的基本盘,在不够高端的平台上,Unity推出了偏重灵活性,可配置性,可编程性,易用性的URP。URP全称Universal Render Pipeline,它就是为了轻量级渲染而生的。
简单,好用,开源,可编程,偶尔技美一定要搞点大动作,也可以挪一点HDRP的小组件,改巴改巴整过来提高游戏的逼格也是可以的。
第三,费用问题。
我已经看到过无数的人吹Unreal的收费便宜了,但这吹法不对。
尤其是腾讯用脚投票的姿势那么明显……
Unity是按照坐席订阅收费的。
你开发一款月入一个亿的游戏,和一款月入一百万的游戏,订阅Unity的价格是不变的。
一套正版一年1800刀。但如果你用的是Unreal,它们不是这样算的。
当你的收入超过门槛以后,它是按照5%抽成的。
不要小看5%。
《王者荣耀》这种规模的游戏,一个月的5%就可以有100万刀,而这笔钱可以够600套Unity用一年。
这笔账非常好算,好算到腾讯至今新出的游戏里面,Unity依旧有80%以上的占比。
所以,对于国内的游戏市场来说,Unity更便宜是没问题的。
第四,也是对于个人来说最重要的一条。
所有其他的理由,都是帮助游戏公司用更低的成本,更简单的方法,更高的成功率去做出一款符合市场预期的游戏。
只有这一条,它牵涉到的是开发人员自身。那就是Unity成熟的社区和市场,本身就是一个巨大的诱惑力。
当你一旦考虑到哪种游戏引擎学了更容易找到工作;
或者你一但考虑到哪种游戏引擎学了以后对公司的依赖度会下降,更容易跳槽;
或者你一但考虑到哪种游戏引擎学起来比较容易成功,网上资源更多;
只要你考虑到诸如此类的问题的时候,我可以负责的说,Unity目前是标准答案。
是的,如果仅仅考虑玩一玩的话,选哪个都行,它们各有特色,玩起来体验也不一样。
但如果有人想要通过某一种引擎去真正投入到游戏开发的工作当中去,寻找更好的机会的话,必然是Unity,不信看数据,145:954。
也许你能看到腾讯等场子里有引擎组的大佬搞Unreal很捞钱,一边捞钱一边跟你吹Unreal。
但你要相信我啊,他们捞钱是因为他们是大佬,不是因为他们搞Unreal。
最后
我想说,工程这种东西,最重要的应该是,哪怕是一个菜鸟把工作接过去,也能做得像模像样。
Unreal的设计理念,无论是顶尖的效果,最硬核的开发语言,还是蓝图这种为了非程序员准备的开发工具,走的全是高端大气上档次的路线。它牺牲了接地气的气质。
而搞工程,我以为接地气非常重要。
这就是为啥你会在其他社区里看到很多人玩Unreal玩得很带劲,但一旦到了公司到了项目中,还是用Unity的根本原因。