マーテリアルモーフィングの有効化
MMDモデルはマーテリアルモーフィングをサポートしており、これはアニメーションを通じてマーテリアルパラメータを制御できる機能です。
この機能は通常、アニメーションを通じてMMDモデルの一部をオンまたはオフにするために使用されます。
個別の完全なモジュールパスを使用する場合、この機能はデフォルトで無効ですが、MmdModelオブジェクトを作成する際にマーテリアルプロキシインプリメンテーションを渡すことで有効化できます。
const mmdModel = mmdRuntime.createMmdModel(mmdMesh, {
materialProxyConstructor: MmdStandardMaterialProxy
});
babylon-mmd パッケージルートは RegisterMmdRuntimeSharedDefaultMaterialProxy() を自動的に呼び出します。この関数は MmdStandardMaterialProxy をグローバルのデフォルトに設定し、互換性のあるモデルのマテリアルモーフィングを有効にします。
個別の完全なモジュールパスを使用しながら同じグローバルデフォルトを使用したい場合は、次のように明示的に呼び出します:
import { RegisterMmdRuntimeSharedDefaultMaterialProxy } from "babylon-mmd/esm/Runtime/mmdRuntimeShared.pure";
RegisterMmdRuntimeSharedDefaultMaterialProxy();
モデルごとの挙動を明確にするには、上記のようにマテリアルプロキシを渡す方法を引き続き推奨します。
マーテリアルプロキシ
マーテリアルパラメータを操作する際、MMDランタイムはマーテリアルに直接アクセスせず、マーテリアルプロキシを通してアクセスします。
このアプローチにより、任意のタイプのマーテリアルを使用するMMDモデルでマーテリアルモーフィングのサポートが可能になります。
babylon-mmdは2つのマーテリアルプロキシを提供しており、IMmdMaterialProxyインターフェースを実装するクラスを作成することで独自のものを実装することもできます。
MmdStandardMaterialProxy:MmdStandardMaterialを使用するMMDモデル用のマーテリアルプロキシStandardMaterialProxy:StandardMaterialを使用するMMDモデル用のマーテリアルプロキシ
MMDモデルで使用されているマーテリアルと互換性のないマーテリアルプロキシを渡すと、ランタイムエラーが発生する可能性があります。