Skip to content

MMD モデル

ランタイムと形式

MMD レンダラーは PMX/PMD モデルと VMD アニメーションに対応します。Three.js がモデルを読み込み、@moeru/three-mmd-physics-ammo と Ammo が任意の剛体物理を提供します。

実装は static/mmd/mmd-core.jsmmd-manager.jsmmd-init.jsmmd-animation.jsmmd-expression.jsmmd-interaction.jsmmd-cursor-follow.js、UI モジュールに分割されています。選択中のキャラクターが MMD を使う場合だけ、mmd-init.jswindow.mmdManager を作成し #mmd-canvas を初期化します。

モデルとアニメーションの配信元

GET /api/model/mmd/models は次を再帰的に統合します。

  • static/mmd/ の同梱 PMX/PMD ファイル
  • /user_mmd のユーザーモデル
  • /workshop/{item_id}/... のインストール済み Workshop モデル

VMD アニメーションは static/mmd/animation//user_mmd/animation/ から列挙されます。モデルパッケージでは PMX/PMD と参照テクスチャの相対配置を維持してください。

PMX/PMD と VMD は直接アップロードできます。ZIP インポートはモデルとテクスチャを含む完全なパッケージ向けです。最初の PMX/PMD を選択し、既存の単一トップディレクトリを維持し、一般的な日本語/CJK ファイル名エンコーディングを補正し、絶対パスと親ディレクトリ移動を拒否して、ユーザーモデルのサブディレクトリに展開します。

上限はアップロード 1 ファイル 500 MB、ZIP 展開後合計 2 GB、ZIP エントリー 10,000 件です。

感情マッピング

MMD の感情は意味名を 1 つ以上のモーフ名に割り当てます。

json
{
  "neutral": ["default", "ニュートラル"],
  "happy": ["笑い", "smile"]
}

マッピングはユーザー MMD ディレクトリの emotion_config にモデル別で保存されます。実行時の mmd-expression.js は保存値を内蔵候補へ上書きマージし、読み込んだモデルに存在する最初のモーフを選び、設定された遅延後に non-neutral 表情を neutral へ戻します。エディターは neutralhappyrelaxedsadangrysurprisedfear を公開します。

/mmd_emotion_manager で実際のモーフ名を確認して保存します。MMD が有効なとき、window.LanLan1.setEmotion(name)window.mmdManager.expression.setEmotion(name) に委譲されます。

管理動作

/model_manager はモデルとアニメーションをインポートし、選択アバターをプレビューし、ユーザー所有コンテンツを削除します。同梱と Workshop アセットはこれらの API では読み取り専用です。パッケージサブディレクトリのユーザーモデルを削除すると、参照テクスチャを残さないようトップレベルパッケージ全体と感情マッピングを削除します。

API 概要

メソッドエンドポイント用途
POST/api/model/mmd/upload.pmx または .pmd を 1 ファイルアップロード
POST/api/model/mmd/upload_animation.vmd を 1 ファイルアップロード
POST/api/model/mmd/upload_zipモデルパッケージをインポート
GET/api/model/mmd/models同梱、ユーザー、Workshop モデルを一覧
GET/api/model/mmd/animations同梱とユーザー VMD を一覧
GET/api/model/mmd/config公開 MMD URL プレフィックスを返す
GETPOST/api/model/mmd/emotion_mappingモデル別モーフマップを読み取りまたは保存
DELETE/api/model/mmd/model公開 URL でユーザーモデル/パッケージを削除
GET/api/model/mmd/animations/list削除可能なユーザーアニメーションを一覧
DELETE/api/model/mmd/animation公開 URL でユーザー VMD を削除

ホスト境界

MMD は / を読み込む Electron ペットウィンドウを含む、メインページのアバターサーフェスだけに描画されます。/chat/subtitle は独立ウィンドウなので、別の MMD シーンを作らずメインページと通信します。