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

Fix BMP テクスチャローダー

BMPテクスチャを使用したモデルの読み込みに問題が発生した場合は、このドキュメントを参照して問題を解決できます。

問題の診断

不正確に読み込まれたBMPテクスチャの例 MMDスクールオーディトリアムステージステージモデルからの不正確に読み込まれたテクスチャの例。

BMPテクスチャを使用したモデルを読み込む際、アルファチャンネルを持つBMPファイルが正しく表示されないケースがあります。

原因

この問題は、ブラウザとMMDがBMPテクスチャファイルを読み込む方法の違いによって発生します。(Babylon.jsはブラウザのBMPテクスチャ読み込み実装を使用しています。)

問題は、テクスチャにアルファチャンネルがあっても、ブラウザがアルファチャンネルを無視してRGBチャンネルのみを読み取ることです。これによりアルファチャンネルの損失が発生します。

解決策

babylon-mmdは、BMPテクスチャを正しく読み込むための追加処理を行うBMPテクスチャローダーを提供しています。

これを使用するには、babylon-mmdのBMPテクスチャローダーをBabylon.jsのテクスチャローダーのグローバルステートに登録する必要があります

import { RegisterDxBmpTextureLoader } from "babylon-mmd/esm/Loader/registerDxBmpTextureLoader";

RegisterDxBmpTextureLoader();

RegisterDxBmpTextureLoader関数は、babylon-mmdのBMPテクスチャローダーをBabylon.jsのテクスチャローダーに登録します。この関数は最初の呼び出し時にのみ有効です。

備考

この関数は、インデックスをインポートすると実行されるサイドエフェクトです。例:import { MmdRuntime } from "babylon-mmd";

したがって、babylon-mmdのインデックスを一度でもインポートすると、DxBmpTextureLoaderはすでに登録されています。

正しく読み込まれたBMPテクスチャの例 MMDスクールオーディトリアムステージモデルからの正しく読み込まれたテクスチャの例。