BPMXローダー
このセクションでは、PMXファイルのバリエーションである**Babylon PMX (BPMX)**ファイルをロードする方法について説明します。
BPMXフォーマットはMMDモデルを格納するためのフォーマットであり、PMX/PMDとは異なり、単一のバイナリフォーマットです。
BPMXファイルをロードするには、BpmxLoader
を使用します。このローダーは**PmxLoader
** と**PmdLoader
** とほぼ同じ方法で動作します。
SceneLoaderへの登録
まず、BpmxLoader
をBabylon.js SceneLoaderに登録する必要があります。これはサイドエフェクトのためにインポートすることで行われます。
import "babylon-mmd/esm/Loader/Optimized/bpmxLoader";
このインポートステートメントは、暗黙的に次のサイドエフェクトを実行します:
RegisterSceneLoaderPlugin(new BpmxLoader());
BPMXファイルのロード
BPMXファイルは、PMX/PMDファイルと同様に、Babylon.js SceneLoader APIを使用してロードできます。
以下は、SceneLoader APIメソッドの1つである**LoadAssetContainerAsync
** を使用してBPMXファイルをロードする例です。
const assetContainer: AssetContainer = await LoadAssetContainerAsync("path/to/mmdModel.bpmx", scene);
assetContainer.addAllToScene();
const mmdMesh = assetContainer.meshes[0] as MmdMesh;
BPMXファイルをロードするために**ImportMeshAsync
** や**AppendSceneAsync
** を使用することもできます。
BPMXファイルはテクスチャを含むすべてのアセットを単一のファイルに格納するため、テクスチャ解決に関連する問題がなく、すべてのアセットを単一のネットワークリクエストでロードできます。
ブラウザのファイルAPIの使用
ブラウザのファイルAPIを使用してファイルをロードすることもできます。
以下は、showOpenFilePicker APIを使用してBPMXファイルを選択しロードする例です。
const [fileHandle] = await window.showOpenFilePicker({
types: [{
description: "BPMX File",
accept: {
"application/octet-stream": [".bpmx"],
},
}],
excludeAcceptAllOption: true,
multiple: false,
});
const file = await fileHandle.getFile();
const assetContainer: AssetContainer = await LoadAssetContainerAsync(file, scene);
assetContainer.addAllToScene();
const mmdMesh = assetContainer.meshes[0] as MmdMesh;
showOpenFilePickerブラウザAPIは、FirefoxおよびSafariではサポートされていません。
ローダーオプション
PMX/PMDローダーとは異なり、BPMXローダーはいくつかの最適化関連オプションをサポートしていません。これは、BPMXファイルが変換プロセス中に既に最適化されているためです。
以下は、pluginOptions
を使用してBPMXローダーでサポートされているすべてのオプションを設定する例です。
const assetContainer: AssetContainer = await LoadAssetContainerAsync(
modelFileOrUrl,
scene,
{
pluginOptions: {
mmdmodel: {
materialBuilder: null,
useSdef: true,
buildSkeleton: true,
buildMorph: true,
boundingBoxMargin: 10,
alwaysSetSubMeshesBoundingInfo: true,
preserveSerializationData: false,
loggingEnabled: false,
useSingleMeshForSingleGeometryModel: true
}
}
}
);
useSingleMeshForSingleGeometryModel
を除いて、他のオプションはPMX/PMDローダーと同じです。各オプションの説明については、PMX/PMDローダーオプションのドキュメントを参照してください。
useSingleMeshForSingleGeometryModel
BpmxLoader
はNつのジオメトリを持つモデルをロードするために空のルートメッシュを作成し、その下にジオメトリを持つNつのメッシュを作成します。したがって、3つのジオメトリを持つ3Dモデルの構造は次のように構成されます。
RootMesh {
children: [
Mesh1
Mesh2
Mesh3
]
}
ただし、モデルが単一のジオメトリを持つ場合、ルートメッシュは不要です。したがって、useSingleMeshForSingleGeometryModel
がtrue
の場合、単一のジオメトリを持つモデルはルートメッシュなしの1つのメッシュのみで構成され、階層は次のように構成されます。
Mesh1
useSingleMeshForSingleGeometryModel
がfalse
の場合、単一のジオメトリを持つモデルでもルートメッシュが存在し、階層は次のように構成されます。
RootMesh {
children: [
Mesh1
]
}
useSingleMeshForSingleGeometryModel
のデフォルト値はtrue
です。