我了解的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/171466.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于JAVA+SSM+VUE+微信小程序的前后端分离的生活日用品交易平台的设计与实现

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着互联网的快速发展…

Python Web框架的三强之争:Flask、Django和FastAPI

JetBrains 公布 2022 Python 开发者调查结果。 完整报告地址:https://lp.jetbrains.com/zh-cn/python-developers-survey-2022/ 这是由 Python 软件基金会 (PSF) 和 JetBrains 共同开展的第六次官方年度 Python 开发者调查,回复于 2022 年 10 月至 12 …

国外客户要求免费样品?我来教你如何应对

这一次的问题对外贸业务员来说是非常重要。无论你是做什么行业,无论你是做什么产品我相信这个问题对你来说超级有用。 关于发样品给客户我有四个方案来跟大家分享,我希望你能够喜欢希望你很认真的思考一下: 方法一【样品费及运费一起收】&am…

【网络编程】简述TCP通信程序,三次握手,四次挥手

文章目录 🎄TCP通信程序⭐打印字符串✨中文乱码问题🎈解决方法 🌺TCP三次握手🌺TCP四次挥手🛸其他 🎊专栏【网络编程】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 &#x1f386…

腾讯云标准型S5云主机性能评测_CPU内存_带宽系统盘测评

腾讯云服务器CVM标准型S5实例具有稳定的计算性能,CVM 2核2G S5活动优惠价格280.8元一年自带1M带宽,15个月313.2元、2核4G配置748.2元15个月,CPU内存配置还可以选择4核8G、8核16G等配置,公网带宽可选1M、3M、5M或10M,腾…

buildAdmin 后端控制器的代码分析

buildAdmin的代码生成&#xff0c;很像是 fastadmin 的生成模式&#xff0c;当我们利用数据库生成了一个控制器的时候&#xff0c;我们可以看到&#xff0c; 它的生成代码很简洁 <?phpnamespace app\admin\controller\askanswer;use app\common\controller\Backend;/*** 回…

2023.11.19使用flask制作一个文件夹生成器

2023.11.19使用flask制作一个文件夹生成器 实现功能&#xff1a; &#xff08;1&#xff09;在指定路径上建立文件夹 &#xff08;2&#xff09;返回文件夹的路径和建立成功与否的提示 main.py import os from flask import Flask, request, jsonify, render_templateapp F…

archery修改为不能自提自审核上线SQL

目录 背景修改代码效果参考 背景 我和同事都可以提交上线SQL&#xff0c;但是不能自己提交的SQL自己去审核通过。目前的情况是可以自提自审。 修改代码 找到/opt/archery/sql/utils/workflow_audit.py文件 ...省略...# 判断用户当前是否是可审核staticmethoddef can_revie…

VScode调试没有反应

点击调试按钮后没反应 有可能是vscode中安装的python插件版本问题 可以通过重新安装比较旧一点的python尝试解决此问题 步骤如下&#xff1a; 然后从中选择比当前版本更低的版本即可 安装完成后需重启vscode

【从入门到起飞】JavaSE—多线程(1)(实现方式,成员方法)

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f33a;进程&#x1f33a;线程&#x1f384;并发&am…

线性表但是是Java中数组实用使用

线性表定义&#xff1a; 由n (n≥0)个数据特性相同的元素构成的有限序列称为线性表&#xff0c;(n0)的时候被称为空表。 线性表的顺序表示 线性表的顺序存储又被称为顺序表 优点 无需为表示表中元素之间的逻辑关系而增加额外的存储空间可以随意读取任意位置的元素 缺点 插入…

商品购物管理与推荐系统Python+Django网页界面+协同过滤推荐算法

一、介绍 商品管理与推荐系统。本系统使用Python作为主要开发语言&#xff0c;前端采用HTML、CSS、BootStrap等技术搭建显示界面&#xff0c;后端采用Django框架处理用户的请求响应。 创新点&#xff1a;使用协同过滤算法&#xff0c;以用户对商品的评分作为依据&#xff0c;在…

[C国演义] 第二十二章

第二十二章 不同的子序列交错字符串 不同的子序列 力扣链接 两个数组的dp问题 (子序列 && 子数组(子串)) ⇒ 分区间来讨论 ⇒ dp[i][j] -- 在s数组的[0, i]区间内, 去寻找t数组在[0, j]这段子串的个数 状态转移方程 遍历顺序 初始化 需要使用左上角的情况 ⇒ dp…

筒仓料位监测|敢不敢对“精度”下狠手!您家筒仓料位测得准吗?

您家是不是还在人工敲仓估算&#xff1f; 您能精确知道料位和库存吗&#xff1f; 您能实时看到库存盈亏吗&#xff1f; 筒仓里装了什么&#xff1f;用了多少&#xff1f; 什么时候进料最划算&#xff1f; 您家的筒仓管理方式可靠吗&#xff1f; 上海思伟筒仓料位监测方案 看…

亚马逊出口电热毯日本PSE认证需要什么资料解析

电热毯出口日本需要办理PSE认证&#xff0c;电热毯&#xff0c;又名电褥&#xff0c;是一种接触式电暖器具。 PSE认证介绍是日本强制性认证&#xff0c;包含安全及EMI&#xff0c;用以证明电子电气等产品符合日期电气用品安全法或国际IEC标准的要求。日本电气用品安全法规定&am…

vue-waterfall2 实现瀑布流,及总结的问题

注意&#xff1a;引入需要在主界面引入&#xff0c;直接在组件中引用会有问题 1.安装 npm install vue-waterfall21.8.20 --save &#xff08;提示&#xff1a;一定要安装1.8.20&#xff0c;最新版会有一部分问题&#xff09; 2.打开main.js文件 import waterfall from v…

解析SOLIDWORKS教育版与企业版:选择合适版本,助力创新设计

SOLIDWORKS作为领先的三维CAD软件&#xff0c;旨在为工程设计、产品开发和创新提供全面支持。在SOLIDWORKS产品线中&#xff0c;教育版和企业版是两种常见的版本。让我们来了解一下它们之间的区别和特点。 SOLIDWORKS教育版&#xff1a;学习、探索、启发创新 面向教育和学术&…

电子邮件解决方案有哪些?邮件系统的问题?

如何选择适合的邮件解决方案&#xff1f;免费稳定企业邮箱系统&#xff1f; 电子邮件都是我们常用的工具。但是&#xff0c;随着电子邮件使用越来越普遍&#xff0c;如何有效地管理邮件也成了一个重要的问题。蜂邮EDM将介绍几种常见的电子邮件解决方案&#xff0c;帮助大家更好…

一篇文章让你彻底了解Java算法「十大经典排序算法」

✍️作者简介&#xff1a;码农小北&#xff08;专注于Android、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f449;关注✨、点赞&…

linux上安装qt creator

linux上安装Qt Creator 1 Qt Creator 的下载 下载地址为&#xff1a;http://download.qt.io/archive/qt/ 根据自己的需求选择Qt Creator版本&#xff0c;这里我下载的是5.12.9&#xff0c;如下图所示&#xff1a; 在ubuntu上可以使用wget命令下载安装包&#xff1a; wget h…