开发一款游戏引擎,是否必须要依托于游戏本身呢?开发过游戏引擎的人,或多或少地想过这个问题。
传统的游戏引擎都是依托游戏一代一代迭代发展起来的。对于游戏企业来讲,最终目的是做出游戏,所以游戏引擎的目标是为专属游戏服务。游戏需要什么特性,引擎就提供什么功能。
商业引擎也是如此,如果一款游戏引擎没有支撑过任何成功游戏作品,大家是不敢去用的。毕竟使用游戏引擎的人一般不是专业引擎开发人员,出现问题后很难快速解决底层问题。就连 Unreal Engine 这样的引擎也要靠自己的《虚幻竞技场》来撑门面。
目前,大部分引擎在内部使用,毕竟谁写的谁清楚,出了问题也能第一时间解决。
但是国外游戏引擎的开发氛围要好于国内,游戏引擎技术并没有完全被游戏牵着鼻子走,引擎技术也在反过来逐步推动游戏的发展。游戏引擎的开发者希望能持续地专注于引擎技术的开发,不会因过度依赖游戏而把引擎自身搞得一团糟。
不过到目前为止,还没有哪款引擎是能够满足以下几点要求的真正的万能架构:
引擎开发者心目中的理想引擎或者说许多游戏企业的自研引擎目标是:底层维护分离,具有统一的架构,可以通过底层为不同游戏提供不同的支持。为此,引擎技术人员尽最大可能把游戏需要的技术都完好地集成到引擎中,做到一款引擎可以服务多款不同类型的游戏。
然而,理想和现实往往有一定的距离,大部分引擎是为了一款游戏而生的,最根本的原因就是人的成本;这里成本是指技术人员能力、管理者能力、设计游戏能力、招聘、营销等与人的价值有关的东西。
国外 Unreal Engine 算是做得比较好的,Unreal Engine 3 是比较成功的游戏引擎,用它开发的各种类型的游戏有许多。Unreal Engine 算是人力成本相对较低的引擎,国外开发人员的经验积累使他们大多能把控 Unreal Engine 3,而国内由于开发人员的能力差异,很少人能把控 Unreal Engine 3(这里不谈市场因素)。
所以理想引擎的开发不得不依赖游戏。但事无绝对,Unity 传奇般地解决了人的问题,传奇般地实现了当时很多大企业不敢做的事情。
抛开 Unity 易用性不说,它真正实现了引擎架构的组件化。更重要的是,许多人在为它开发功能,使用终极方式解决人的成本问题。这其实不是一个技术问题,即使有人曾经想过让很多人一起开发引擎,但谁又会想过这会成为现实呢?
Unity 自己没有耀眼的游戏。现在你几乎可以在网络上找到任何想要的内容,比如体素地形网格化、水流方向映射、反向动力学(Inverse Kinematics,IK)、材质树、技能编辑器,甚至大量的特效、模型、贴图、动画资源,铺天盖地的论坛、教程。Unity 只提供底层的基础功能,大部分强大的功能是世界各地的人帮助它完成的,在它自己获益的同时,开发者也在获益。
Unity 的出现几乎改变了整个商业引擎的格局,它的开放,它的易用性,它的开发流程,都完全超过当时人们的认知,导致一些设计观念陈旧的商业引擎加速地消亡。有能力转变的也只有 Unreal Engine,虽然其庞大的代码库让它不能一下子实现转变,但它以快速的迭代不断追赶。
Unity 更强大的地方在于扩展,所有人都可以给它定制功能,这逼迫 Unreal Engine 不得不开源。开源的好处会让更多人关注它,为它定制更多的功能插件,许多问题可以轻松地在互联网上搜索到解决方案,这让它的社区也更加壮大。