一款基于 Rust 開(kāi)發(fā)的開(kāi)源多人在線模擬游戲
想要在電腦上建造一所城市,模擬個(gè)體、企業(yè)、社區(qū)的變化么?不妨來(lái)試試這款開(kāi)源的在線模擬游戲:Citybound。
Citybound 是一款多人在線模擬游戲,使用 Rust + WASM + JS 開(kāi)發(fā)而成。它主要模擬城市建設(shè),使用微觀模型,生動(dòng)地模擬了數(shù)以百萬(wàn)計(jì)的個(gè)體互動(dòng)所產(chǎn)生的城市有機(jī)體。
?流動(dòng)的人們、貿(mào)易中的企業(yè)、社區(qū)的變化。每個(gè)居民都在掙扎,適應(yīng),做出生活選擇。城市在發(fā)展,城市在擴(kuò)張。城市就是我們。
?
官方的這段描述概括了這款游戲的主要內(nèi)容。

在 Citybound 中,我們可以跨越許多時(shí)間和空間尺度,查看和檢查城市生活的各個(gè)方面,也可以通過(guò)為基礎(chǔ)設(shè)施和區(qū)域繪制詳細(xì)的項(xiàng)目計(jì)劃來(lái)塑造我們的城市,還可以實(shí)施項(xiàng)目,決定預(yù)算并做出政府決策。
Citybound 有一個(gè)雄心勃勃的愿景,并且主要是作為一項(xiàng)單人開(kāi)源項(xiàng)目而開(kāi)發(fā)的。在這個(gè)游戲中,我們可以嘗試實(shí)驗(yàn)性的實(shí)時(shí)構(gòu)建。目前 Citybound 正由社區(qū)資助著發(fā)展。
游戲特色
微觀經(jīng)濟(jì)模擬
在 Citybound 中,每個(gè)家庭(家庭或企業(yè))都是單獨(dú)模擬的。每個(gè)家庭都有一個(gè)家,家庭成員或員工的日?;顒?dòng)是由家庭需要和提供的資源驅(qū)動(dòng)的。每個(gè)家庭都對(duì)其資源進(jìn)行精確的實(shí)時(shí)庫(kù)存,其中不僅包括雜貨、原材料或金錢等有形商品,還包括睡眠、健康、娛樂(lè)、勞動(dòng)力、旅游興趣或商業(yè)服務(wù)等無(wú)形概念。

經(jīng)濟(jì)模式直接來(lái)自家庭互動(dòng)。為了滿足其人力或業(yè)務(wù)需求,每個(gè)家庭都試圖為每種資源尋找有吸引力的“貿(mào)易伙伴”,同時(shí)考慮到價(jià)格和質(zhì)量差異,以及基于交通條件的區(qū)域可達(dá)性。家庭在一天中重新確定其需求的優(yōu)先級(jí),從而形成通勤、購(gòu)物或后勤交通出行的自然模式。
未來(lái)工作:預(yù)先模擬當(dāng)?shù)刭Q(mào)易條件以確定房地產(chǎn)的吸引力,從而影響移民、開(kāi)發(fā)和城市發(fā)展。將系統(tǒng)擴(kuò)展到高密度建筑物和數(shù)百萬(wàn)人口。
微觀交通模擬
通過(guò)交通基礎(chǔ)設(shè)施的有效交通流量對(duì)于城市的健康至關(guān)重要。流量是由參與者的微觀經(jīng)濟(jì)目標(biāo)自發(fā)決定的——而混亂的事件是流量的核心。這就是為什么在 Citybound 中,每個(gè)人的每一次旅行都在顯微鏡下模擬。數(shù)十萬(wàn)輛汽車在道路上實(shí)際行駛,必須在交通中剎車、加速和變道才能安全到達(dá)目的地。

未來(lái)工作:其他交通方式(行人、輕重鐵路、機(jī)場(chǎng)等)。多模式尋路(結(jié)合步行、公共交通、出租車和駕車到達(dá)目的地)。
觸覺(jué)協(xié)作規(guī)劃
Citybound 與游戲世界互動(dòng)的核心原則是通過(guò)規(guī)劃。這使我們能夠預(yù)覽城市中大型項(xiàng)目的效果,撤消和重做以及組合不同的想法。智能繪畫(huà)手勢(shì)變成優(yōu)美彎曲的道路和形狀完美的區(qū)域,提供專業(yè) CAD 工具的強(qiáng)大功能和表現(xiàn)力,同時(shí)使用起來(lái)更加直觀和有趣。

計(jì)劃更新的精確管理不僅可以實(shí)現(xiàn)對(duì)大城市的流暢交互編輯,還可以實(shí)現(xiàn)多人協(xié)作計(jì)劃,多人可以在同一個(gè)城市中實(shí)時(shí)游戲和工作。
未來(lái)工作:規(guī)劃橋梁和隧道等 3D 要素。計(jì)劃項(xiàng)目的財(cái)務(wù)和影響預(yù)覽。
引擎技術(shù)
基于角色的分布式仿真
為了實(shí)現(xiàn) Citybound 模擬大型城市并將它們流式傳輸?shù)綖g覽器進(jìn)行交互的愿景,必須發(fā)明并實(shí)現(xiàn)一個(gè)非常不尋常的計(jì)算架構(gòu)。角色和消息傳遞是 Kay 中的關(guān)鍵概念,角色系統(tǒng)框架將 Citybound 的模擬邏輯從其透明網(wǎng)絡(luò)化和易于擴(kuò)展的基礎(chǔ)提升。在 Rust 中實(shí)現(xiàn),它允許類型安全和高性能的 Actor 更新和 Actor 間通信,對(duì)緩存局部性進(jìn)行底層優(yōu)化,同時(shí)提供分布式動(dòng)態(tài)調(diào)度和廣播消息等高級(jí)功能。

RUST-WASM-JS 橋接
將 Kay 編譯到 WebAssembly 允許在瀏覽器中運(yùn)行一個(gè)成熟的 Actor 系統(tǒng)節(jié)點(diǎn),該節(jié)點(diǎn)可以通過(guò)類型安全的高性能消息與模擬后端進(jìn)行通信,并在高效序列化和傳遞渲染相關(guān)信息之前為渲染進(jìn)行計(jì)算密集型準(zhǔn)備工作作為實(shí)現(xiàn)其余 UI 的 React 應(yīng)用程序的 JavaScript 對(duì)象。React 應(yīng)用程序可以調(diào)用導(dǎo)出到 JavaScript 的 Rust hook,將 Kay 消息發(fā)送回模擬后端,以根據(jù)玩家輸入影響游戲世界。
響應(yīng)式 2D+3D 用戶界面框架
定義組合的 2D 和 3D UI 以與 Citybound 相當(dāng)復(fù)雜的規(guī)劃和模擬對(duì)象進(jìn)行交互是一項(xiàng)艱巨的任務(wù)。近年來(lái),具有清晰信息流的響應(yīng)式、基于組件的框架極大地簡(jiǎn)化了 2D UI 開(kāi)發(fā)。Citybound 用 Monet 庫(kù)擴(kuò)展了 React,將 React 的原則(將狀態(tài)更新包裝在聲明性的功能性 API 中)應(yīng)用于 WebGL 渲染和 GPU 資源管理。此外,Citybound 定義了一種新的 React 組件,表示 3D 世界中的交互式形狀??傊?,這使 Citybound 能夠在單個(gè) React 組件中完全定義游戲?qū)ο蟮?2D 和 3D 外觀和交互性。
強(qiáng)大的高性能幾何內(nèi)核
Citybound 世界中的幾乎每個(gè)對(duì)象都可以任意變形,無(wú)論是道路、區(qū)域還是建筑地段——它們的確切形狀通常來(lái)自其他對(duì)象之間的復(fù)雜幾何運(yùn)算。Citybound 的 Descartes 庫(kù)提供了從簡(jiǎn)單路徑操作到大量多邊形疊加任務(wù)的所有內(nèi)容,盡管存在近似值和不準(zhǔn)確性,但重點(diǎn)關(guān)注性能和拓?fù)浞€(wěn)健性。
增量計(jì)算框架
為了提供大型城市規(guī)劃的實(shí)時(shí)交互式編輯,并在流式傳輸規(guī)劃結(jié)果預(yù)覽時(shí)最大限度地減少 UI 和服務(wù)器之間的帶寬使用,對(duì)規(guī)劃輸入的變化如何影響規(guī)劃結(jié)果進(jìn)行精確的形式化至關(guān)重要,然后只傳達(dá)差異.目前在單片計(jì)劃管理器中臨時(shí)實(shí)施,這種方法將被推廣并轉(zhuǎn)化為分布式框架,以允許計(jì)劃擴(kuò)展到一個(gè)后端服務(wù)器之外。
程序幾何管道
Citybound 中幾乎所有的幾何圖形都是程序化的,這既是機(jī)遇也是挑戰(zhàn)。早期工作已經(jīng)在 Citybound 的 Michelangelo 庫(kù)中開(kāi)始,它將提供富有表現(xiàn)力的形狀語(yǔ)法來(lái)描述基于擠壓的建筑風(fēng)格或自然形狀,然后可以根據(jù)需要對(duì)其進(jìn)行評(píng)估以生成具有動(dòng)態(tài)細(xì)節(jié)水平和動(dòng)畫(huà)的最佳批處理網(wǎng)格和實(shí)例陣列成分。
小結(jié)
這款游戲目前是開(kāi)源的,支持 Windows/macOS/Linux 系統(tǒng),不過(guò)版本還處于實(shí)驗(yàn)狀態(tài)中,有興趣的話可以到官網(wǎng)去下載下來(lái)試玩一下。項(xiàng)目是由 Rust + WASM + JS 開(kāi)發(fā)的,對(duì)實(shí)現(xiàn)感興趣也可以下載源碼來(lái)學(xué)習(xí)一下(最近一次更新是 2 年前)。
?地址:https://github.com/citybound/citybound
?? 7.1k
語(yǔ)言:Rust + WASM + JS
官網(wǎng):https://aeplay.org/citybound
?
