VRoid Procedural Motion

VRM を表示し、コード生成モーション・音量ベース口パク・視線サッカードで VTuber らしい待機挙動を作る

VRM Controls
Model URL
monet_sample_a.vrm (default)
読み込み中...
Lip Sync Audio
007_onichan_issyonigamesiyo.wav
停止中
Model Scale
1.00
Model Y Offset
0.00
Camera Fov
38
Ambient Light
0.85
Key Light
1.65
Rim Light
0.90
Motion Speed
1.00
Body Yaw
14.0 deg
Body Sway
0.070
Body Lean
8.0 deg
Body Response
2.50
Breath Speed
0.18
Breath Amount
2.8 deg
Head Follow
0.62
Gaze Saccade
1.00
Gaze Drift
1.00
Micro Motion
1.35 deg
Blink Rate
1.00
Blink Speed
16.0
Blink Asymmetry
0.30
Lip Open Gain
11.50
Lip Smile Gain
1.00
Lip Burst Gain
0.52
Lip RMS Gate
0.012
Lip Attack
24.0
Lip Release
8.5
Rotate Speed
0.80

仕組み

このページは、VRMの表示とモーション生成を分離し、毎フレーム生成した値を骨と表情へ適用する構成です。 既存のVRMAには依存せず、待機中でも破綻しにくい「揺れ + 呼吸 + まばたき」をコードで組み立てています。

1. 低周波ノイズで全身の揺れを作る

`fBm` ノイズで `yaw/sway` のベース信号を作り、`damp` で慣性を持たせています。低頻度で微小な `jerk` も加えることで、機械的なループ感を減らしています。

body = damp(fBm(t) + rareJerk)

2. 呼吸波とマイクロモーションを合成

呼吸は低周波 `sin`、頭部の細かな揺れは別位相のノイズで生成します。 合成後の値を body/head の回転や上下移動に配分して、自然な待機姿勢を維持します。

head = follow(body) + microNoise + breath

3. 非同期まばたき

まばたき発火は確率ベース、開閉は state machine で制御しています。左右にわずかな非対称を入れて、不自然な同時閉眼を避けています。

if random < chance(dt): close -> hold -> open

4. RMS + 簡易スペクトル比のリップシンク

`007_onichan_issyonigamesiyo.wav` を解析し、`RMS` で開口量を決めつつ、 `300-800Hz` と `1200-2500Hz` の比率から口角寄りの成分を加えています。さらに高域の瞬間差分を突発成分として 加算し、単調な開閉になりにくくしています。

open = log1p((rms-floor)*gain), smile = high/low + burst

5. 発話タイミング依存の視線サッカード

視線は常時揺らさず、発話量(`mouthOpen`)が高いほどサッカード発火率を上げる設計です。 低速ドリフトへ短いインパルスを重ね、跳躍してすぐ戻る眼球運動を作っています。

gaze = drift + impulse(speechLevel), then damp to center
FPS 0