iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
Claude AI

血汗同事:我和 Claude Code 僱了一隊 AI,做出 Web MMO ARPG系列 第 9

Day 8|Meshy 做不了四足動畫,只好 AI 手寫狼的五組動畫

  • 分享至 

  • xImage
  •  

Whisper Isle 遊戲連結(PC Only):whisperisle.app(註:專案每日持續高速推進,撰文當下線上已推進至 v0.2.3)

昨天在 Day 7 聊到了人形角色的 2.5D 等距 Sprite 產線:從 Meshy 裸模、Mixamo 套骨架動作,再到 Blender Headless 自動化批渲與 WebP 打包,我們成功把騎士、法師、獵人(以及後續的盜賊)等職業送上了流水線。當人形角色的流水線順利運轉時,身為開發者,心裡通常會產生一種樂觀的錯覺:既然這套工具鏈這麼順手,那做怪物應該也大同小異吧?

於是在開工後的第二個週末(2026-07-12),我們準備將第一隻野外怪物——野狼(Wolf)帶進遊戲世界。然而,當我把狼的 3D 模型丟進 AI 工具鏈時,迎面撞上的卻是一堵冰冷厚重的高牆:Meshy AI 生成與自動綁骨服務,在四足動物領域近乎死路一條。

1. AI 工具鏈的集體失靈

  1. Mixamo 徹底缺席:Mixamo 是 Adobe 旗下的老牌服務,它的底層演算法只認標準人形雙足骨架(兩隻手、兩隻腳、一顆頭)。把一隻四足野狼的 FBX 上傳上去,系統只會跳出錯誤,或者試圖把前腳當成手臂、把後腿當成雙腿,把狼扭曲成一隻站在地上的畸形直立怪物。

  2. Meshy Quadruped rig 半殘:Meshy 雖然有 Quadruped(四足)的實驗性綁骨功能,但它的動作庫裡只有一組 Walking(走路)動畫。沒有待機(Idle)、沒有撲咬攻擊(Attack)、沒有受擊硬直(Hit Reaction)、沒有死亡倒地(Dead)。一隻在 MMO 世界裡只能往前走、不能停下、不能咬人、也不能被殺死的狼,在遊戲邏輯中是不可用的。

- Meshy Quadruped rig 實測動畫庫僅 walking(缺攻/受擊/死),Mixamo 僅人形無備援 → 四足走 Meshy 動畫=死路
- 拍板:狼=靜態 GLB → bpy 腳本自建骨架+自動權重+手寫關鍵幀五組 → 既有渲染管線

曾經短暫考慮過第三條路:去 Unity Asset Store 或 Sketchfab 買現成的四足動物動作包。

但在專案初期,我們曾經用過一個公牛(Bull)資產包,試圖透過微調 Mesh 把它改造成野豬。結果證明這是一場災難:買來的專業模型,其骨架配重與動作細節是緊密咬合的,任何局部的換皮或微雕都會導致蒙皮崩潰與關節穿模。更嚴重的問題是世界觀風格割裂。

沒有現成工具可用,也不打算妥協買包。剩下的唯一選擇,就是自己動手:只用 Meshy 生成靜態狼身模型,骨架、權重與全部五組動畫,全部在 Blender 裡用 Python 腳本手寫算出來。

2. 四足骨架的深坑:香蕉身形與熱擴散失效

要讓一隻靜態的 3D 狼動起來,第一步是給它植入骨架(Rigging)並綁定皮肉權重(Skinning)。在 Blender 裡,最成熟的骨架系統是自帶的 Rigify 插件,裡面有一套標準的 wolf metarig。但把 Meshy 輸出的隨機網格自動對位到標準骨架上,難度遠超想像。

  1. 姿勢錯誤=整隻報廢
    我們拿到的第一隻狼模型,看起來非常生動:狼頭低伏、身體像香蕉一樣微弓、尾巴側捲貼在後腿上。

這在靜態展示時很漂亮,但進到綁骨管線就是一場噩夢。骨架綁定要求模型處於幾何中立姿態(Neutral Rest Pose)。如果狼在初始狀態就弓著背、尾巴貼著大腿,當骨架套上去時,尾巴的骨頭會把大腿的肉一起帶走,走起路來尾巴和大腿黏成一團。

這隻狼在審計第一階段就被直接報廢。我們在 tools/art/style-guide.md 裡為所有四足模型立下了**「Rig 友善姿勢四條硬規格」**,並寫進了圖像生成的 Prompt 尾綴中:

  • 四足水平著地,前後左右足距開立,不可前後交錯。
  • 脊椎呈水平一直線,嚴禁弓背(香蕉身)或下塌。
  • 尾巴自然向後伸展,絕對不可夾尾或捲貼後腿。
  • 嘴部微張,四肢關節保持 5° 到 10° 的微小屈曲(供 IK 求解器識別彎曲方向)。
  1. Voxel 代理殼權重法
    第二個坑是 Blender 的自動權重演算法(Bone Heat Weighting)。AI 生成的 3D 模型內部往往包含非流形幾何(Non-manifold mesh)、懸空面或重疊頂點。當 Blender 嘗試用熱擴散演算法計算骨頭對頂點的影響權重時,控制台直接噴出經典報錯:Bone Heat Weighting: failed to find solution for one or more bones。42 根控制骨架中,有整整 42 根權重計算失敗(成功率 0/42)。

Claude Code 改走體素代理殼(Voxel Remesh Proxy)權重法:先將高模複製一份,進行粗糙的體素重構,封閉內部所有自相交漏洞,形成一個乾淨的閉合外殼,對乾淨的外殼跑熱擴散權重。再透過表面最近鄰演算法(Data Transfer),將代理殼上的平滑權重投影回原始高模上。骨架加入 preserve_volume(雙四元數蒙皮,Dual Quaternion Skinning),徹底解決四足奔跑時肘關節與膝關節像擰毛巾一樣塌陷萎縮的問題。權重覆蓋率從 0/42 瞬間拉升到了 28/42 核心骨全覆蓋,狼的身體終於擁有了可以被程序操控的肌肉與骨骼。

3. 手寫關鍵幀:步態幾何與一 clip 一 session

有了骨架,接下來是最艱難的一步:怎麼用代碼讓這隻狼自然地動起來?Claude Code 透過 Blender 的 Python API,直接操控 Rigify 的 IK(逆向運動學)控制器與 FK 旋轉軸,從零手寫了五組核心動作的關鍵幀。

  1. 走路動畫(Walking):24 幀側序四拍步態
    四足動物的行走步態(Walk Gait)在生物力學上有嚴格的順序。如果像人一樣兩腿交替,狼走起來會像踩高蹺;如果四腳同拍,會變成跳躍。 我們參考了四足動物解剖學,鎖定了經典的側序四拍步態(Lateral Sequence):
    左後足 (LH)→ 左前足 (LF) → 右後足 (RH) → 右前足 (RF)
    左後足 (LH)→ 左前足 (LF) → 右後足 (RH) → 右前足 (RF)

每個足部週期分為兩段:

  • 支撐相(Stance Phase):腳掌踩死地板,以均勻速度向後平移(嚴格匹配每秒位移速度,達成零滑步)。
  • 擺動相(Swing Phase):腳掌離地,向前抬起劃出一條平滑的貝茲拋物線,重新落地。同時,骨盆與胸腔被注入了正弦波上下微幅起伏(軀幹以步態兩倍頻震盪),狼頭保持相對水平並伴隨微小的向前探動。在 24 幀的循環裡,一隻沉穩巡視領地的野狼躍然紙上。
  1. 其餘四組動作的手寫幾何
  • 待機(Idle):四足站立,胸腔與肋骨隨呼吸週期起伏,耳朵在第 12 幀給予微幅的下撇顫動,打破完全靜止的僵硬感。
  • 攻擊(Attack):前腳壓低、重心後移蓄力

    → 脊椎伸展,整隻狼向前騰空撲出

    → 下顎骨猛烈閉合咬擊

    → 四足落地緩衝回收。
  • 受擊(Hit Reaction):受到重擊時頭頸瞬間後甩,前肢向後微退頓挫,隨後迅速重心復位。
  • 死亡(Dead):失去支撐向側方傾倒,四肢癱軟伸直,定格在地面上。在遊戲客戶端中,死亡動畫播放完畢後會轉為靜態屍體實體,不再循環。

結語

角色會走動了,野狼會撲咬了,戰鬥系統在畫布上初具雛形。但當你操控著角色在地圖上移動時,你的目光很快就會被螢幕邊緣的東西吸引——那就是血條、經驗條、快捷欄與等級標籤:遊戲的 HUD(Heads-Up Display)介面。


上一篇
Day 7|沒有美術,就自己蓋產線:Blender 渲染八方向 sprite
下一篇
Day 9|HUD 畫了四版才學會:先給參考圖,再談實作
系列文
血汗同事:我和 Claude Code 僱了一隊 AI,做出 Web MMO ARPG12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言