Inkbout

深夜的動畫師書桌上,畫作不肯安分:一位戴著紅手套的落魄拳手,在畫在紙上的擂台中,與一位重量級壯漢拳手對峙。讀懂他的預備動作——從高鉤拳後仰、蹲下躲過腹部撞擊——並在破綻中反擊。三次乾淨的反擊便能將他擊倒;三次擊倒,橡皮擦便會終結這場爭論。每次擊中都會濺出墨水,桌燈是真實的動態光源,灑落在紙頁上,整組角色皆由 Blender 的 Line Art 修改器繪製——程序化墨線,無需手繪。

立即遊玩

←/A 側閃・↓/S 蹲下・空白鍵/E 出拳・P 暫停・M 減少動態・行動裝置提供觸控按鈕・點一下開啟音效・遊戲資料 4.7 MB(另加引擎 wasm,首次載入後快取)

▶ 開始遊玩

概念即契約

由 AI 製作,並由真實 Godot 4 引擎匯出——同時也是實驗室的 Grease Pencil Line-Art 實驗。這場對決先有概念設計;每一輪審核都是拿實際運作版本與原畫進行比對。

AI 概念繪圖
概念關鍵美術圖——本作品審核所依據的基準
概念提示詞

夜晚一張動畫師的木製繪圖桌:奶油色紙張上以墨水繪製的拳擊場,兩位活潑的 1930 年代橡皮管風格卡通拳手在畫出的擂台中對打,周圍是鉛筆素描的觀眾,一盞黃銅桌燈在紙上灑落溫暖光池,復古賽璐珞動畫風格,線條大膽俐落。

Inkbout 在引擎中即時運作
同一場賽事在引擎中即時運作——主角舉起手套、觀眾起立喝采

程序化墨線,真實出拳

兩位拳手皆為 3D 橡皮管模型,其墨水描邊由 Blender 的 Line Art 修改器程序化生成——輪廓、折痕與材質邊界線條在每一幀重新運算,完全沒有手繪。他們的出拳皆來自真實動作捕捉:從 CMU 片段 14_01(47 秒的拳擊動作)中擷取的片段重新定位至模型上,並輔以手動關鍵幀的卡通誇張化,用於踉蹌、擊倒與最終融化成一灘墨水的動畫。

拳手的鉤拳幀圖,旁邊為其法線貼圖版本
壯漢拳手最終發布的五幀鉤拳動畫(上)——每幀皆重新運算的程序化墨線——旁邊為其相機空間法線貼圖版本(下)
Inkbout 主角精靈圖表,旁邊為其法線貼圖版本
主角完整的線稿圖表 + 法線貼圖版本(Line Art 修改器 + CMU 動作捕捉)

一盞真正照亮紙頁的桌燈

每一幀都渲染兩次——平面賽璐珞填色加上同一幾何體的相機空間法線貼圖——因此卡通精靈圖仍能對桌燈作出反應,這是一盞真正的 PointLight2D,拳手會以真實遮蔽器投射陰影於其光池之中。

桌燈光池灑落在手繪拳擊場上,拳手投射出紙張陰影
實際運作畫面:燈光池在紙上逐漸淡出,兩位拳手都在手繪擂台上拖曳出真實的遮蔽器陰影

預示動作、打擊感與審核

預備動作以形狀與顏色雙重編碼(無障礙原則:絕不單靠顏色區分),完整的打擊感清單皆已實作(60 毫秒擊中停格、衰減式震動、墨水濺射粒子、半色調閃光、緩動的回合卡片),遙測資料串流至主控台以供審核的死鎖偵測使用,且所有文字皆存放於本地化表中。氛圍音效與音效樣本皆取自平台音效庫。

緩動出現的「最終回合」卡片覆蓋於賽事之上
實際運作畫面:緩動出現的回合卡片——打擊感清單中的動畫轉場之一——滑入賽事畫面

誠實的實測數據

實驗室在此主機的軟體渲染器上(無 GPU)以 Playwright 進行審核,因此下方的幀率數據為最差情況——實際硬體以相容渲染器運作會快上許多。需牢記的一個數字:線稿在此主機的 CPU 上每幀渲染成本約為 2–4 秒。

量測方式測試條件
遊戲資料 (.pck)4.73 MB發布版匯出——圖片來源負載 5.76 MB,共 11 個取樣音效檔案
引擎負載檔 (.wasm)35.4 MBGodot 4.3 網頁執行環境,固定成本,首次載入後由瀏覽器快取
已驗證完整賽事在約 3580 遊戲單位處獲勝,共 3 次擊倒訊號驅動的自動運行,於確認回合中表現一致(3580/3570/3580)
線稿渲染成本約 2–4 秒/幀Line Art 修改器 + 賽璐珞 + 法線貼圖版本,於此主機以 CPU 版 Eevee 運算——此技術的真實成本
審核回合初版 2 · 美術 5第一輪審核發現輪詢式自動運行陷入 1 fps 的活鎖狀態——已替換為訊號驅動版本
審核影格率約 1–2 fpsSwiftShader 軟體 GL——最差情況;透過物理步驟追趕,遊戲時間仍保持真實

真實的引擎功能,靠實測換來

線稿 + Light2D

本實驗的展示重點:程序化墨水精靈圖搭配幾何真實的法線貼圖版本,由桌燈 PointLight2D 即時上色。

遮蔽器紙張陰影

每位拳手皆帶有 LightOccluder2D,隨移動在手繪擂台上拖曳出柔和陰影。

動作捕捉拳擊

從 CMU 14_01 中以數值方式擷取的出拳窗口——待機、一二連擊、撲擊、鉤拳——重新定位至橡皮管模型上。

墨水濺射粒子

GPUParticles2D 在每次擊中時濺出墨水;半色調閃光與白色彈出標記代表乾淨的反擊。

預示動作有限狀態機

三種攻擊各有獨特的形狀、顏色與位置預備動作,隨三個回合逐漸收緊;反擊會開啟限時窗口。

鏡頭搖擺與震動

Camera2D 隨著戰鬥起伏呼吸,受到衝擊時會震動並逐漸衰減,並在橡皮擦收尾時推近鏡頭。

蓄力 0.95 / 0.72 / 0.55 秒攻擊 0.18 秒 停格 60 毫秒輸入緩衝 120 毫秒 每次擊倒可反擊 3 次3 次擊倒獲勝 燈籠高度 96 像素方向鍵 + WASD + 觸控 暫停 + 減少動態效果支援在地化字串
由 BuildMidas Godot 實驗室從頭到尾打造——由 AI 智慧代理構思、建模、模擬並驗證。同一套流程也支援 AI 遊戲建構器