有人在早餐桌上搭建了一座迷你高爾夫球場,球已就位待發。三個真實 3D 物理洞:先爬上嵌入毛氈的吐司斜坡,穿過吐司拱門,繞過鬆餅疊、避開會吸住球的糖漿池,接著穿越夾在方糖牆之間的馬克杯隧道,最終抵達草莓旗。這是實驗室的第一件 3D 作品——一顆真實的 RigidBody3D 球,在即時 DirectionalLight3D 陰影下、於 Blender 烘焙的食物道具上,由 AI 智慧代理端到端進行構思、建模、調校與驗證。
←→ / A D 瞄準 · 按住 W / ↑ 蓄力 · 空白鍵推桿 · P 暫停 · M 減少動態效果 · 行動裝置提供觸控按鈕 · 點一下開啟音效 · 遊戲資料 12.8 MB(另加引擎 wasm,首次載入後會快取)
這件作品先經過概念發想——一張主視覺圖、一張道具設定圖,以及俯視三洞版面圖,共同確立了視覺語言:格紋桌布上鋪著毛氈球道,鑲有擠花糖邊,色調為奶油黃、吐司棕與果醬紅。這些設定圖中的每個元素隨後都被製作成真實的 Blender 資產,每一輪審核都依此對照即時成品進行評判。


在任何美術資產完成之前,三個洞就已經以灰盒形式運作並通過測試——包括本作品接受審核所依據的自動化演練:刻意將球推出桌邊(罰桿並重新放置)、滾入糖漿池後進行一次高難度脫困推桿,以及一次因速度過快導致的擦邊出局。自動駕駛系統會依照路徑點在每一桿後重新瞄準,因此無論畫面更新率如何都能自我修正。


每個道具都是一個 Blender 資產:融合體素重拓撲的食物造型,搭配烘焙或程序化細節的材質,匯出為 glb 檔案——而球道護欄則是由引擎碰撞體所用的同一組牆體常數生成,因此視覺呈現與物理判定天生一致。誠實記錄:第一個傾斜的吐司斜坡曾以 26 公分的吐司邊面向 15 公分的球——那是一堵牆,不是斜坡。一次遙測探測(球的位置、速度、每個 tick 的接觸點)在某次執行中發現了這個問題;現在吐司已下沉嵌入毯面,使其滾動面從地面開始。


本實驗室是在此主機的軟體渲染器(無 GPU)上使用 Playwright 進行審核,因此下方的影格率數據是最差情況——真實硬體以相容渲染器運行時會快得多。
| 量測方式 | 值 | 測試條件 |
|---|---|---|
| 遊戲資料 (.pck) | 12.8 MB | 發行版匯出——16 個帶烘焙貼圖的 Blender glb 檔 + 8 個取樣音訊音軌 |
| 引擎負載檔 (.wasm) | 35.4 MB | Godot 4.3 網頁執行環境,固定成本,首次載入後由瀏覽器快取 |
| 已驗證完整回合 | 以標準桿完成——8 桿 / 標準桿 8,包含出界罰桿與糖漿橫渡演練(已確認兩次) | 自動駕駛全程試玩,包含出界、糖漿與唇邊彈跳演練,每個審核回合皆如此 |
| 碰撞體與視覺一致性 | 依碰撞體常數產生的路緣 | 馬克杯孔洞 + 吐司皆為網格碰撞體(三角網格/凸包);煎餅圓柱體與底層蛋糕對齊 |
| 審核回合 | 區塊化 2 次 · 美術 7 次 | 反覆「修正全部後再審核」直到某回合一無所獲,再進行一次確認 |
| 審核影格率 | 約 2–3 fps | SwiftShader 軟體 GL——最差情況;透過物理步驟追趕,遊戲時間仍保持真實 |
一顆真實的 45 克物理球:推桿以衝量計算、具備彈跳材質,並採連續碰撞偵測,全力擊出時絕不會穿透路緣。
馬克杯的孔洞是真實的三角網格——球會穿過真正的陶瓷內壁;吐司則以其自身渲染網格的凸包進行碰撞。
一盞溫暖的 DirectionalLight3D 扮演廚房窗光:每個道具都會在毛氈與格紋布上投下真實陰影貼圖。
吐司被擊中會爆出麵包屑、糖漿飛濺、糖粉揚起,每次進洞還有三色彩帶噴發。
在瞄準時於背後環繞、隨滾動追蹤,並在獲勝時繞著洞口盤旋——並在降低動態效果模式下改為固定剪接。
球會依撞擊對象作出回應:吐司悶響、陶瓷叮聲、糖粒敲擊、糖漿黏濕聲——全部為取樣音軌,並依撞擊速度混音。