亚马逊的领导力准则是亚马逊文化的核心,它如同亚马逊的 DNA 融入贯穿每一个重要决策,深深影响着每一位亚麻人、影响着每一位亚马逊的客户、合作伙伴以及每一位亚马逊云科技的构建者。同时,亚马逊的领导力准则对亚马逊与开源的互动方式也产生着深远的影响。
在上篇文章,我们为大家讲述了亚马逊是如何在开源社区中践行最重要的一条领导力准则——客户至尚:通过始终以客户为中心,聆听开发者的反馈,通过合作和参与开源社区,让开源更易用。
本篇我们想与大家分享我们另一条领导力准则在开源文化中的实践——最高标准。
最高标准
不论是为开发者提供全托管开源软件服务,还是为自管理方式的客户提供各类复杂的基础云服务,我们都需要确保这些产品及服务能够在满足开发者需求的基础上具备足够的可靠性、安全性、稳定性。这就是亚马逊的另一领导力准则——最高标准。
亚马逊内部使用 Apache Lucene 多年,在 2019 年 Amazon.com 决定将搜索服务 100% 转为由 Lucene 驱动。作为一项开源技术,Lucene 能否支持亚马逊运行的规模下的搜索性能,迁移是否会有业务风险?事实证明,亚马逊的加入,将 Lucene 搜索性能的极限推向又一个新高峰。
Apache Lucene
项目主页
https://lucene.apache.org/
项目地址
https://github.com/apache/lucene
Apache Lucene 是一个使用 Java 构建的开源全文搜索库,亚马逊的高级首席搜索工程师 Mike McCandless(Lucene 和相关项目的长期贡献者)表示,在将 Lucene 的使用“推向极限”的过程中,亚马逊的工程师们发现了一些边缘粗糙 (rough edges)、漏洞和其他问题,并有效解决了这些问题。
出于行业竞争或者产品战略的考虑,Apache 2.0 许可证允许开发者们在使用开源产品时,可以自行修改代码且无需把更改回馈给上游。但亚马逊选择了将代码修改和最佳实践积极回馈给 Lucene 社区以帮助与之相关的其他项目。并且亚马逊的工程师们一直在加大参与开源项目的力度以更好地服务客户,即使在搜索等可能创造竞争优势的战略性领域也是如此。
亚马逊已经向 Lucene 提出了多项重要的改进,包括:
对 Lucene 索引代码进行的重大低级别更改, 实现并发 “更新” 和 “删除” ,使得在支持并发执行的硬件上的执行效率极大提升;
建立自定义词频索引,将行为信号引入排名依据中(例如顾客在搜索某个商品后可能的行为);
众多错误修复,并向上游分支推送更改。
Open 3D Engine
项目主页
https://www.o3de.org/
项目地址
https://github.com/o3de/o3de
游戏、模拟开发人员对我们说,从头开始构建 3D 工具成本高昂,需要数年的开发时间,并需要大量的资源来维护。要么将大部分资金花费在重复做别人或者自己已经做过的事情上,要么只好使用那些难以定制的专用解决方案。他们想要更多的选择,帮助他们在生产过程中实现协作、自定义和创造性控制。
2021 年 7 月 7 日亚马逊官方发布一款模块化的、开源的、跨平台的 3D 引擎 Open 3D Engine (O3DE),为从 3A 级游戏到电影质量的 3D 世界再到高保真模拟提供动力。这是一个开源项目,没有费用或者商业义务。O3DE 使用了 Apache 2.0 许可,并由 Linux 基金会管理。
O3DE 的开发初衷
故事需要从 2016 年亚马逊推出 Lumberyard 游戏引擎开始。Lumberyard 提供了完全免费、源代码可用的实时 3D 开发引擎,以便通过云集成进行快速构建、部署和扩展。过去几年中,通过不断地根据使用者新的需求进行改进,终于构建了功能强大的组件实体系统和备受欢迎的 Script Canvas 可视化脚本引擎。亚马逊为此收购了 Emotion FX 动画编辑器,创建了模块化 Gem 系统,并实施了许多 Twitch 和亚马逊云科技集成。
要想提供世界一流免费 3D 渲染工具,Lumberyard 还不够,于是亚马逊借助 Lumberyard 的构建经验,在此基础上进一步的迭代改进,实现了更好的协作和创新性控制,在 2021 年发布了 O3DE。区别于传统游戏引擎整体式的构建设计,O3DE 被设计为具有可扩展性的模块化引擎,并采用开放的、标准化工具。在此基础上,我们添加了预置系统、新构建系统、可扩展 UI、新的云属性的功能、大量数据库优化、新网络功能等等。另外我们还添加了全新的基于物理渲染 (Physically Based Rendering - PBR) 的渲染器,它能够通过光线追踪和 Gi 支持实现前向渲染和延迟渲染。
O3DE 的设计
模块化
借助 O3DE 的模块化架构添加新功能非常简单,这样开发人员就可以持续创新。
O3DE 引擎被设计为模块化引擎,几乎所有引擎部件都是一个库。因此开发人员可以独立替换图形渲染器、音频子系统、编辑器、语言支持、网络堆栈、物理系统和其他库,而不影响其他库。核心引擎模块和任何附加组件或插件统称为“Gem”。开发人员可以通过引入 30 多种功能和工具中的任何一种来精简项目,也可以将这些功能和工具作为独立库来实施。如果开发人员已经拥有引擎并希望减少技术债务或更新代码,可以从开源项目中轻松选择所需的功能,然后将其实施到自己的技术堆栈中。他们可以创建并合并自己的堆栈。
引擎即 SDK
便于自定义引擎组件,并根据需要用特定自定义模块替换预构建组件。
Lumberyard 开发人员会发现引擎已经发生了很大的变化。它的构建类似于 SDK,因为对于引擎模块和 Gem,它可以以预编译的形式提供,这可被视为是一种“引擎即 SDK”方法。同样,在项目发生变化时,不需要重新编译预编译的库或 Gem。而且,当新引擎版本发布时,开发人员可以更新核心 Gem,只需解决项目代码本身的编译问题即可。
Atom 渲染器
另一个重大变化是 Atom 渲染器,正如预期的那样,它作为 Gem 交付。该渲染器通过提供基于物理的现代渲染器 (PBR) 来支持多个平台,该渲染器符合 ACES 色彩空间标准并完全支持 Vulkan、Metal(开发中)和 DirectX 12 的光线追踪。Atom 随附全局光照 (GI) 和前向+ 渲染,开箱即用,并支持延迟渲染管道。与 O3DE 本身一样,Atom 具有模块化、可编写脚本和数据驱动等特点。亚马逊云科技甚至为它编写了一种全新的着色语言,称为 AZSL。这种语言利用 Atom 的数据驱动功能,方便开发人员随着新硬件接口的出现不断创新。同时,Atom 是开源且免费的,就像 O3DE 中的其他所有功能一样。请参阅这篇博客,详细了解 Atom 渲染器:
网络
O3DE 中包含了全新的网络堆栈,它具有高度灵活的数据驱动模型,支持 TCP/UDP,并在简单的 API 背后抽象了低延迟传输层。该堆栈支持加密和压缩,并具有内置模拟器,用于延迟、抖动、重新排序和丢失。为了确保最低延迟和最高保真度,它支持通过无序不可靠的数据复制进行实体复制、本地预测延迟补偿、针对服务器权限的向后协调,及支持自动去同步检测和修正的可拆分玩家行为。为了确保开发人员可以使用不同的服务器型号,该堆栈支持开箱即用的玩家托管服务器和专用服务器型号。请参阅这篇博客,获取更多开发详情:
O3DE 的发展和未来
开源友好型构建系统
对于开发人员来说,模块化还必须易于理解并允许快速开发,因此,我们决定将整个构建系统移到开源 CMake 系统中。这一选择为各种 IDE(例如 Visual Studio、XCode 等)提供了更好的 CTest、插件库、分析、编辑并继续、快速代码生成及本机项目生成的支持。这种新方法通过适当的依赖关系树来构建所选的目标,并确保只重新构建实际的依赖关系,以便提高迭代开发的速度,进而节省时间。这种模块化特性还允许我们简化项目和 Gem 管理,方法是:删除所有二进制格式,然后将其移到可使用 CMake 编写脚本的人类可读的 JSON 文件。因此,只需简单地更改 JSON 文件中的某一行,即可在项目中添加或删除Gem。通过博客详细了解 Lumberyard 构建系统的未来:
更快、更轻、性能更高
相较于前一代的 Lumberyard,O3DE 更轻便、速度更快、性能更高。现在的版本已经删除了超过 200 万行旧代码冗余,为开源做好来准备。
创建了新的高性能数学库,这些库利用现代 CPU 和当前 SIMD 指令集。数学是精彩游戏和模拟的核心,它提供了使用者、贡献者和社群拥有非常坚实的工作基础。最终结果将是,帧率提高,平台支持得到改进(尤其是在 ARM 设备上),准确性提高,及可用于动画、特效和游戏运行的计算资源增加。毕竟,3D 引擎中的几乎所有内容都与数学有关!请参阅这篇博客,详细了解我们的高性能数学工作:
生产力和可扩展性
工具和管道实施对于简化生产所需的时间同样至关重要。为了帮助加速自定义,它被扩展了 UI 工具,它使用可访问代码接口的 Python 扩展和 Qt 来创建自定义编辑器组件。通过新的步骤前和步骤后 Python 绑定极大地更新了资产创建,以允许 FBX 和材料处理的动态处理和自定义行为。这些绑定使技术类游戏艺术家能够编写可拆分、分配或重新定位资产的 Python 脚本,以及从任何输入源创建自定义材料。
许多其他功能也发生了变化,以便社群以新方式对其扩展。Script Canvas 现在支持通过未来本机代码支持编译为 Lua,并通过可扩展行为上下文管理器进行脚本绑定。O3DE 终于已经从 Lumberyard 管理游戏内部资产的“切片”模型转向了大家都很熟悉的预制模型。O3DE 模块化标准接口使开发人员能够针对其他 Gem 接口执行直接函数调用,并提供 IDE 自动完成支持,这样使得开发人员能够在自己的项目中发现和实施功能(无论是整个还是部分功能)。
小结
对于亚马逊云科技来说,我们将继续与 Linux Foundation、合作伙伴和大学合作,以帮助实现更多创新,开展令人兴奋的即将宣布的年度 O3DE 新活动,以及举办全球行业展览和骇客马拉松。我们希望任何人都可以利用这项开源技术提供的游戏模拟开发平台,快速构建更加精彩的游戏和实时模拟。我们相信现在正是发展 3D 可视化和工具业务的理想时机,我们期待更多的开发者加入到这个项目中来。
我们会在下一篇分享中,解读指引亚马逊开源文化的另一领导力准则——创新简化。你将会了解到我们在这一准则指导下倾力打造的两款开源产品 Bottlerocket 和 Firecracker。
欢迎持续关注 Build On Cloud 微信公众号,了解更多面向开发者的技术分享和云开发动态!
推荐阅读
合作、参与、让开源更易用 | 亚马逊的开源文化
机器学习洞察 | JAX,机器学习领域的“新面孔”
机器学习洞察 | 一文带你“讲透” JAX
作者郑予彬
亚马逊云科技资深开发者布道师,20 年 ICT 行业和数字化转型实践积累,专注于亚马逊云科技云原生、云安全技术领域。18 年架构师经验,致力于为金融、教育、制造以及世界 500 强企业用户提供数据中心建设以及软件定义数据中心等解决方案的咨询及技术落地。
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案 联系亚马逊云科技专家