Ambient 0.1 发布,Rust 编写的高性能多人游戏引擎


经过一年多的开发,Ambient 终于发布了 0.1 版本,这是一款采用 Rust 构建的开源多人游戏引擎。

据介绍,Ambient 是一个用于构建高性能多人游戏和 3D 应用程序的 runtime,使用了 WebAssembly 和 WebGPU 技术,与任何编译为 WebAssembly 或在 WebAssembly 上运行的语言兼容,旨在使构建和部署丰富的多人游戏世界和体验变得容易。其开发团队表示,通过 Ambient,他们希望构建多人游戏与构建单人游戏一样简单。

特性

  • Seamless networking:Ambient 既用作服务器,同时也是客户端。开发者只需构建服务器和客户端逻辑,Ambient 可自动处理数据同步。
  • 独立沙盒:开发者为 Ambient 构建的项目通过 WebAssembly 的隔离功能执行。因此如果出现崩溃,它不会破坏整个程序,这也意味着可以安全地运行不受信任的代码。
  • 面向数据的设计:Ambient 的核心数据模型是每个 WASM 模块都可以操作的实体组件系统。
  • 多语言:开发者能够使用任何可以编译为 WebAssembly 的语言构建 Ambient 模块(目前,Rust 是唯一受支持的语言,团队正在努力扩展到其他语言)
  • 单一可执行文件:Ambient 是一个单一的可执行文件,可以在 Windows、Mac 和 Linux 上运行。它可以充当服务器或客户端。
  • 互操作性:Ambient 允许定义自定义组件和 "concepts"(组件集合)。只要 Ambient 项目使用相同的组件和 "concepts",它们就能够共享数据和互操作。
  • Asset 管道和流处理:Ambient 包含 Asset 管道,支持编译多种 asset 格式,包括.glb .fbx。asset 通过网络流式传输,因此客户端在加入时能够接收所需的一切数据。
  • 强大的渲染器:Ambient 渲染器由 GPU 驱动,裁剪 (Culling) 和细节级别切换完全由 GPU 处理。默认情况下,它使用 PBR,此外还支持级联阴影贴图和实例化所有可以实例化的东西。

示例

首先安装 Ambient,然后创建一个新的 Ambient 项目:

ambient new

接着打开 _src/lib.rs_,将以下内容添加到 main 函数中,让 IDE 自动导入:

spawn_query(player()).bind(move |players| {
for _ in players {
Entity::new()
.with_merge(make_transformable())
.with_default(cube())
.with(translation(), rand::random())
.with(color(), rand::random())
.spawn();
}
});

这将为每个加入的玩家生成一个随机立方体(完整示例点此查看)。开始启动:

ambient run

运行上述命令后会看到如下画面:

现在打开一个新的终端窗口,然后输入:

ambient join

这时会看到两个框,也就意味已经成功使用 Ambient 构建了第一个多人游戏体验。


Ambient 开发团队介绍了创建项目的初衷,他们发现许多游戏引擎都针对构建单人游戏进行了优化,但很少有旨在简化多人游戏的游戏引擎。于是他们很好奇:如果要让多人游戏能像单人游戏一样容易使用,该如何构建?当开发者从网络的细节中解放出来时,可以想象怎样的非凡体验——新的和有趣的互动?

Ambient 便是他们回答这些问题的开始:一个旨在让各种开发者能够构建和分享他们想要构建的体验的运行时。然而,这里的问题不仅仅在于做好客户端-服务器通信。它还包括多人游戏开发中出现的所有其他挑战:服务器资源、分发游戏、可持续地以服务形式运行游戏、与用户交互等等。运行时只是他们朝着这个方向迈出的第一步,接下来还要解决许多其他问题。

Ambient 采用了 MIT License,其团队表示,这是因为他们的目标是建立一个标准来让大家构建多人游戏。作为一家公司,他们的计划是为将采取“货币化”的运行时提供增值服务(包括服务器和资产托管),但运行时本身永远免费和开源。作为运行时的用户,他们可以选择使用 Ambient 团队提供的部分服务,以及选择自己实现其他服务。

未来,开发团队表示 Ambient 将会支持部署到 Web,支持更多可编译成 WebAssembly 的语言(目前只有 Rust),并提供协作编辑器。


相關推薦

2023-05-08

Ambient 是一个用于构建高性能多人游戏和 3D 应用程序的开源 runtime,使用了 WebAssembly 和 WebGPU 技术,与任何编译为 WebAssembly 或在 WebAssembly 上运行的语言兼容,旨在使构建和部署丰富的多人游戏世界和体验变得容易。其开发团队

2023-05-21

效的大型 3D 效果。 WebGPU 是由 W3C GPU for the Web 社区组所发布的规范,目标是允许网页代码以高性能且安全可靠的方式访问 GPU 功能。WebGPU 是一套为浏览器设计的图形 API 标准,为了弥合各个平台图形 API 的差异性,它对 DirectX12

2023-03-07

173 位贡献者共 689 个 PR,时隔 4 个月,Bevy 0.10 版本正式发布。这个版本增加了大量的新功能、错误修复和调整,以下是其中的一些亮点: ECS Schedule v3: Bevy 现在有更简单、更灵活的调度。系统现在被存储在一个统一的调度中

2024-10-19

Unity 6 已正式发布,与上一个主要版本相比,Unity 6 大幅提升了稳定性和性能,并且为所有 Unity 客户提供更强大的支持。 这是一个 LTS 版本,官方承诺在下一个主要版本发布后至少再提供两年的支持服务。 Unity 6 还引入了全新

2023-10-24

源创会,一起寻宝 AI 时代 VASSAL Engine 3.7.4 版本现已发布。VASSAL 是一个游戏引擎,用于在线构建棋盘游戏和纸牌游戏,构建的游戏可在 Internet 上或通过电子邮件实时运行。VASSAL Engine 可在所有平台上运行,并且是免费的开源

2022-10-19

Open 3D Engine(O3DE)是由亚马逊的 Lumberyard 衍生出来的开源、模块化、跨平台的 3D 引擎,于去年正式公布。它已经得到了来自 Epic Games、微软和其他许多知名公司的支持。该项目由开放 3D 基金会(Open 3D Foundation)托管。 在今天的

2022-09-15

Godot 4.0 发布了第 17 个 Alpha 版本。 Godot 4.0 Alpha 17 主要变化: 新增了一个选项,支持在项目管理器 (Project Manager) 中把项目从 3.x 转换到 4.0 重构了 Android 输入处理 修复从 macOS 迁移到其他平台时,Ctrl/Cmd 键映射出现变化的

2022-08-01

贡献者共 461 个拉取请求,时隔 3 个月,Bevy 0.8 版本正式发布。这个版本增加了大量的新功能、错误修复和调整,以下是其中的一些亮点: 新的材料系统:由于有了新的材质特性和 AsBindGroup 衍生功能,自定义着色器现在更容

2023-05-06

Open 3D Engine(O3DE)是由亚马逊的 Lumberyard 衍生出来的开源、模块化、跨平台的 3D 引擎。它已经得到了来自 Epic Games、微软和其他许多知名公司的支持。该项目由开放 3D 基金会(Open 3D Foundation)托管。 新版本主要变化: 支

2022-11-15

159 位贡献者共 430 个 PR,时隔 3 个月,Bevy 0.9 版本正式发布。这个版本增加了大量的新功能、错误修复和调整,以下是其中的一些亮点: HDR 后期处理、色调映射:Bevy 有一个新的 HDR 后期处理和色调映射管道,可以用它来实

2023-03-11

test cases,在 v0.3 版本中通过 70% 以上。 Protocol 新版高性能通信协议 基于 Arrow Flight RPC 构建,相比原来的 gRPC 私有协议,现在更加简洁高效,也很方便多种语言利用 Arrow Flight 的 SDK 直接与 GreptimeDB 通信。对 Stream 的支持也

2023-02-04

Godot 4.0 即将正式发布,据称此版本在功能、性能和可用性方面都包含全面的重大改进。不过社区目前面临着一个大问题:Godot 与主流商业产品相比有多大差距? 4.0 作为重大版本更新,其开发工作于 2020 年启动,在两年多的开

2023-02-20

VASSAL Engine 3.6.12 版本现已发布。VASSAL 是一个游戏引擎,用于在线构建棋盘游戏和纸牌游戏,构建的游戏可在 Internet 上或通过电子邮件实时运行。VASSAL Engine 可在所有平台上运行,并且是免费的开源软件。具体更新内容包括:

2021-11-29

lkan 支持和大量图形渲染器工作之外,Godot 4.0 还改进了其多人游戏开发功能。 多人游戏一直是一中复杂的功能,需要临时优化和特定于游戏的解决方案,并主要包含两个概念:某种形式的消息传递和某种形式的状态复制(