現在的方向
-
① 在做什麼 湧現模擬(Emergent Simulation),用 C++ + raylib
- 一句話:我不擺內容,我寫規則 —— 一堆自主單位在規則下自己活,長出我算不到的東西
- 第一個系統:蟻群覓食。300 隻蟲,三條在地規則(每隻蟲只看得到自己周圍 34 px),我唯一能做的事是放食物,不能命令任何一隻蟲
- 結果是蟲道。沒有任何一行程式碼寫著「形成蟲道」。更意外的是改道 —— 近的那堆吃完後,蟲群自己把主要路線搬到遠的那堆去,那個決策是費洛蒙衰減造成的,沒有程式碼指揮
- 量化過了:三條規則全開,35 秒運回 569 顆(32.2 顆/秒);關掉「跟費洛蒙走」那一條剩 204 顆(7.4 顆/秒)。2.8 倍的效率差來自六行程式碼,而那六行裡沒有一個字提到「合作」或「最佳化」
- 2026-08-24 再換引擎:Unity → C++ + raylib。方向還是沒變。三個理由:(1) 語言稅 —— C++ 是我最強的語言(CP 出身),Unity 是 C#(第二強)+引擎 API 稅,兩份都要付;(2) 沒有第二個程式 —— 前一天實測踩到 VS 跟 Unity 的 COM 交接爛帳,我的原話是「unity 跟 vs 協作到底是怎樣 沒有用啊」,raylib 從結構上刪掉這個坑:沒有編輯器、沒有場景檔、沒有
.meta、沒有匯入管線;(3) 立即模式跟湧現模擬同構 —— 我的模擬每幀從狀態陣列重算全世界,這本來就是 immediate mode 的形狀。用保留模式引擎跑它,等於在一個為「一千個有身分的物件」設計的系統上跑「三十萬個沒有身分的數字」,抽象的成本付了,好處一個沒拿到 - 環境是零安裝的:編譯器(MSVC 14.51)和 CMake(4.3.1)都是 Visual Studio 自帶的,沒有為了 raylib 裝任何新軟體。實測數字 —— 第一次設定(含從原始碼編整個 raylib)約 90 秒,改一行
.cpp重建 3.3 秒,執行檔 1.9 MB。另外 raylib 可以用 emscripten 編成幾百 KB 的網頁 wasm,「做完 → 公開」的距離被壓到最短,這一項是 Unity WebGL(20–50 MB)給不了的 - 誠實的但書:這是 15 天內第七次工具決定。前六次死亡沒有一次是工具造成的 —— 競技程式設計的翻譯稅是零、工具鏈完美,它撐了兩天。共同點一直是「零間接性」。所以換工具解掉的永遠是「可能的」死因,不是已發生的。如果這次也在六天內死掉,那不會證明 raylib 不好,它會證明工具從來就不是那個變數
-
② 為什麼是這條 間接性 —— 我不直接製造結果,我操縱條件,讓結果自己出現
- 決定性的一筆資料來自星海爭霸。我知道快攻和中期換家能上黃金白金,我選擇不拿,用蟲族 macro 待在青銅 N 年 —— 因為 macro 是間接的:顧經濟、注卵,軍隊自己長出來。這是所有資料裡唯一一筆「知道有更好的選項、算得出價差、然後選擇不拿」
- 它跟另外四個 7–11 年的嗜好是同一句話(爐石牧師 74%、MOBA 只玩一隻控制英雄、羽球只單打、單車只跑山)。差別在於:前四個只證明我喜歡間接型,星海證明我寧可輸兩三個段位也要待在間接位
- 它同時解釋了四次失敗。粒子系統(設重力/阻力,世界自己跑)✅ 贏;raytrace(一條光線 → 一個顏色,一對一)❌ 六天;排序視覺化 ❌;競技程式設計(想出解法 → AC,一對一)❌ 兩天。共同點:後三個都沒有任何東西在自己活
- 所以得到一條可以拿來擋掉未來提案的規則:只要「輸出 = 我輸入的直接函數」,這條線就會死。排任何東西之前先問一句 —— 有沒有東西在自己活?
-
③ 下一步 先轉那個旋鈕,再讓世界學會反抗我 —— 但要先躲開一個已知的死法
- ★ 「一直往下鑽」其實是三種完全不同的東西,其中一種我死過。換到 C++ 之後最誘人的念頭是「往下鑽」,但那個詞是三個方向:
- A. 實作層(spatial hash、SIMD、多執行緒)—— 間接性中等。只有被模擬逼出來才安全:「naive O(n²) 跑不動了所以我寫空間分割」可以,「我先寫好之後會用到」不行
- B. 領域層(蟲加天敵 → 分工 → 基因 → 演化 → 生態自己長)—— 間接性高。這是靶心,粒子系統就贏在這裡
- C. 底層層(丟掉 raylib,自己寫 OpenGL / 軟體光柵 / platform layer)—— 間接性零。這就是 raytrace,我在那條線上只活了六天
- 而 raylib 的文化引力正好指向 C。它的「no dependencies」信條、周邊的 Handmade Hero 傳統、社群裡大量「我把 raylib 換掉自己寫了 platform layer」的貼文 —— 整套價值觀都在把人往「自己寫底層」拉,而且它偽裝成「技術深度」,正好餵我的傲氣。這不是可能性,是重力:不做任何事就會被拉過去。判準記下來:每次想往下鑽,先問「這是模擬逼我的,還是我想看底層」。後者就停
- 先把蟻群用 raylib 重寫一遍,當對照實驗。規則已經懂了,成本只有幾小時,會拿到三個答案:實際冷啟動幾秒(唯一該拿來評估工具的指標,實測不是猜)、沒有 Inspector 滑桿之後調參數變好還變壞、以及有沒有一次想「我來自己寫個視窗層」—— 那是上面那條重力的測試。這次重寫不算進
E10,那一格已經被蟲道填了 - 轉
Decay(費洛蒙衰減率)。太小 → 蟲道永遠不消失,食物早就吃完了蟲還在跑舊路;太大 → 蟲道還沒成形就沒了。它就是「探索 vs 利用」的旋鈕,那個甜點要用眼睛找 - 然後加天敵。五隻蜘蛛、兩條規則。預期會看到蜘蛛自己沿著蟲道巡邏 —— 不是因為有人寫「沿蟲道巡邏」,而是因為蟲道上蟲最多
- 而那是一場提前小考。這條路真正的生死關在第三年:怎麼造一個我控制不住的世界。我在星海當上帝爽,是因為對手不受我控制;自己寫的模擬沒有對手,跑三次就看穿了 —— 這就是 Factorio 要有蟲族、RimWorld 要有 story teller、Dwarf Fortress 座右銘是 "Losing is Fun" 的原因
- 帶一個儀表板上路:
E10= 每做完 10 個系統,有幾個「跑出我沒預期的東西」。連續三個「無」就是紅色警報,代表我已經能預測自己的系統了 - 誠實的但書:到今天為止六次定案、七次工具決定,平均壽命約 6 天,而且每一次都伴隨一份規劃文件、一套架好的環境。所以真正的證據不是文件寫了幾份、環境架得多漂亮,是筆記裡「意外」那一欄有沒有累積。今天的產出是一個能編譯的空專案 —— 那不是進度,那是進度感
- ★ 「一直往下鑽」其實是三種完全不同的東西,其中一種我死過。換到 C++ 之後最誘人的念頭是「往下鑽」,但那個詞是三個方向:
工作回報
- 載入中…
已完成專案
- 載入中…