Tags
DEVLOG SIMULATION GPU RUST
2026 · 02 · 07
POSTS · MILESTONE M0 DEVLOG #0

開發日誌 #0 -- 一切的起點


太滿了

我有數千小時的都市模擬遊戲經驗。

每次建到某個規模,就會開始感覺到同一件事 – 城市還沒長到我想要的樣子,就已經太滿了。不是地圖太小,而是模擬本身的上限到了——人口再多一點,系統就開始吃力。很多時候我不得不縮小野心,重開一張小一點的地圖,接受效能的限制。

不只交通

現有的都市模擬遊戲,在交通模擬方面非常真實,搭配模組幾乎可以蓋出現實世界大多數類型的設施,從最基礎的左轉保護路口、DDI 等等。大眾運輸的種類也非常多。

然而,居民就像是無情的交通機器,他們會開車、會搭捷運、會塞車,但他們不會因為房價太高而選擇住得遠一點,不會因為空氣太差而減少出門,不會因為環境受污染而漸漸不想步行。每個人的決策背後,沒有真實的生活在驅動。

城市長得再漂亮,都只是一個精緻的交通展示場。

我想要的不只是這樣。我想要的是一座城市裡的每個人,都有自己的感受——對環境的感受、對生活成本的感受、對這個城市價值的判斷。這些感受放在一起,應該會自然地改變城市的樣子:某些街區開始沒落,某些地方開始長出不在計畫內的東西,貧富的邊界慢慢在地圖上浮現。

年輕工程師的直覺

某天我做了一個夢,夢裡有人告訴我,應該使用 GPU 加速模擬。

都市裡每個移動物件,其實都在執行相同的邏輯。判斷前方空間、判斷路權優先級、執行加速 度、然後移動。這不應該很困難才對。我很快的在 CPU 端實作了 PoC 來快速驗證我的想法, 算法模擬得很順利。但一切停留在這了好長一段時間:正式的軟體開發曠日廢時,遲遲沒有進 展,一切都停留在理論階段。

事情的轉機

也許你猜到了,我訂閱了 Claude Code。Claude 真的是開發的好夥伴,只要需求明確,撰寫 好規格書後,就可以極高的速度開發。這讓我可以更高效的利用空閒時間,因為我不必處理繁 瑣的調試流程 – 這也是最消耗精神的部分,而是著重在算法跟流程的設計上就好。再經過短 暫的測試之後,我決定投入 CAGE 的開發。

什麼是 CAGE

CAGE 全名 City Architect: Golden Era 。故事設定的背景是 80s 的台北。雖然我個人沒有經歷過那段據說是紙醉金迷的時光,但作為遊戲背景自然的是個比較好的題材:台北隨處可見的步登公寓就是在此時被建造,台北捷運也在此時被建造,可以說就是天然的遊戲選材。玩家將扮演執政者,不只規劃都市的建造,以及執法、文化的發展。街景將隨著執政而改變,若是管理不當,非正式建築、騎樓佔用等景觀將會浮現在遊戲場景。當這些變為常態後,強硬的拆除反而會引發民怨。玩家將可以透過最直接的視覺反饋感受到執政管理的結果。

詳細的遊戲玩法以及風格取向仍然在早期討論階段,不過整體會圍繞著 large scale micro simulation 以及 復古未來的風格來實作,僅可能做到貼近真實的模擬 agents 的行為以及經濟決策。

技術選型

Unreal、Godot 都是合理的選項,但我很快就排除了它們。原因很簡單:要在 GPU 上跑100 萬個 agents,我需要對 GPU compute pipeline 有直接的控制權。現成引擎的渲染架構是針對一 般遊戲設計的,這種程度的自定義需求會跟引擎一直打架。

我最終選擇 Rust + wgpu。Rust 的記憶體安全讓大型系統開發不會在某個角落藏著一顆不定時炸彈;wgpu 是一個跨平台的低階 GPU API,能讓我直接掌控 compute pipeline。Bevy 作為 ECS 框架負責遊戲邏輯的組織。這個組合沒有什麼現成的輪子可以用,但它給了我需要的控制權。

Simulate Real, Parallel Real.

加入主畫面

從主畫面開啟會全螢幕顯示,像 app 一樣,沒有瀏覽器的工具列。