游戏开发者为什么要编写自己的引擎而不使用现有引擎?


41

我观察到,许多知名的大型游戏开发人员经常开发自己的引擎。示例包括Valve,Crytek,Ubisoft,Epic Games和Square-Enix。

仅仅是因为它们可以做到,还是现有发动机可能无法满足足够的要求,所以我们将开发自己的发动机?我几乎无法想象需要特定引擎的游戏。Unity或Unreal之类的东西足以制作任何类型的游戏。即使没有,它们也具有源代码,可以对其进行修改以满足甚至一些特殊需求。

游戏开发者为什么要编写自己的引擎而不使用现有引擎?



1
他们不想许可其他公司的游戏引擎并向他们付费。
亚诺什Turánszki

我猜这是当您有9K +员工在附近时所要做的...
glampert 2014年

3
有一些大型工作室的反例,这些工作室使用诸如UnrealCryEngine之类的第三方引擎来创建AAA标题。
菲利普2014年

3
Valve开始使用Quake引擎,然后最终为以后的游戏编写了自己的游戏。学习使用现有功能通常是一个问题,然后最终想要实现比现有引擎提供的功能更多的功能。在这一点上,您必须进行大量修改或自己修改。
奈柔2014年

Answers:


53

工作室可能会选择“构建”而不是“购买”其技术的多种原因:

  • 传统技术;在可能的工作室中间件可用之前,工作室可能已经开始构建自己的工具链。
  • 具体要求; 工作室可能有一些不适合现有中间件或
  • 预算问题;工作室可能无法负担现有中间件的费用或合同义务。
  • “这里没有建综合症;” 工作室的技术领导者可能会警惕(他们合理或不合理地)未构建的技术,因此无法完全理解。

通常,拥有和控制对您的业务成功至关重要的事物并外包那些不重要的事物确实很有意义。

对于某些工作室来说,游戏设计或讲故事的方面可能是他们期望成功利用的关键资源。对于这些工作室,简单地购买可以使他们的设计师实现适当愿景的技术是有意义的。

对于其他人来说,技术可能是成功的基础。例如,构建MMO的工作室通常需要自行构建该基础结构,因为这对于它们的成功至关重要(并且现有的中间件通常不适合,至少对于较大的“ AAA”标题而言是不合适的)。

请注意,您列出的某些工作室(尤其是Crytek和Epic)基本上已经停止试图直接在游戏市场上起主导作用,并且几乎可以肯定,作为中间件供应商,他们所赚的钱要超过他们作为游戏开发商所赚钱的钱。


20
我还要补充一点,“这里构建”的技术有时具有优势。一个示例是Unity3D如何更改每个版本的EULA并添加奇怪的限制,例如没有“赌博游戏”。当您为某项技术授予许可时,您无权因没有特定原因(例如制作许可游戏的IP权利而发生)回避并吊销许可,或决定向您收费以修复其错误。
Skrylar

说真的,Unity说“没有赌博游戏”吗?他们甚至在其网站的“社区”部分中都有一个有关赌博的特定页面!
2015年

Unity的页面unity3d.com/industries/gambling说,您可以购买“ Unity Gambling许可证”。我还没有找到价格,但是听起来他们仍然允许您制作赌博游戏,只要您支付特殊许可即可。
亚历克斯(Alex)

1
此外,更容易开始使用您已经了解的内容并最终构建引擎,甚至不知道引擎是什么。引擎不过是用例的集合。如果您要减少冗余,则最终要编写引擎,而如果要构建游戏,则最终要使用整体系统。要获得游戏引擎并学习如何使其显示像素,然后意识到它无法做到这一点是非常困难的,因为它将所有内容视为纹理。编写自己的代码时不必处理。
德米特里

18

Josh Petrie所说:

这里没有建综合症;”

我也在写我自己的引擎,我认为每个开发人员的原因都会有所不同,但是实际上-我通常不喜欢使用其他人的代码。从某种意义上说,我是强迫性的,如果我觉得自己可以自己制造,那就别无所求了

我测试了各种类型的游戏引擎,渲染API,尤其是Ploobs,UNITY WaveEngine,XNAFinalEngine,Love,Ogre等。还有更多...我想开始编写游戏-我下载了很多东西,以寻找舒适的环境以及有据可查的入口点...

但是,我的问题是当时我不知道引擎下方发生了什么。我想要良好的控制,我想要一个像手背一样的框架。我想到了“ HEY!我想我将要学习如何运作并了解它的唯一方法就是尝试完全从头开始完全构建自己的引擎。我的大部分编程历史都来自于Web和处理解决方案-对我来说这是一个全新的比赛。

我最终要做的是。

因此,由于我已经了解C#,所以选择设置XNA,并开始考虑应该如何或从哪里开始。我需要一个主意。

我决定无论如何都将直接进入3D

精简基础很酷-精灵批处理的东西,但是随着我的前进,我最终发现了新的障碍和障碍-我的第一个真正的障碍是批处理限制。我的目标是建立一个可以随时在视锥中渲染至少10000个实体的游戏。

我踏上了实施基于着色器的实例化的新旅程(并在学习HLSL的同时学习了HLSL),放弃了XNA内置的Model和Effect对象来编写自己的替代品。一开始我很难理解VBO流。我搞砸了-我上网问关于实例化问题的问题,一直坚持下去,直到我终于了解了GPU在做什么。它得到了回报;在用PIX(dxsdk)调试VBO几天后,现在有超过2万个测试实体在视口中放大。

现在,我对渲染管道如何工作有了“一些”想法,但是还没有完成-我最终创建了自己的游戏状态,相机,后期效果和实体对象,通过构建自己的游戏状态来使其脱离XNA Content Pipeline。加载程序(个人不喜欢XNB东西),创建了复杂的深度排序和混合状态分离的几何链,并且还实例化了精灵和文本,这些都投影到了游戏场景中。

我几乎整整一年都在不断地添加,修复,更改和尝试该功能。最后,它的表现非常好。现在,我了解了引擎盖下发生的事情,因为我创建了它-我的孩子。

现在,我的引擎基本稳定并且即将完成。这不是完美的:脚本很糟糕,GUI一点也不好。但是我仍然喜欢它。成千上万的代码,资产和媒体行陷入了一个2GB的私有git存储库中,而所有麻烦都让我不得不尝试进行从未有过的开发。我克服的每一个障碍都是一个教训,也是一种解脱。

我完成了几乎所有想要的操作。

但最后-我认为是时候放下她了。 我很满意自己自己编写了一个如此巨大的引擎,并在网络上和其他Gamedev伙伴的建议下,我决定我要再做一次-并且做得更好-因为现在这一次我大部分时间知道我在做什么

该项目仍保存在我的GIT存储库中。

我编写新引擎的第二遍(这次是在MonoGame上)进展顺利。发生故障时,更容易修复。少乱七八糟。我希望在今年的某个时候公开展示我的游戏,因为我倾向于对我的代码有些“过分”。

最后,编写自己的引擎是我学习“如何”做事的方式,同时可以说我确切地知道并理解每个组件的功能以及它们应该如何工作。我实际上讨厌阅读其他人的代码,特别是对于大型的未记录项目。我希望我使用的所有东西都由我自己构建。

不过这只是我。我怀疑我是否会使用预制引擎,可能是因为我认为编写自己的框架比坐下来处理别人的代码(完全控制)更有趣。


13
这更像是散漫的个人轶事。您可能可以对其进行编辑以使其更加简洁,并且可以提供更好的答案。
乔什

2
当您有时间做所有事情时,这无疑对学习和制作游戏都非常有用。当确实是你的时候。但是,如果您想与某人合作怎么办?还是与其他程序员一起在公司工作?如果有人想加入您的项目,那么应该让他们阅读您的代码也就有点奇怪了-对他们来说,其他人的代码..就是您讨厌的东西。我发现阅读代码也是一项非常重要的技能。没违法,我相信您已经学到了很多东西,并且编写了一个很棒的引擎-只是请注意,这还不是全部。
2014年

我知道,我所从事的每一项涉及任何语言的代码的工作,对我来说都是单身的。
科迪·摩根

我必须说,我确切地知道一个人推出自己的引擎/工具/任何原因的原因。但是它有一个价格(就像所有东西一样)...我觉得当您无法阅读/理解最糟糕的代码时,所有老板都非常讨厌它,所以请继续并把自己当成**** *大量编写得很差的维护不好的代码,而没有文档,只是对它有所了解(“真实”世界)。没有冒犯的意思。
Quonux

这就是我们程序员不能拥有美好事物的原因。因为我们始终希望自己做所有事情,而不是使用工作和可信赖的方法。我迫切需要自己编写所有内容,但我正在慢慢学会信任他人,到目前为止,它对我的​​好处多于坏事:)
Maurycy 2015年

15

编写您自己的引擎的绝对关键原因(让我感到惊讶的是,到目前为止还没有人调用它)是为了调试

如果您编写了一个大型而复杂的游戏,并且其中有一个崩溃错误,并且您拥有源代码(并且由于编写了代码而对源代码非常熟悉),则只需将调试器附加到过程并查找导致崩溃的原因。做完了

如果您正在使用别人的商业上可用的引擎,而您没有该引擎的源代码(通常没有),那么调试出现的任何问题-甚至在您自己的代码中-都将进行变得更加困难。而且,如果您在引擎本身内部遇到错误,您将无法自行解决。您希望如何从发布日期起一周,并让某人发现您正在使用的引擎中的崩溃错误-无法解决的崩溃错误,因为它位于专有引擎内部,而您无法使用有源代码?我已经看到了这种情况的发生-您别无选择,只能与供应商进行紧急支持,并希望他们能够(并且有兴趣)为您解决问题,同时您四处乱逛,

游戏开发很困难,但调试却要困难几个数量级。在我的书中,任何使游戏开发变得困难而调试却容易的事情都是巨大的成功。


3
这是我们使用开源引擎(cocos2d-iphone)经历的一大挑战。我们可以使用与编写代码完全相同的方式对其进行调试。实际上,我发现思考开放源代码的方法是您的代码。如果有错误,我们就必须解决这些问题,就像我们的代码的任何其他部分..
antont

1
可以说是任何中间件。调试代码占程序员工作的80%,而对于当今使用的中间件技术来说,处理中间件是一个普遍的问题,中间件数量超出了我们的预期。学会克服这些只是工作的一部分。如果引擎没有发生故障,那么您将无法控制其他事情。减少移动部分是个好主意,但是当它变得复杂如游戏开发人员时,无论如何您将不得不处理很多这些部分。
蒂姆(Tim)

@Tim我非常不同意-一件外部事情可能会以一种难以调试的方式发生错误,并不意味着我们应该耸耸肩膀,辞职以让一切以难以调试的方式发生错误。显然,需要根据具体情况进行处理,但是引擎是一个大型系统,棘手的错误经常会潜伏。如果您有能力自己做,为什么希望自己控制它?
特雷弗·鲍威尔

@TrevorPowell显然,它归结到项目的复杂性,就像你说的,一个案件逐案的基础上,而是简单地重新发明车轮(尤其是如果它是一个巨大的车轮)需要被认真考虑关于通过节省的时间没有做它。中间件使事情变得容易。作为开发人员,我们相信我们总是可以重新发明一个解决方案以使其更好,而无需考虑该解决方案的组合程度。一些障碍>重新发明>完全错误的解决方案
蒂姆

2
@Tim RE:“中间件使事情变得容易”,显然,我的经历与您截然不同。
特雷弗·鲍威尔

9

这里有很好的答案,但是它们缺少重要的一点。

当今许多可许可的引擎最初都是专用引擎

让我们以虚幻为例,因为它无处不在。

如今,当您想到Unreal时,往往会想到获得许可并可以使用的引擎,而不必自己构建引擎,但事实并非总是如此,从前,Unreal引擎甚至不存在一个单独的实体。

从前有个叫做虚幻游戏。它的开发人员决定构建自己的引擎,而不是许可现有引擎。经过几次迭代后,该引擎成为了我们今天所知的虚幻引擎。

关键是这是一个鸡与蛋的问题。您可以许可的中间件的每一点都始于某个地方,而它通常根本不是作为中间件而开始的(有时甚至根本不是为了成为中间件而编写的,并且其当前状态实际上是偶然的)。人们编写自己的引擎是因为最终必须有人编写引擎,而今天的专用引擎可能会成为明天可授权的中间件。


2
值得一提的是,在当初创建诸如Unreal之类的游戏时,别无选择,只能从头开始编写所有内容。这只是在过去的百年,我们有一个选择ñ引擎...
joltmode

3

工作室可能还会选择“构建”而不是“购买”技术的其他原因:

  • 新平台:新的移动操作系统,控制台或控制器。考虑一下跳动,谷歌眼镜等。跨平台支持很困难
  • 新的游戏机制和/或游戏内编辑器:几年前想想FEZ(2D与3D)
  • 缺乏优秀的免费开源游戏编辑器。缺乏有关旧游戏现有来源的良好文档
  • Studio工具链中工具的演变(或添加新工具
  • 发动机定价和许可大战

我也同意特定的要求/需求和引擎价格,并且许可证战争迫使一些工作室推出一些引擎。

“购买”或“使用”其他引擎的良好动机是:

  • 代码重用:从第一天开始,已经在其他游戏中使用的引擎经过了更多测试,更稳定,并且可能具有所需的大多数功能。
  • 扩展:您可以扩展一些开源引擎。
  • 免费:或几乎免费,因为即使免费的开源引擎也需要一些开发人员时间来学习。

2

历史原因(主要是)。
这与定价有关。

过去几年中,您看到运行Unreal或CryEngine的每款游戏都必须支付巨额资金。特别是如果您想获取源代码(即:您需要UE,而不仅仅是UDK。)

但这改变了。现在,随着价格竞争的开始,每个人都可以负担得起更大的引擎。
那是什么意思...

  • 您将看到同时使用UE4和CryEngine的更多游戏。
    不过,它们不会像以前那样是AAA游戏。
  • 每个项目的自定义要求和需求都不会消失。
    请参阅Relic的Warhammer40k / COH发动机,或将军在EA使用的发动机。
    因此,即使有人买得起更大的引擎,他们也不一定会提供更好的选择。
  • 市场上还有其他。像Unity。
    人们喜欢它的原因在于它的易用性,快速的性能以及庞大的资产储备。
    当然,Unity可以部署到几乎任何平台上。

是的。需求,过去的定价等等。


1
我不会将Havok称为“经过大量修改”。
乔什

Havok不仅仅是物理引擎吗?
菲利普2014年

是的,我记得GW2没有做太多的记录。
乔什

不是(ie.: you want UE, not UDK only.)
Keavon 2014年

#JoshPetrie:抱歉,老实说,我没有Havok的经验,也从未使用过。所以我偶然发现了GW2的LICENSE文件,然后几天前访问了它的Wiki页面,并看到了Havok。然后我对在游戏开始时看到“ Havok”有一些旧的记忆,我认为这是引擎。但是那时我还抬头看了Havok,我知道这是一个物理引擎。tl;博士:我对Havok感到困惑。|| #Philipp:不仅如此,但我的确不是游戏引擎。|| #Keavon:对,固定。谢谢!
Apache

0

团队组织如何?

调试内容的背后是文档和支持,没有代码,因为最后我不想让我的建筑小组接触到我自己引擎的代码。那可能是一团糟。

因此,我需要一个支持小组来做到这一点。但这增加了成本:更多的人,更多的地方,更多的电话,更多的管理...

一种解决方案可能是外包给一家中间件公司,从而将资源分配给我的游戏制作业务,即创意团队和作家。

对于初创公司而言,使用和构建它不是一个不错的选择。而且,在获得足够的收入后,您可能会想要建立自己的引擎...


0

好。适用于大多数使用由开发人员创建的引擎的游戏。经常。他们无法使用3rd party引擎做事。因此他们可以自己制作游戏,从而使自己的游戏开发更加容易。或至少可能。

以及许多通常使用自己的引擎的游戏。工作更好。因为他们更自定义,而且100%适合他们的任务。游戏本身的感觉也不同。玩游戏并说出多数民众赞成的确很容易。虚幻引擎或其他任何东西。通常会使用更多的自定义引擎,因此应该会产生一款独特的游戏。外观独特且工作独特,它的性能应优于在预制引擎上创建的游戏。


0

我的答案与现有答案有所不同,所以我添加了答案,尽管已经很晚了:

如果您从问题或Witcher系列中获取Valve示例,则过程为:

  • 许可引擎
  • 根据您的目的修改/调整引擎
  • 发布游戏并赚钱
  • 为下一个游戏创建自己的引擎

几乎所有经济上合理的开发人员都使用相同的方法来开发自己的引擎。通过修改引擎,他们积累了引擎工作原理的知识,并遇到了许可引擎导致的设计约束。最终,他们拥有创建引擎所需的内部知识,为引擎创建提供资金的现金以及将受益于专用引擎的项目。当时,构建引擎的原因是:因为这是明智的选择。


-2

我的编程老师告诉我们,仅使用您知道如何构建的API /方法/类/函数

因为如果您不知道如何构建它并利用别人的工作机会,那么您就不知道它是如何工作的,而当您不知道某事是如何工作时,那么您很容易出现错误和问题,并且容易陷入混乱。

学习简单的东西会在复合时导致奇怪的问题,更不用说复杂的东西了,例如游戏引擎,尤其是当您应该使用该游戏引擎来运行游戏时,这可能会导致许多意想不到的结果和问题。

并且游戏引擎在构建时不会遵循逻辑代码或任何其他逻辑,请确保可以预料到某些事情,但实际上,一切都将基于他人对某种编程语言或某种系统工作原理的理解和知识来构建

例如,如果我选择写一个数学方程式,我可以用多种方式写它,我可以用多项式,微积分,基本几何或代数或任何适合我的方式表示它,但有时我会以某种形式/格式写,因为我想要为了能够操纵容易获得的东西,例如,如果我计划进行很多顶点操纵,我可能会使用基本几何来编写此数学模型,但是如果我想使用渐变来更改曲线,则可能会专注于微积分轻松操作渐变等,无论我打算使用哪种方式,都可以轻松访问

有时,当前的游戏引擎可能不会给我我打算做的灵活性,甚至可能为您提供该选项,但这样做却非常困难,因为游戏引擎将物理力作为其运动和操纵的主要来源游戏中的对象

无论如何,我希望我能清楚指出我要指出的内容


6
-1如果您从事任何规模可观的项目,则实际上您应该使用不知道其编写方式的函数/类,并且可能无法自己编写一个自己的书,而不必学习有关该书的大量书籍。话题。我并不是说每个程序员都应该知道什么,但是游戏引擎是一个巨大的项目,并且期望程序员X专门的主题X对主题Y不了解,因此必须使用该函数,但我也不是表示您不应该使用该API,但是您可能没有足够的知识来编写API。
concept3d

2
您的老师知道如何从头开始用化学元素制造一辆完整的汽车吗?还是他假设它可行就驱动了它;-)
Kromster说支持Monica 2014年

1
@ concept3d在其他人设计您使用的函数/类的项目上工作有所不同,因为通常如果您不了解某些内容,可以轻松地进行解释,那么程序员便会使用他的代码类/函数/库。 /她不知道自己是一个愚蠢的人,甚至公开提供的类和API都附带了手册和Wiki,这些手册和Wiki解释了这些API或函数的功能,只是期望使用它而不知道它的功能就像试图游泳一样深水而又不会游泳,而且真的很无知且容易出错
whatybingytie 2015-3-16

@ hopjoppe5如果您检查接受的答案,则这是人们开发自己的技术的唯一原因。许多库/代码都是在现实世界中外包的,您必须使用它。阅读手册与了解实现方式有所不同,对于某些算法,甚至不鼓励您自己实现,并且应该由本领域的专家来实现,如果您有任何实际经验,您将理解这一点。知道一切都是不可能的。
concept3d

进行抽象的主要原因之一是编写代码,以便不了解其工作原理的人仍然可以使用它。在开发比pong更大的游戏时,您不太可能熟悉每一段代码。在大多数情况下,这是一件好事,因为这意味着您可以将精力集中在当前正在处理的事情上,而不用担心输入系统如何处理对“按动键按下”事件的请求。
Aidiakapi 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.