查看原文
其他

Godot离开发3A游戏还有多远?

出品 | OSC开源社区(ID:oschina2013)
Godot 4.0 即将正式发布,据称此版本在功能、性能和可用性方面都包含全面的重大改进。不过社区目前面临着一个大问题:Godot 与主流商业产品相比有多大差距?
4.0 作为重大版本更新,其开发工作于 2020 年启动,在两年多的开发过程中,Godot 4.0 带来的新特性包括:支持 Vulkan API、改进图形渲染系统和核心引擎、改进 OpenGL、添加新的 Physics 特性、增强 GDScript 脚本、更好地支持音频、改进多人游戏模式,以及对 Godot 3.x 的大量其他改进。
当然,目前大多数新功能仍然存在重大错误和性能问题,无法在即将发布的 4.0 版本中及时解决。除此之外,Godot 还缺少一些基本功能,以下是最重要的一部分:
  • 流媒体处理 (Streaming)

从一开始就让游戏变长的传统方法是将它们分成几个阶段。一旦某阶段完成,它就会被卸载,同时加载新的阶段。
现在许多游戏仍在使用这种方法(毕竟,如果它没有损坏,就不要修复它)。但是,游戏设计越来越多地从 “独立阶段” 转向 “开放” 或 “连续” 世界,其中级别之间的界限消失。因此,以这种方式创建游戏更具挑战性。
常见的流媒体类型包括:纹理流、网格流、动画流和音频流。
其中,大多数实现起来相对简单。最复杂的是 mesh streaming,它一般需要和 GPU 剔除策略一起实现,以确保可以在不消耗 CPU 的情况下绘制非常大量的模型。这或多或少是像 Nanite 这样的技术在 Unreal 中所做的事情,尽管 Godot 在大多数情况下不需要实现那么复杂的东西。
流媒体是管理大型场景或开放世界所缺少的最重要的功能。没有它,Godot 用户将面临很长的加载时间(因为每个纹理、模型和动画都必须在显示任何内容之前加载)。如果并行加载太多资源而不是采用流式传输,还存在内存不足的风险。
  • 底层渲染访问 (Low level rendering access)

尽管 Godot 4.0 中有新的渲染器,但没有一种架构可以被认为是一种通用的解决方案。开发者通常需要实现未与引擎捆绑在一起的渲染技术、后期处理效果等。
Godot 的理念一直是迎合解决最常见的用例,并为用户自己解决不常见的问题敞开大门。
因此,这意味着需要通过 GDExtension 公开对所有渲染服务器结构的底层访问。这将允许在渲染步骤中创建自定义渲染器或插入自定义代码,这对于自定义渲染技术或后期处理非常有用。
  • 场景作业系统 (Scene job system)

为 Godot 4.0 所做的大部分工作都涉及对所有服务器(渲染、物理、导航等)的大型功能和性能改进。服务器现在也是支持多线程,以及经过优化,甚至资产加载现在也可以多线程完成。
尽管如此,场景系统尽管在可用性方面有了一些改进,但并没有得到显著的优化。
Godot 中的场景节点主要用于为有限数量的对象(最多数百个)承载复杂的高级行为(例如动画树、运动角色、IK、骨骼等)。目前没有采用线程,只使用了一个 CPU 内核。这使得它非常低效。
  • Swarms

如前所述,场景是为数百个实例中的复杂高级行为而设计的。不过,有时,一些游戏需要更多的实例,而不是复杂的行为。
这对于某些类型的游戏机制是必需的,例如:
  • 射弹

  • 某些类型的策略游戏中的单位,有数千个实体在地图上漫游

  • 城市模拟器中的汽车 / 人,成千上万的人出现在整个城市

  • 沙盒式模拟

  • 在 CPU 上运行的复杂自定义粒子

更有经验的程序员可以直接使用服务器,甚至可以插入 C++ 代码来完成繁重的工作。ECS 通常也被提议作为解决方案。甚至 GPU Compute(在 Godot 中完全支持)也可以很容易地用来解决这个问题。
但为了让 Godot 易于访问和使用,团队的想法是创建一个 swarm 系统来处理大量这些对象的渲染和物理,开发者只需编写代码逻辑。
  • 对大型团队的 VCS 支持 (Large team VCS support)

Godot 的文本文件格式对版本控制非常友好。他们只写需要的东西(没有多余的信息),保持部分的顺序,并且足够简单,只需查看差异就可以理解变化。很少有其他技术能在这一领域发挥同样的作用。
尽管如此,这还远远不足以实现大型团队协作。为了实现这一点,Godot VCS 支持必须在几个方面进行改进:
  • 更好地与文件系统扩展坞集成。

  • 如果在外部修改(并导出)资产,可以更好地实时刷新资产。

  • 支持权限和文件锁定:Git 不支持开箱即用,但 Git LFS 和 Perforce 支持。此功能对于大型团队来说至关重要,可以避免冲突并保护文件免受意外修改(例如,团队成员修改代码或他们错误地不拥有的场景)。

除非对此有可靠的支持,否则在大型团队中使用 Godot 仍然很困难。
  • 商业资产商店 (Commercial asset store)

虽然对于非常大的工作室来说,这不是一个感兴趣的领域,但中型工作室仍然依赖大量资产和预制功能。Godot 中目前存在的资产库仅链接到开源资源(例如托管在 GitHub 或 GitLab 上),无法用于商业资产。
对于 Godot 项目,商业资产商店将是增加额外收入来源的好方法,但直到最近他们才考虑到法律相关问题,随着 Godot 的所有权转移到 Godot 基金会,这是一种新的可能性。

Godot 团队表示,虽然本文的目的是阐明这些未实现的工作对于使 Godot 成为更接近商业领域产品的重要性,但是有一个关键细节更加重要:
Godot 是免费的开源软件。因此,任何人都可以对其进行修改以实现任何目的。
目前,许多大型工作室都有能力创建自己的内部技术。尽管如此,随着硬件的开发变得越来越复杂,他们还是放弃了,转而花钱购买现有的商业技术产品。
另一方面,Godot 是一个优秀的构建平台,因为它已经解决了绝大多数问题。因此,越来越多的工作室以 Godot 作为基础,从中衍生出自己的技术。
这是一个双赢的局面,因为它允许他们保持创新的自由,同时避免支付昂贵的技术许可费用。
团队坚信 Godot 会从目前的状态过渡到被更大的工作室更广泛使用的项目,但这肯定需要他们做更多的工作。
相关链接:https://github.com/godotengine/godot-proposals/issues/2380


往期推荐



谷歌多名资深 “开源大佬” 被裁员

大厂裁员轰轰烈烈,哪个技术岗位可以独善其身?

  全球开源技术峰会GOTC 2023将于4月在上海举办



这里有最新开源资讯、软件更新、技术干货等内容

点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存