我了解的3D游戏引擎和图形开发框架

如果你像我一样,没有什么比编写或设计软件更让人兴奋的了。 当我编写代码时,我所获得的巨大快乐促使我开发了跨越许多软件领域的项目。

这些领域之一是为本机应用程序、桌面展示或 Web 创建 3D 图形。 我从未创建过任何 3D 游戏,但很多时候我需要创建 3D 物理模拟或呈现 3D 场景以响应作为输入接收的数据流。

在我决定开发 3D 软件之前,没有人警告过我,决定从什么开始将是一项挑战。 从用于创意场景的过多框架来看,在开始做任何工作之前我必须做很多工作:)。

免责声明:这不是另一个“top X”帖子。 我要谈论的一些技术可能肯定很流行,但这不是重点。 3D 图形场景非常广阔,这更像是我对一些解决方案的方法和经验的记录,而不是对顶级框架的比较。

NSDT在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 

1、游戏引擎

啊,这是我遇到的大多数软件工程师的甜蜜圣杯。

我一生中接触过的大多数开发者对于创建游戏甚至使用游戏都抱有相当模糊的想法。 3D 图形是一整套哲学,其中涉及许多软件工程师所畏惧的东西; 数学。 四元数、矩阵变换、这如何应用于光线投射、照明如何工作(仅举几例)。

理论部分之后,接下来是实践部分:文件格式(PNG、GLTF、导入器)、网格、图形规范(OpenGL、WebGL、Vulkan、Metal)。 然后你有物理引擎、声音引擎、游戏引擎、AI引擎。

幸运的是,我们有游戏引擎来帮助我们摆脱所有这些烦人的事情,减轻开发人员的负担,让我们专注于重要的事情:我们的游戏。 但如果我们不想开发游戏怎么办? 如果我们希望运行 3D 模拟、可视化一些数据、查看一些模型或在简单的 AR 应用程序中工作,该怎么办?

2、AAA级游戏引擎

在游戏开发场景中,你拥有那些能够开箱即用的大型游戏引擎,例如 Unreal Engine、Unity、CryEngine。 这些引擎绝对可以做任何事情。 它们最初设计时就考虑到了构建游戏——这一点也表明了这一点。 一些最好的 AAA 游戏就是用它们构建的。 还有Godot引擎。

不久前,我使用我的 Mac 开始了我的游戏引擎之旅。 我知道多年来,Mac 上的游戏一直是事后才想到的(无论是创作还是游戏),但由于各种原因,不在 Mac 上开发和玩游戏会造成交易破坏。 首先,它显示了一个游戏/游戏引擎是多么的深思熟虑。 其次,我的主要开发机器是Mac,我不打算很快放弃它。 最后,AR 在 iOS 上大放异彩,借助 Metal,macOS 变成了处理野兽。 无论如何,请考虑我在这里的经历是使用 Mac 获得的(尽管事件的性质对读者来说应该没有区别)。

AAA 引擎是有成本的,要么是版税,要么是每月费用。 然而,提到的那些提供了一些非常宽松的免费计划,允许在生产中进行实验和使用。

根据我对 Unity 和 Unreal 的有限经验,我想说 Unreal 在“最佳外观游戏引擎”类别中获胜,同时仍然提供在 Mac 上开发的能力(CryEngine 目前无法做到这一点)。 然而,Unity 在“最佳生态系统”方法中无疑获胜。 对于我的简单 3D 游戏来说,通过执行简单的 Google 搜索就可以相对轻松地找到我需要的任何内容。 我认为Unity的编程模型与此有关。 你会看到,在虚幻中,你要么使用蓝图(虚幻的可视化脚本系统),要么使用 C++。 Unity 还提供了可视化脚本系统(我不认为它像 Unreal 那样功能齐全)和 C#。 C# 是一种比 C++ 更容易学习和使用的语言,这使得开发对于经验不足的程序员更具吸引力。

难怪大多数游戏开发工作申请都提到 Unity 作为先决条件。

3、对于爱好者:Godot

然而最近,又有一款游戏开发引擎引起了我的注意,名叫Godot。 Godot 标榜自己是“我们一直在等待的游戏引擎”,并引入了“制作游戏的不同方式”。

我很感兴趣,决定尝试一下,结果给我留下了深刻的印象。

Godot 在我的 Mac 上大约需要 75MB,包括整个应用程序和游戏引擎。 而且它是完全免费和开源的。 没有版税,没有付款,甚至连简单的注册都没有。

Godot 的开发模型围绕将行为和外观放入动画和脚本等对象中,并在任何你喜欢的地方重用它们。 这对我来说是相当新鲜的——它只是“点击”到了我的脑海中。 这就是我想要开发场景的方式。 更不用说精美的用户界面让你想使用该引擎。 Godot 的脚本语言主要是 GDScript,一种功能齐全的类似 python 的语言,并且还支持 C++(通过绑定)和 C#(在后续版本中添加)。

据传 Godot 擅长 2D 游戏开发,但不擅长 3D 游戏。 对于我创建的场景和引擎附带的演示来说,Godot 已经足够了,尽管它无法在复杂的 3D 场景和 AAA 引擎中执行。 也就是说,Godot 渲染引擎正在被重写以使用 Vulkan(并且在 OS X 上,它将使用 MoltenVK 作为从 Vulkan 到 Metal 的转换层),因此 Godot 4.0 将缩短与 AAA 引擎在性能和质量上的距离。

总而言之,Godot 是我在开发业余爱好项目时最喜欢的游戏引擎。 GDScript 非常适合游戏开发。 Godot 对开发人员非常友好,以至于有人甚至只使用引擎本身就在 Godot 中创建了精灵编辑器 — Pixelorama

总的来说,如果我要投入时间进行游戏开发并被一家大公司聘用,我会选择 Unity 并且仍然学习 Godot。 对于我目前的项目来说,无非是简单的概念证明或简单的模拟,Godot 已经足够了,而且会变得更好。

另外,有点偏离主题,但如果你正在寻找优秀的 2D 游戏引擎,可以看看 Cocos

4、图形框架/中间件

对于任何涉及 3D 图形的项目来说,拥有 Unreal、Unity 或 Godot 等游戏引擎似乎就足够了。

但这不是真的。 尽管这些引擎完全能够产生我感兴趣的图形保真度,但我决定不将它们用于需要 3D 图形的项目。 对于许多用例来说,使用功能齐全的游戏引擎可能看起来有点大材小用。

我以以下心态接触这些引擎:

  • 我是一名业余 3D 开发者(请注意,我不是游戏开发者)
  • 我想创建 3D 图形,并将它们与声音很好地结合起来,并使它们具有交互性。
    我希望能够使用默认的物理引擎执行简单的模拟。
  • 我想将我构建的任何内容合并到本机应用程序中,无论是在 Windows、iOS、Android 还是桌面上。

当谈到研究创意编码解决方案时,我需要做出的第一个选择是我是为浏览器(并且我可以将其嵌入到任何地方)还是为桌面开发一些东西。 我研究了两种做我需要做的事情的方法。

Web 3D 的优点:

  • 设置更容易
  • 它不需要你搞乱本机编译——由于操作系统及其驱动程序和 OpenGL 实现之间的差异,这会很痛苦。
  • 不必担心 OpenGL 被弃用(特别是如果你想面向 macOS 用户)。
  • 比 Native 更多的开发者友好框架
  • Javascript 比 C++(大多数原生 3D 库和框架选择的语言)更容易理解。
  • 它本质上是跨平台的。 它还可以轻松嵌入到任何 Web 应用程序中。

原生 3D 的优点:

  • 极致性能。 你可以做的事情没有任何限制。 如果 OpenGL 还不够,你还可以使用 Vulkan 或 Metal。
  • 可以更好地访问计算机的外围设备。 这对于从事外部输入工作的创意编码人员来说非常重要。
  • 它具有多线程。 JavaScript 不支持此功能。
  • 你有更多的选择(尽管其中大多数选择要求你比为浏览器进行开发更深入)
  • C++ 很方便。 不完全是。 就像当你想要一个富有表现力的 API 来执行数学计算时一样。 运算符重载在 C++ 和 GLM 中确实大放异彩。
  • 我知道我们正在谈论 3D — 但是如果想将视觉效果与声音相关联,则 Native 库和 Web 库之间根本无法进行比较,因此根据需要的声音处理量,你将必须使用 Native。

最终,我的项目的需求决定了我应该走的路。 所有这一切的要点是,Web 有其自身的一系列限制,并通过提供开发的便利性和简单性来弥补这些限制。 我想说,如果你想利用外围设备、声音/视频处理等,请从 Web 方法开始,然后深入研究 Native。

5、原生图形框架

我们先介绍面向创意编码人员的原生图形框架。

5.1 OpenFrameworks

OpenFrameworks 是创意编码人员的完美解决方案。 它是一个基于 C++ 的开源项目,其文档非常出色。 与其他创意编码框架相比,OpenFrameworks 的历史最长,因此其社区规模也更大。 OpenFrameworks 的大部分出色功能都归功于其庞大的附加生态系统。 有些比其他的维护得更好,但这确实表明 OpenFrameworks 是一个得到良好支持的框架,可用于构建解决方案的基础。 当谈到支持像 Kinect 这样的外围设备时,很可能有人已经发布了它的库。

如果满足以下条件,请考虑使用 OpenFramework:

  • 你想要一个使用 C++ 的高性能创意编码框架
  • 你需要利用庞大的社区,并需要社区可以提供的任何出色的扩展。

5.2 Cinder

Cinder 是 OpenFrameworks 的替代品。 它的用户群要小得多,但它针对的是需要强大且面向对象的方法的开发人员。 OpenFrameworks 具有使用 C++ 语言包装 C 风格代码和库的方法。 另一方面,Cinder 是围绕与 C++ 一起使用的概念构建的。

这使得 Cinder 成为一个经过深思熟虑的框架,具有出色的编程范式,旨在被经验丰富的开发人员利用。 它有非常好的文档,并且内置了对音频、视频和图像处理的支持。 它还提供了丰富的数学和实用程序库作为其核心的一部分。

在使用 Cinder 时,我非常喜欢的一点是,从头开始创建一些东西是多么容易,同时又能够尽可能接近底层。 Cinder 不会对你想要做什么做太多假设。

如果你想了解有关 Cinder 开发的一些项目的更多信息,可以查看展示页面

谁应该使用 Cinder?

  • 寻找 OpenFrameworks 替代方案的创意程序员
  • 开发人员正在寻求一种更加以 C++ 为中心的创造性编码方法。
  • 不害怕尝试新事物并与较小社区的框架一起生活的人

5.3 Magnum Engine

Magnum Engine 是一个引起我注意的框架,它是跨平台数据可视化的低级选择之一。

我最终没有使用它,因为我的项目总是需要更高级别的东西。 我对为图形提供平台所做的工作印象深刻,它不仅仅是现成的库。

Magnum 是人们用来开发自己的解决方案或库的框架之一。 支持 OpenGL,目前正在添加 Vulkan。 如果您喜欢将时间投入到较低级别的图形机制上,那么这就是适合您的框架。

5.4 bgfx

bgfx 是一个跨平台渲染库。 它是低级的并且面向 C++。 bgfx 支持多种渲染后端和平台:Direct3D、Metal、OpenGL、Vulkan —所有这些都适用于 iOS、Android、Linux、Windows 等。

bgfx所做的工作令人惊叹,它是经过严格考验的低级图形库之一。 许多游戏都使用它作为渲染后端(例如 ioquake3、mame),并且它的功能是无限的。 有趣的事实:Babylon Native 也使用它(请阅读下文)

bgfx 非常底层,它在渲染框架和平台之上提供了一个很好的抽象层,这样你就不必考虑支持不同的供应商和代码库。

因此,它不太适合创意编码,但这并不意味着你不应该使用它。 你应该意识到,如果打算使用它,你将需要比通常使用 OpenFrameworks 等解决方案所做的更深入。

6、Web图形框架

如果你正在寻找一种在 Web 上制作 3D 的方法,事情会更简单。 我只使用了网络上可用的两个引擎,但是有了这些引擎,我真的不需要比它们提供的更多的东西了。

6.1 ThreeJS

ThreeJS 是网络上最流行的 3D 图形框架。 它有一个充满 3D 示例的网站。 它的社区非常庞大,而且也有基于它构建的游戏引擎。 这是因为 ThreeJS 本身并不是一个游戏引擎。 事实上,它无非就是渲染图形。

然而,它在这方面做得已经足够了。 多年来人们一直用它建造美丽的东西。 我已将它用于简单的项目,我尝试为我所拥有的特定用例制作简单的 GLTF 查看器。 我发现我可以轻松创建 3D 场景,在其中放入一些东西、一些灯光和相机。 图形质量也非常出色。

ThreeJS 附带一个编辑器来构建基本场景或测试现有场景; 有很多导出选项。 您可以将场景最终导出为 ThreeJS 本机格式、COLLADA、GLTF、wavefront obj 等。 总的来说,使用它非常棒,直到我需要更多东西为止。

6.2 Babylon.js

我必须承认,我不确定 Babylon.js 是否应该归入这一类别,因为它既可以用作游戏引擎,也可以用作创意编码框架。

Babylon.js 于 2013 年发布,由两名 Microsoft 员工开发,并且仍然得到 Microsoft 的支持。 Babylon 是一个成熟的游戏引擎,它不仅仅是一个创造性的编码框架或渲染引擎。 它还扩展到覆盖原生平台 ——尽管现在判断结果如何还为时过早。 Babylon Native 使用 bgfx 作为其渲染后端。

Babylon.js 附带了一个很棒的游乐场工具,可以进行一些实时编码和场景构建。 它还包括一个精灵编辑器、一个材质编辑器等等。 还有一个优秀的编辑器,由社区维护,并且是开源的。 它支持拖放材质和对象、设置具有高级灯光效果的场景、放置声音效果、构建游戏逻辑等等。

根据我的经验,Babylon 使用更自然的光照来渲染我放入的场景,并且它还能够处理包含数十万个对象的更大场景,而不会造成太大压力。

虽然你可以使用编辑器创建 Babylon 场景,但也可以使用纯 JavaScript 库手动执行此操作。 这非常重要,因为我想动态加载一些 GLTF 模型,并根据导入的模型放置一些灯光和效果。 我无法使用预先构建的模型来做到这一点。 设置相机也非常简单。

让我更喜欢 Babylon 的是它的易用性、具体的 API、一流的 Typescript 支持和优秀的工具链。

7、结束语

我想通过这篇文章记录我多年来使用一些 3D 引擎/框架的经验。 无论你的经验如何,创建 3D 图形既有趣又充满挑战。 这对我来说也是最有价值的,尽管我目前没有日常工作来支持此类项目。

总体而言,3D 图形软件领域似乎充满了解决方案,并且没有一种放之四海而皆准的方法。 最有帮助的是了解 3D 图形的基础理论和技术,然后以每次解决明确定义的问题的心态来处理每个框架/引擎。 因此,你应该做好大量工作来确定适合每种场合的 3D 软件工具。


原文链接:我了解的3D引擎和框架 - BimAnt

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值