在 2022 年 AWS Re:Invent 会议上发布了一项激动人心的服务 AWS SimSpace Weaver。本技术参考 AWS 多年来在云中的深入分析经验解决了许多开发者面临的最大困难:如何构建一个后端系统,完成世界(计算能力)的分割和状态同步?一般来说,如果从零开始建立这样的系统,需要几个高级工程师几个月甚至几年的努力才能实现。
SimSpace Weaver 虚幻世界模拟是解决规模高密度前提下的主要服务。它通过将庞大的世界划分为相同尺寸的区域来实现这一目标。这项服务的发布展示了 AWS 在更多场景中的潜力:
- 可作为元宇宙、数字城市、校运会甚至军事领域等大规模模拟仿真应用软件使用。
- 在游戏领域,未来会有一些超大型的 MMORPG(如魔兽)可以在云中代管。
本文将包括以下几点:
- 介绍 AWS SimSpace Weaver 服务 (基本知识,对 SimSpace Weaver 有基本的了解)
- 了解 SimSpace 的工作流 (初级知识,介绍 SimSpace Weaver 每个引擎的工作流)
注:本文不介绍如何集成编码。作者将在后面开另一篇文章 0 逐步描述游戏代码访问的过程,欢迎关注。
本节将介绍一些重要的定义及其架构图,让大家快速掌握 SimSpace Weaver 服务。
- Schema:游戏的关键环境变量, JSON 格式。
-
- Schema:游戏的关键环境变量, JSON 格式。本地环境一般在工程根目录下 yaml 文档。在线环境一般在 build 或是 tools 目录下 yaml 文档。
Partition:全球计算能力的分区通常根据位置的类别进行划分。 大范围的分区规定为左上右下。
-
Resource Unit- :代表每个 Partition 后边所需的 CPU 和 memory 资源,类似器皿。
- Worker:EC2 案例,由 SimSpace 代管,包括多个 Partition。
Clock:
一般来说,每秒模拟实体的时钟频率和频率是 Hz 表明。数值越大越光滑。
- Apps
:应用软件分为以下三种:
-
- Spatial App:务必,由 SimSpace 代管;每个 Partition 都要有一个 spatial app 支持;承担实体的生命周期管理。
Custom App: 不必要,自己管理;可以自己创建实体,但使用权必须转让给 Spatial App;以固定的方式获取事物和实体信息;将节点暴露到客户端。
- Service App:非必需,由 SimSpace 代理管理;通过固定阅读获取事物和实体信息;将节点暴露到客户端。
-
State Fabric
:一个全球交换的内存数据库,类似 redis,每个实体的实时动态存储在里面。
-
- State Fabric:
一个全球交换的内存数据库,类似 redis,每个实体的实时动态存储在里面。实体检索通常使用空间坐标。
Entities
:
Subscription:
在游戏中以实体状态更新的形式获得各种系统的东西。
-
定阅一般比具体范围大,以获得更好的实体团队体验效果。
-
因为实体会先进入下一个 Partition 热情的范畴,然后提前在这个范畴 Partition 生成一个 remote replication。
-
-
每个 Worker 能够有多个 Partition, Partition 内代管着 Spatial App 他们会消耗的应用程序 Resource Unit 相应的资源。
每一个 Worker 系统运行最多可以管理,代表一个节点 10 台 EC2。
-
每一个 Worker 系统运行最多可以管理,代表一个节点 10 台 EC2。
-
State Fabric 记录所有需要同步实体的重要信息:部分。
Service/Custom App 只关心自己对应的 Worker 实体在其兴趣范围内。它们之间的区别通常是 Service App 只有阅读,没有互动;而且 Custom App 能够承担形成实体接受客户端的互动。
使用 AWS SimSpace Weaver 以前,确保您有以下依赖:
-
AWS 账户和必要权限可参考连接
-
当地的开发工具,参考链接
-
SDK 介绍
- 作为托管服务,我们必须首先掌握它 SDK 文档。如果您想获得最新版本,可以参考链接。
-
-
create-project: 建立 unreal 项目,带两个模板
PathfindingSample 单 Worker
MultiWorkerPathfindingSample 多 Worker
docker-create-image: 形成当地的 docker 环境
-
dowload-unity-package: 获得 unity 项目
-
packaging-tool:器皿配备,装包编译,模版项目
-
-
项目结构
-
通过上面的 create-project 指令建立的项目基本结构如下:
-
build:打出存储和放置目录
-
cloudformation:上云模板文件
-
dependencies (unreal):demoframework
App 步骤模板编码
Utility 编码
Call back 事件驱动编码
-
src (unreal):项目源码
-
tools:不同环境的工具脚本,schema 等
-
-
CLI 指令
产生的项目在 tools 在目录下,有一个 weaver- rojectname}-cli.bat,提供了很多 console 指令,常见指令如下:
-
Control
-
-
Start-simulation/Delete-simulation
Start-app/Stop-app
Start-clock/Stop-clock
Info
List-simulations/Describe-simulation
List-apps/Describe-app

这节会介绍 SimSpace Weaver 在各种游戏引擎中开发工作流。
- 假如我们需要这样做
BOYE(自研模块)的集成需要考虑几个方面 App 如何使用生命周期和生命周期? SDK,可参考链接。
解压 SDK 后就会有 unreal 项目,给予基本文件,项目目前只支持 UE5。不能直接用客户端做,必须得到 UE5 如何操作源代码,可参考官方文件。
- 在编译源代码之前,需要对源代码进行编译 做以下改动:
-
当地工作流
-
可以在编辑器中跑下去,应注意 Client 数量和 Partition 数量配对。
云端工作流
-
-
根据cmd,所有的包和环境变量都将放置在cmd中 S3 目录。
SimSpace 后台会依据 CLI 最后,我们可以根据客户端的指令操作后台 endpoint 连接就可以了。
Console 上面还提供了已经编译过的客户端,可以参考云构建 SimSpace Weaver 应用软件。
-
环境变量:
-
本地:项目根目录下
-
云端:build 或是 tools 目录下
-
SDK 项目:
介绍:根据不同的颜色属描述不同的颜色 Worker,其中,任何运动的小球都会在跨区成功后改变相应的色调。
- 当地工作流:可以直接在编辑器里 Standalone 方式运行。
在 Play in Standalone Game 在区域内,添加参数
-
在 如果制定了 2×2 的地区,则 Player Number of Client=4
-
-
-
- 云工作流:
云端构建 SimSpace Weaver 应用软件
根据当地调整的游戏包装专用服务器,然后启用启动命令
# 专用服务器是根据模块指令形成的
#将专用服务器打包成 weaver 需要服务器格式
#上传到服务器和 schema 到 S3,并且运行模拟
-
- 根据 SDK 的 download-unity-package 组装,将提供适用的基本文档 2021.3.7 版本完成后,必须通过 package manager 组装。
- Unity 版本实际上是在 C 的 SDK 做了一层 C# 实际插座可参考插件的封装 Runtime 目录下边的 API 插口。
- 云工作流:
主要通过 Unity 来设置,并提供 AWS 设置自己的窗口建立项目,提交环境变量和包装。
云工作流:
主要通过 Unity 设置并提供 AWS 设置自己的窗口建立项目,提交环境变量和包装。请参考以下项目的例子。
-
当地工作流:
-
根据 unity 包装,每次选择相应的场景包装,而不是 all in one。
因此,我们在包装完成后会有 spatial,custom 或 servcie 可执行程序。
简介:模拟蚁巢游戏,蚂蚁的一些属可以设置不同的分区。
- 当地工作流:
先后在 unity 的 Building Setting 中装包对应环境的场景。例如 Spatial App 就只点选 AntSpatialApp,Custom App 就只是点选 ViewAgentApp。
-
可执行程序形成后,对应 build 目录下,将 Assets 中的 yaml 文件拷贝来了,记得重命名为 schema。
-
按以下顺序启动 Spatial *4 → Custom → Client Editor。
最终效果如下图所示:
组装 SimSpace软件,打开 unity→windows→aws
创建一个 SimSpace 项目,非 unity 项目
-
设定好 schema 文档,而且上传至 S3,请注意,我们只在这里添加了它 Spatial, Custom 并没 Service。
-
依据 schema 不同的文档形成 app 所需的可执行程序,随后上传至 S3。
-
然后去 S3 确定下面的文档是否都在,应该有一个 schema 和一个 app 的桶,如下图:
-
到 SimSpace Weaver 创建一个操作面板 simulation,参考设备如下,明确后会有一个 cloudformation 拉起相关环境。
-
需要手动将 clock 运行,这样,世界就会开始模拟。
-
刚开始的时候就开始了 Spatial App 服务 X4,需要自己手动操作 Custom App 服务,能通过 cloudwatch 查询:
Youtube 上介绍 SimSpace Weaver
AWS SimSpace Weaver官方文档
AWS App SDK
SimSpace Weaver CLI指令
云端搭建 SimSpace Weaver 应用软件
如何编译源码? UE5
AWS SimSpace Weaver and uCrowds City Demo