引擎内部:为什么要习惯?

去年,我在Reforged Studios做了四个与引擎开发相关的演讲。 这些演讲引起了很多兴趣,我很高兴能够谈论这个话题,并对我们在公司中的工作方式有所了解。

根据我收到的反馈,我认为也开始撰写有关该主题的文章是有意义的。 本文是我打算写的系列文章中的第一篇,我将深入研究开发要求苛刻的3D游戏引擎的实际含义。 每篇文章都是在同一条轨道上的独立文章,我的想法是写出当时看来重要和有趣的内容。

在第一篇文章中,我将介绍为什么我们首先开始开发自定义引擎。 因此,让我们直接进入。

公司背景

在考虑公司做出的选择时,首先了解人员来自何处总是很重要的。 Reforged Studios由四位行业资深人士创立,他们一直在制作游戏,例如英雄联盟,魔兽世界,极品飞车,EVE:在线游戏和许多其他知名游戏。 两位创始人也是工程师,他们一直致力于定制技术。 在我看来,这也是考虑使用定制引擎的前提。

在考虑如何构建基础技术时,技术专长和热情是重要因素。 当然,它不是唯一的因素,但确实很重要。 制作人们真正相信并喜欢的东西通常会带来积极的副作用,从而带来总体上质量更高的产品。 该公司的创始人既热衷于制作出色的游戏,又致力于制作能够使我们与众不同的出色技术。

Reforged Studios显然是一家游戏公司。 它的商业模式围绕着制作出色的游戏并有效地管理所涉及的风险。 因此,让我们仔细研究一下开发定制游戏引擎在商业上的意义。

管理业务风险

游戏开发是一项冒险且受到冲击的业务,这不足为奇。 良好的管理有很长的路要走,但从本质上讲,这始终是制作人们喜欢坚持的产品。 对于游戏即服务而言,此等式的另一个角度是:游戏也需要长期维护。

时代在迅速变化。 不久前,几乎没有任何游戏能比发行日期早很多,而且很少有更新。 如今,越来越多的游戏采用游戏即服务的模型,您可以在其中开发原始产品并希望将其维护多年。

由于产品周期长,您最初选择的技术和体系结构将对未来开发工作的有效性产生持久影响。 您将必须对5到10年前实施的内容进行更新。 这也给发动机带来了很大的责任。

认识到这一责任对于选择使用定制引擎非常重要。 拥有我们自己的基础技术意味着我们不会碰到我们控制范围之外的与软件相关的意外事件。 当然,我们还使用了一些第三方技术,但是这些都是独立的组件,无需重写整个代码库就可以替换。

另一个方面是支持。 以前使用过许可引擎,即使我们确实获得了出色的支持,但我们仍在开发一个基本上不透明的系统,其中仍然存在奇怪的错误。 我们有几个问题,我们无法真正解决:

  1. 优先级已无法控制。 当然,我们可以指定一个优先级,但这是我们的优先级,可能与引擎供应商的优先级不匹配。 例如,我们遇到了一个非常烦人的日志垃圾邮件问题,该问题阻塞了我们的日志,但是无法删除日志条目,因为它会影响其他客户。
  2. 创建复制案例非常耗时。 为了有效地修复错误,您需要制作一个极简的复制案例并将其报告给引擎供应商。 这通常需要花费几个小时到几天的时间。 而且,事实证明,甚至没有复制案例和分步说明也不能保证可以复制该错误。
  3. 我们没有源代码访问权限。 即使我们拥有了它,维护我们自己的引擎分支也将是太多的工作。 引擎是如此复杂,以至于对其进行更改对我们拥有的团队来说并不是一个好主意。 但是,由于没有源代码访问权限,这意味着我们发现错误并正确报告错误的机会更小。

第三点实际上突出说明了许可引擎的另一个问题。 它们通常非常庞大,并具有数以吨计的功能,其中大多数我们甚至都没有使用。 一方面,为这些功能付费是没有意义的,但更重要的是,这些功能是整个引擎的负担。 作为程序员,我们都知道支持所需的功能越多,开发工作就变得越慢。

值得一提的与业务风险有关的最后一件事是,使用自定义引擎始终可以花一点点加班时间来解决问题。 使用许可的引擎(如果您没有资源来维护自己的分支),您实际上并没有这种奢侈。

举例来说,假设您从现在起有两天的截止日期,而您刚遇到一个可怕的错误,可能会阻止您发货。 如果您使用的是许可的引擎,则必须创建一个复制案例,并希望引擎供应商有时间研究此问题并能够复制该案例。 仅通过从版本控制中拉出特定版本并在调试器中启动游戏,所有这些时间本可以用于实际修复错误。

选择你的战斗

定制引擎需要始终发挥作用。 我们已经描述了它如何为我们的业务服务,但这并不是习惯的唯一原因。

Reforged Studios正在制作一款将首先在移动平台上发布的游戏,而该游戏平台自然具有更有限的性能特征。 在研究了不同的发动机解决方案之后,没有一个适合。 我们的游戏需要能够在屏幕上渲染大量角色,并具有大量效果,并且我们想确保我们不会因为无法控制的因素而在性能方面受到限制。 当然,这也与我们在上一节中讨论的业务风险管理有关。

由于我们最想控制的方面是渲染,因此我们决定通过选择自己的方法来采取组件明智的开发方法。 开发自己的引擎并不意味着您必须自己实现一切。 因此,我们最终为GUI,配置存储,客户端-服务器通信等选择了一些中间件和开源解决方案。这使我们能够专注于与众不同之处,而不是专注于投资回报率有限的事情。 。

革新

差异化是现代世界的关键词。 作为一家公司,您必须有能力在竞争中领先一步。 这迫使您期望产品设计和技术都明智。

定制引擎使我们有机会与硬件和软件行业的合作伙伴合作,因为我们不受限于单个软件平台。 第三方引擎可以快速采用新技术,但是使用定制引擎,我们可以更快地做出反应,并与硬件和软件供应商建立一对一的合作关系。

VR&AR就是一个例子。 许可技术往往已经对这两种方法都提供了广泛的支持,但是定制引擎使我们能够处理未完成的技术,并成为采用最新创新的第一波技术的一部分。

摘要

当我们将所有呈现的视点放在一起时,使用自定义引擎构建游戏就变得很有意义。 我很高兴地说,我们的游戏比以往任何时候都稳定。 为了证明这一点,我们只是在引擎中实现了崩溃报告,但是在玩游戏几周后唯一报告的崩溃是用于测试系统的崩溃。

总而言之,出于多种原因,我们选择开始使用自定义游戏引擎。 首先,从业务角度讲,这是有道理的。 定制引擎使我们能够更有效地控制业务风险,以至于我们对外部的依赖性有限,并且能够更好地解决遇到的问题。 在启动项目时,我们还对现有引擎进行了广泛的研究,发现没有任何引擎能够很好地满足我们的需求,以至于我们准备放弃定制解决方案提供的所有好处。

我们从一开始就在公司拥有合适的人员,这使我们从一开始就可以开始研究发动机。 开发定制引擎并不意味着我们自己开发一切。 对于我们认为没有必要实施定制系统的情况,我们使用了许多第三方解决方案。 这使我们能够专注于对我们产品至关重要的零件。

最后,定制技术使我们能够站在技术创新的最前沿,并与硬件和软件供应商建立合作伙伴关系。