メインコンテンツまでスキップ

ランタイム

このセクションでは、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つのケースについて説明します:

  1. MMDアニメーションをMMDモデルに適用する
  2. ヒューマノイドアニメーションをMMDモデルに適用する
  3. MMDアニメーションをヒューマノイドモデルに適用する

各ケースで異なるランタイムコンポーネントが使用されるため、必要なコンポーネントを明確に理解することが重要です。

MMDアニメーションをMMDモデルに適用する

MMDアニメーションをMMDモデルに適用することは、babylon-mmdの最も基本的かつ中核的な機能であり、これを実現するための多くのオプションが提供されています。

基本的に、これはMMDランタイムによって処理されます。

MMDランタイムコンポーネント

ランタイムは機能ごとにモジュール化されており、必要に応じて選択的に使用することができます。

MMDアニメーションを適用するための以下の3つのプロセスは、独立したモジュールに分離されています:

プロセス 各プロセスを視覚化した画像。モデル:YYB 初音ミク_10th、モーション:メランコリ・ナイト by ほうき堂、フレーム3390。

備考

厳密に言えば、IKの解決、トランスフォームの付加、モーフとフィジックスのシミュレーションの順序は変更可能です。しかし、一般的なシナリオでは、ほとんどの場合、図に示されている順序で進行します。

  1. アニメーションの評価
  2. IKの解決、トランスフォームの付加、モーフ
  3. フィジックスのシミュレーション

各プロセスを処理するためのさまざまなメソッドが提供されており、ユーザーは自分のニーズに合わせて適切なメソッドを選択できます。

アニメーションの評価

アニメーションの評価は、特定の時間frameTimeに対してMmdAnimationからアニメーションデータを評価するプロセスです。

このプロセスを実行するために以下の実装が提供されています:

スタンドアロン:

クラス説明備考
MmdRuntimeCameraAnimationカメラアニメーション評価器の実装安定した十分なパフォーマンスを提供する標準的なJavaScript実装。
MmdRuntimeModelAnimationモデルアニメーション評価器の実装安定した十分なパフォーマンスを提供する標準的なJavaScript実装。

Babylon.js Animation ベース:

クラス説明備考
MmdRuntimeCameraAnimationContainerBabylon.js Animation ベースのカメラアニメーション評価器の実装Babylon.jsのアニメーションコンテナAnimationを使用。
MmdRuntimeModelAnimationContainerBabylon.js Animation ベースのモデルアニメーション評価器の実装Babylon.jsのアニメーションコンテナAnimationを使用。

Babylon.jsアニメーションランタイムベース:

クラス説明備考
AnimationGroupBabylon.jsアニメーションランタイムすべてのプロセスをBabylon.jsアニメーションランタイムに委譲

ウェブアセンブリーベースのスタンドアロン:

クラス説明備考
MmdWasmRuntimeModelAnimationウェブアセンブリーベースのMMDアニメーション評価器の実装優れたパフォーマンスを提供。カメラアニメーションにはウェブアセンブリーベースの実装は提供されていません。

特殊目的のスタンドアロン:

クラス説明備考
MmdCompositeRuntimeCameraAnimationアニメーションブレンディングをサポートするカメラアニメーション評価器の実装
MmdCompositeRuntimeModelAnimationアニメーションブレンディングをサポートするモデルアニメーション評価器の実装

IKの解決、トランスフォームの付加、モーフ

MMDモデルはMMD仕様に従って制御する必要があります。このために、IK、トランスフォームの付加、モーフのソルバーが必要です。

このプロセスを実行するために以下の実装が提供されています:

クラス説明備考
MmdRuntimeデフォルト実装安定した十分なパフォーマンスを提供。継承などによるカスタマイズが容易。
MmdWasmRuntimeウェブアセンブリーベースの実装優れたパフォーマンスを提供。カスタマイズが困難。

フィジックスのシミュレーション

MMDモデルは髪や服にリジッドボディを適用することで、フィジックスシミュレーションを実行できます。

このプロセスのために以下の実装が提供されています:

クラス説明備考
MmdBulletPhysicsバレットフィジックスベースの実装babylon-mmdが提供するウェブアセンブリー移植版のバレットフィジックス。
MmdWasmPhysicsMmdWasmRuntime専用のバレットフィジックスベースの実装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つのプロセスで構成されています:

  1. アニメーションの評価
  2. IKの解決、トランスフォームの付加、モーフ
  3. フィジックスのシミュレーション

最初のプロセスのみを変更することで、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エレメント

これらは非常に一般的な要素ですが、非常に精巧に実装されているため、適切に使用するための別のリファレンスドキュメントも提供されています。