一款基于 Rust 开发的开源多人在线模拟游戏

共 2591字,需浏览 6分钟

 ·

2022-08-24 14:06

想要在电脑上建造一所城市,模拟个体、企业、社区的变化么?不妨来试试这款开源的在线模拟游戏:Citybound

Citybound 是一款多人在线模拟游戏,使用 Rust + WASM + JS 开发而成。它主要模拟城市建设,使用微观模型,生动地模拟了数以百万计的个体互动所产生的城市有机体。

流动的人们、贸易中的企业、社区的变化。每个居民都在挣扎,适应,做出生活选择。城市在发展,城市在扩张。城市就是我们。

官方的这段描述概括了这款游戏的主要内容。

在 Citybound 中,我们可以跨越许多时间和空间尺度,查看和检查城市生活的各个方面,也可以通过为基础设施和区域绘制详细的项目计划来塑造我们的城市,还可以实施项目,决定预算并做出政府决策。

Citybound 有一个雄心勃勃的愿景,并且主要是作为一项单人开源项目而开发的。在这个游戏中,我们可以尝试实验性的实时构建。目前 Citybound 正由社区资助着发展。

游戏特色

微观经济模拟

在 Citybound 中,每个家庭(家庭或企业)都是单独模拟的。每个家庭都有一个家,家庭成员或员工的日常活动是由家庭需要和提供的资源驱动的。每个家庭都对其资源进行精确的实时库存,其中不仅包括杂货、原材料或金钱等有形商品,还包括睡眠、健康、娱乐、劳动力、旅游兴趣或商业服务等无形概念。

经济模式直接来自家庭互动。为了满足其人力或业务需求,每个家庭都试图为每种资源寻找有吸引力的“贸易伙伴”,同时考虑到价格和质量差异,以及基于交通条件的区域可达性。家庭在一天中重新确定其需求的优先级,从而形成通勤、购物或后勤交通出行的自然模式。

未来工作:预先模拟当地贸易条件以确定房地产的吸引力,从而影响移民、开发和城市发展。将系统扩展到高密度建筑物和数百万人口。

微观交通模拟

通过交通基础设施的有效交通流量对于城市的健康至关重要。流量是由参与者的微观经济目标自发决定的——而混乱的事件是流量的核心。这就是为什么在 Citybound 中,每个人的每一次旅行都在显微镜下模拟。数十万辆汽车在道路上实际行驶,必须在交通中刹车、加速和变道才能安全到达目的地。

未来工作:其他交通方式(行人、轻重铁路、机场等)。多模式寻路(结合步行、公共交通、出租车和驾车到达目的地)。

触觉协作规划

Citybound 与游戏世界互动的核心原则是通过规划。这使我们能够预览城市中大型项目的效果,撤消和重做以及组合不同的想法。智能绘画手势变成优美弯曲的道路和形状完美的区域,提供专业 CAD 工具的强大功能和表现力,同时使用起来更加直观和有趣。

计划更新的精确管理不仅可以实现对大城市的流畅交互编辑,还可以实现多人协作计划,多人可以在同一个城市中实时游戏和工作。

未来工作:规划桥梁和隧道等 3D 要素。计划项目的财务和影响预览。

引擎技术

基于角色的分布式仿真

为了实现 Citybound 模拟大型城市并将它们流式传输到浏览器进行交互的愿景,必须发明并实现一个非常不寻常的计算架构。角色和消息传递是 Kay 中的关键概念,角色系统框架将 Citybound 的模拟逻辑从其透明网络化和易于扩展的基础提升。在 Rust 中实现,它允许类型安全和高性能的 Actor 更新和 Actor 间通信,对缓存局部性进行底层优化,同时提供分布式动态调度和广播消息等高级功能。

RUST-WASM-JS 桥接

将 Kay 编译到 WebAssembly 允许在浏览器中运行一个成熟的 Actor 系统节点,该节点可以通过类型安全的高性能消息与模拟后端进行通信,并在高效序列化和传递渲染相关信息之前为渲染进行计算密集型准备工作作为实现其余 UI 的 React 应用程序的 JavaScript 对象。React 应用程序可以调用导出到 JavaScript 的 Rust hook,将 Kay 消息发送回模拟后端,以根据玩家输入影响游戏世界。

响应式 2D+3D 用户界面框架

定义组合的 2D 和 3D UI 以与 Citybound 相当复杂的规划和模拟对象进行交互是一项艰巨的任务。近年来,具有清晰信息流的响应式、基于组件的框架极大地简化了 2D UI 开发。Citybound 用 Monet 库扩展了 React,将 React 的原则(将状态更新包装在声明性的功能性 API 中)应用于 WebGL 渲染和 GPU 资源管理。此外,Citybound 定义了一种新的 React 组件,表示 3D 世界中的交互式形状。总之,这使 Citybound 能够在单个 React 组件中完全定义游戏对象的 2D 和 3D 外观和交互性。

强大的高性能几何内核

Citybound 世界中的几乎每个对象都可以任意变形,无论是道路、区域还是建筑地段——它们的确切形状通常来自其他对象之间的复杂几何运算。Citybound 的 Descartes 库提供了从简单路径操作到大量多边形叠加任务的所有内容,尽管存在近似值和不准确性,但重点关注性能和拓扑稳健性。

增量计算框架

为了提供大型城市规划的实时交互式编辑,并在流式传输规划结果预览时最大限度地减少 UI 和服务器之间的带宽使用,对规划输入的变化如何影响规划结果进行精确的形式化至关重要,然后只传达差异.目前在单片计划管理器中临时实施,这种方法将被推广并转化为分布式框架,以允许计划扩展到一个后端服务器之外。

程序几何管道

Citybound 中几乎所有的几何图形都是程序化的,这既是机遇也是挑战。早期工作已经在 Citybound 的 Michelangelo 库中开始,它将提供富有表现力的形状语法来描述基于挤压的建筑风格或自然形状,然后可以根据需要对其进行评估以生成具有动态细节水平和动画的最佳批处理网格和实例阵列成分。

小结

这款游戏目前是开源的,支持 Windows/macOS/Linux 系统,不过版本还处于实验状态中,有兴趣的话可以到官网去下载下来试玩一下。项目是由 Rust + WASM + JS 开发的,对实现感兴趣也可以下载源码来学习一下(最近一次更新是 2 年前)。

地址:https://github.com/citybound/citybound

⭐️ 7.1k

语言:Rust + WASM + JS

官网:https://aeplay.org/citybound


浏览 205
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报