iT邦幫忙

2026 iThome 鐵人賽

DAY 20
0
Vibe Coding

使用 Vibe Coding 開發一套 Tutting 模擬器吧!系列 第 20

📐Day 20|3D Tutting 模擬器的律動模式實作剖析

  • 分享至 

  • xImage
  •  

前19天的挑戰與 AI 一同將大骨架的 Tutting 動作模擬功能大致完成了,已經可以將自己的想法設計並數位化紀錄。

然而,在反覆測試的過程中……總覺得角色的視覺感依然欠缺了某種「靈魂」。

https://ithelp.ithome.com.tw/upload/images/20260831/20144288et8nKqn0rE.jpg

這讓我回想起來,在 2025 年的挑戰中 Tutting x 律動探討進行過深入的研究,趕緊回頭複習一下!

關於 Tutting 舞蹈與律動結合的實際呈現,可以參考以下範例影片:
TUTAT vs FUTURE|Best 32 @ FOREVER DANCER vol.6|LB-PIX

因此,今天的目標就是與 AI 共同研究並實作 3D Tutting 模擬器的律動模式!!

什麼是律動?

律動(Groove)是一種隨著音樂起伏自然流動的身體節奏感,它不是單純的動作,而是一種持續的流動狀態,就像音樂的脈搏在舞者身體中跳動,讓舞蹈與音樂合而為一。

在 3D 動畫的語境中,律動代表的是拍點與拍點之間的「微振盪與呼吸感」。即使舞者在等待下一個重音,身體依然會維持著微幅的彈動與流動,不會陷入完全靜止的狀態。

常見律動類型

在舞蹈中常見律動類型如下:

  • Bounce(彈跳):身體或手部有上下或前後的小幅彈動。
  • Rock(搖擺):身體或手臂做小幅左右或前後搖擺。
  • Switch(切換/轉換):角度或動作突然或快速切換,但保持節奏感。

為什麼 Tutting 模擬器需要律動模式?

Tutting 本質上是「幾何與框架的舞蹈」,但如果只停留在角度與方塊,它就容易顯得僵硬。

真人舞者在跳 Tutting 時,全身肌肉依然隨著 BPM 在上下沉浮(Bounce)或左右擺動;沒有了律動,幾何框架就只是冰冷的機械線條,失去了視覺上的彈性與生命感。

律動模式(Groove Mode)實踐

律動模式(Groove Mode)——在演算好的關鍵影格姿勢之上,疊加一層跟著 BPM 持續振盪的動態偏移量。
但在實作時發現,全身關節不能採用同一套振盪機制,必須依物理特性拆分為兩套共用時間軸的系統:

1. 系統架構:FK 與 IK 的兩套機制

  • 單關節振盪系統 (FK):適用於脊椎、頭部、肩膀等開放鏈關節。因為這些部位轉動自由度高,可以直接在局部軸疊加旋轉量(quaternion.multiply)。

  • 蹲彈律動系統 (IK):適用於雙腿。下肢律動受限於「腳掌必須貼地」的物理約束。若天真地旋轉大腿與小腿,腳掌會穿透地板。因此改為推動身體整體位移,再透過 IK 自動反解雙腿角度,並鎖定腳踝世界旋轉。

2. 波形數學與相位差系統透過自訂波形與時間軸,創造出自然的身體語彙

  • Bounce 波形 {1 - cos(2\pi p)}/2:值域落在 [0, 1],谷底剛好落在整拍點,呈現向下沉再彈起單向動作。
  • Sine 波形 sin(2\pi p):值域落在 [-1, 1],適合肩膀與頭部的對稱左右搖擺。
  • 相位差(Phase Offset):若全身關節同步彈動會像被繩子拉著的木偶。透過讓相位從骨盆(0.00)一路向頭部(0.15)遞增,振盪就會像波浪一樣沿著脊椎向傳遞。

3. 實作細節與防漂移機制

  • 獨立的時間軸:律動時間軸獨立於關鍵影格切換,跨拍時相位不重設,擺動才不會產生跳格頓挫。
  • 預覽防漂移(Drift Correction):在單純預覽(未播放拍點)時,每一幀會扣除上一幀疊加的位移量,避免 model.position 逐幀累加導致角色沉入地底。
  • 狀態互斥:若使用者手動開啟腿部 IK,蹲彈律動會自動停用,防止兩套系統爭奪操控權造成畫面閃爍。

https://ithelp.ithome.com.tw/upload/images/20260915/20144288MDDTQmqF2v.png

結論

律動模式的加入,讓 3D Tutting 模擬器擺脫了過去「剛性幾何」的刻板印象。透過將物理限制(FK/IK 分離)、數學波形(Bounce/Sine)與解剖學傳遞感(Phase Offset)結合,角色終於可以在等拍點時展現出自然的呼吸感,真正實現了從「擺出姿勢」到「賦予靈魂」的跨越。


律動模式(Groove Mode)— 功能 Prompt

# 律動模式(Groove Mode)— 功能 Prompt

在 3D 人形骨骼動畫系統中加入「律動模式」:播放拍點時,在算好的姿勢之上疊加一層隨 BPM 持續振盪的效果,模擬 tutting/dance 暖身律動。分兩套獨立機制。

## 機制一:關節振盪(肩膀/脊椎/頭頸等)

- 每個關節一組參數:`axis`(x/y/z)、`amp`(度)、`freq`(每拍次數)、`phase`(0~1相位偏移)、`wave`(bounce 單向 0~1 / sine 雙向 -1~1)
- 骨盆/脊椎/膝蓋類關節用 bounce;肩膀/頭頸類左右對稱擺動用 sine
- 脊椎多節给遞增 phase(如 0→0.03→0.06),做出「一節節跟著甩」的傳導感;左右對稱肢體 phase 錯開 0.5
- 套用方式:`bone.quaternion.multiply(振盪量算出的四元數)`,post-multiply 疊加在原本姿勢之上,不寫回原始姿勢資料,不污染拍點/存檔
- 使用者可自訂每個關節的參數,只存「改過的欄位」,跟預設值合併後生效;可個別/全部恢復預設值

## 機制二:蹲彈律動(下肢,不能用機制一硬套)

**問題**:大腿/小腿若各自獨立旋轉振盪,腳掌會浮起或插地,不符合人體物理。

**正確作法**:下肢是「腳掌固定、膝蓋反算彎曲角度」的協同動作,兩腳同步(不分左右):

1. 律動開始的第一幀,捕捉雙腳目前的世界座標+世界旋轉,當作「原地錨點」
2. 用波形算出垂直下沉量、側向位移量(單位換算成場景公尺),疊加在角色整體位置上(讓身體真的上下/左右移動)
3. 對每條腿用「兩節解析解 IK」(餘弦定理,root-mid-end 三點+pole 向量決定彎曲方向),目標=固定錨點,反算大腿/小腿該彎多少才能讓腳掌精準貼住原地
4. 腳踝:用父骨骼目前世界旋轉反推本地旋轉,鎖住腳掌世界旋轉=貼地不轉動
5. 若使用者手動開啟腿部 IK,蹲彈律動整個讓路,避免搶骨骼

**參數**:垂直幅度(cm)、側向幅度(cm)、頻率、相位、波形(僅垂直方向可選 bounce/sine,側向固定用 sine)

**時鐘處理**:播放拍點時位置每幀都會被重新計算(不會累積漂移,直接疊加即可);若是「不播放也能看效果」的即時預覽模式,位置不會被其他流程重設,每幀要先扣掉上一幀疊加的量再加新的,避免位移一路累積下沉。


上一篇
📐DAY 19 | 使用 Tutting 模擬器全解構 Threading 穿線招式
下一篇
📐DAY 21 | 掌指間的微米幾何:Finger Tutting!
系列文
使用 Vibe Coding 開發一套 Tutting 模擬器吧!25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言