ランタイム
このセクションでは、babylon-mmdのMMDランタイムコンポーネントについて説明します。
MMDランタイムは、MMDモデルやカメラにアニメーションを適用するために必要なコンポーネントと、その他のさまざまなシナリオを処理するための機能を提供します。
アニメーション適用の種類
ランタイムのロードと使用方法は、扱う3Dモデルとアニメーションデータのフォーマットによって異なります。
例えば、最も一般的なシナリオはPMXモデルをロードしてVMDアニメーションを適用することです。これはデフォルトで処理され、より複雑なシナリオについても説明します。
説明に入る前に、このセクションで使用される用語をいくつか明確にしておきましょう:
- MMDモデル:MMDソフトウェアで使用されるPMD/PMXフォーマットとbabylon-mmdのBPMXフォーマットからロードされる3Dモデル
- MMDアニメーション:MMDソフトウェアで使用されるVMD/VPDフォーマットとbabylon-mmdのBVMDフォーマットからロードされるアニメーションデータ
- ヒューマノイドモデル:人型の非MMDモデルで、通常FBX、GLTF、VRMフォーマットからロードされる
- ヒューマノイドアニメーション:ヒューマノイドモデルに適用されるアニメーションデータで、通常FBX、GLTF、VRMAフォーマットからロードされる
次の3つのケースについて説明します:
- MMDアニメーションをMMDモデルに適用する
- ヒューマノイドアニメーションをMMDモデルに適用する
- MMDアニメーションをヒューマノイドモデルに適用する
各ケースで異なるランタイムコンポーネントが使用されるため、必要なコンポーネントを明確に理解することが重要です。
MMDアニメーションをMMDモデルに適用する
MMDアニメーションをMMDモデルに適用することは、babylon-mmdの最も基本的かつ中核的な機能であり、これを実現するための多くのオプションが提供されています。
基本的に、これはMMDランタイムによって処理されます。
MMDランタイムコンポーネント
ランタイムは機能ごとにモジュール化されており、必要に応じて選択的に使用することができます。
MMDアニメーションを適用するための以下の3つのプロセスは、独立したモジュールに分離されています:
各プロセスを視覚化した画像。モデル:YYB 初音ミク_10th、モーション:メランコリ・ナイト by ほうき堂、フレーム3390。
厳密に言えば、IKの解決、トランスフォームの付加、モーフとフィジックスのシミュレーションの順序は変更可能です。しかし、一般的なシナリオでは、ほとんどの場合、図に示されている順序で進行します。
- アニメーションの評価
- IKの解決、トランスフォームの付加、モーフ
- フィジックスのシミュレーション
各プロセスを処理するためのさまざまなメソッドが提供されており、ユーザーは自分のニーズに合わせて適切なメソッドを選択できます。
アニメーションの評価
アニメーションの評価は、特定の時間frameTime
に対してMmdAnimation
からアニメーションデータを評価するプロセスです。
このプロセスを実行するために以下の実装が提供されています:
スタンドアロン:
クラス | 説明 | 備考 |
---|---|---|
MmdRuntimeCameraAnimation | カメラアニメーション評価器の実装 | 安定した十分なパフォーマンスを提供する標準的なJavaScript実装。 |
MmdRuntimeModelAnimation | モデルアニメーション評価器の実装 | 安定した十分なパフォーマンスを提供する標準的なJavaScript実装。 |
Babylon.js Animation
ベース:
クラス | 説明 | 備考 |
---|---|---|
MmdRuntimeCameraAnimationContainer | Babylon.js Animation ベースのカメラアニメーション評価器の実装 | Babylon.jsのアニメーションコンテナAnimation を使用。 |
MmdRuntimeModelAnimationContainer | Babylon.js Animation ベースのモデルアニメーション評価器の実装 | Babylon.jsのアニメーションコンテナAnimation を使用。 |
Babylon.jsアニメーションランタイムベース:
クラス | 説明 | 備考 |
---|---|---|
AnimationGroup | Babylon.jsアニメーションランタイム | すべてのプロセスをBabylon.jsアニメーションランタイムに委譲 |
ウェブアセンブリーベースのスタンドアロン:
クラス | 説明 | 備考 |
---|---|---|
MmdWasmRuntimeModelAnimation | ウェブアセンブリーベースのMMDアニメーション評価器の実装 | 優れたパフォーマンスを提供。カメラアニメーションにはウェブアセンブリーベースの実装は提供されていません。 |
特殊目的のスタンドアロン:
クラス | 説明 | 備考 |
---|---|---|
MmdCompositeRuntimeCameraAnimation | アニメーションブレンディングをサポートするカメラアニメーション評価器の実装 | |
MmdCompositeRuntimeModelAnimation | アニメーションブレンディングをサポートするモデルアニメーション評価器の実装 |
IKの解決、トランスフォームの付加、モーフ
MMDモデルはMMD仕様に従って制御する必要があります。このために、IK、トランスフォームの付加、モーフのソルバーが必要です。
このプロセスを実行するために以下の実装が提供されています:
クラス | 説明 | 備考 |
---|---|---|
MmdRuntime | デフォルト実装 | 安定した十分なパフォーマンスを提供。継承などによるカスタマイズが容易。 |
MmdWasmRuntime | ウェブアセンブリーベースの実装 | 優れたパフォーマンスを提供。カスタマイズが困難。 |
フィジックスのシミュレーション
MMDモデルは髪や服にリジッドボディを適用することで、フィジックスシミュレーションを実行できます。
このプロセスのために以下の実装が提供されています:
クラス | 説明 | 備考 |
---|---|---|
MmdBulletPhysics | バレットフィジックスベースの実装 | babylon-mmdが提供するウェブアセンブリー移植版のバレットフィジックス。 |
MmdWasmPhysics | MmdWasmRuntime 専用のバレットフィジックスベースの実装 | FFIコストが最も低く、最高のパフォーマンスを提供。カスタマイズが困難。 |
MmdAmmoPhysics | アモジェーエスフィジックスプラグインベースの実装 | やや不安定。パフォーマンスが低い。ウェブアセンブリーを実行できない環境でasm.jsバージョンで動作可能。 |
MmdPhysics | ハボックフィジックスプラグインベースの実装 | シミュレーション再現性が低い。不安定。ハボックフィジックスが必要な特殊な状況でのみ推奨。 |
一般的なランタイムの組み合わせ例
各プロセスに最適なランタイムの組み合わせを選択できます。
カスタマイズが容易で最も安定した組み合わせは以下の通りです:
プロセス | クラス |
---|---|
アニメーションの評価 | MmdRuntimeCameraAnimation , MmdRuntimeModelAnimation |
IKの解決、トランスフォームの付加、モーフ | MmdRuntime |
フィジックスのシミュレーション | MmdBulletPhysics |
最高のパフォーマンスを発揮する組み合わせは以下の通りです:
プロセス | クラス |
---|---|
アニメーションの評価 | MmdRuntimeCameraAnimation , MmdWasmRuntimeModelAnimation |
IKの解決、トランスフォームの付加、モーフ | MmdWasmRuntime |
フィジックスのシミュレーション | MmdWasmPhysics |
ウェブアセンブリーを実行できない環境では、以下の組み合わせを使用できます:
プロセス | クラス |
---|---|
アニメーションの評価 | MmdRuntimeCameraAnimation , MmdRuntimeModelAnimation |
IKの解決、トランスフォームの付加、モーフ | MmdRuntime |
フィジックスのシミュレーション | MmdAmmoPhysics |
ヒューマノイドアニメーションをMMDモデルに適用する
ヒューマノイドアニメーションをMMDモデルに適用するプロセスは、MMDアニメーションをMMDモデルに適用するプロセスとそれほど変わりません。
上述のように、MMDアニメーションは以下の3つのプロセスで構成されています:
- アニメーションの評価
- IKの解決、トランスフォームの付加、モーフ
- フィジックスのシミュレーション
最初のプロセスのみを変更することで、MMDアニメーションの代わりにヒューマノイドアニメーションを適用することができます。
この目的のためにAnimationRetargeter
クラスが提供されています。これはヒューマノイドアニメーションをMMDモデルに合わせてリターゲットします。
Babylon.js SceneLoaderを使用してヒューマノイドアニメーションをAnimationGroup
としてロードした後、
AnimationRetargeter
を使用してヒューマノイドアニメーションをMMDモデルに合わせてリターゲットすることで、ヒューマノイドアニメーションをMMDモデルに適用できます。
この場合、アニメーションの評価プロセスではAnimationGroup
が使用されます。
MMDアニメーションをヒューマノイドモデルに適用する
ユーティリティクラスHumanoidMmd
を使用して、MMDアニメーションをヒューマノイドモデルに適用できます。
ヒューマノイドモデルとMMDモデルの構造上の違いにより、MMDアニメーションをヒューマノイドモデルに直接適用することはできません。
そのため、HumanoidMmd
はプロキシスケルトンを使用してMMDアニメーションを適用し、その結果をリアルタイムでヒューマノイドモデルにリターゲットします。
MMDアニメーションをヒューマノイドモデルに適用するプロセスは、MMDアニメーションをMMDモデルに適用するプロセスとほぼ同じですが、ヒューマノイドモデルをMmdモデルとしてラップする追加ステップがあります。
その他の要素
上記で説明したトピックはMMDモデルへのアニメーション適用方法のみをカバーしていますが、実際にはMMDモデルと共に様々な要素がランタイムに参加します。
これらの要素には以下が含まれます:
- オーディオやビデオソース
- カメラ
- UIエレメント
これらは非常に一般的な要素ですが、非常に精巧に実装されているため、適切に使用するための別のリファレンスドキュメントも提供されています。