PMDとPMXの違い|何が変わったか、どちらで配られていても再生できるか

PMDはMMD初期からのモデル形式、PMXはそれを拡張した後継です。いま配布されているモデルの多くはPMXですが、古いモデルにはPMDも残っています。このサイトのローカル再生はどちらもそのまま再生できます。

最終更新: 2026-10-05 · このサイトのPMD/PMXの読み取り処理と、three.js同梱のパーサの実装、kphp同梱の実PMX 5体(人物4体・ステージ1体)で確認

手元のモデルがどちらの形式か、何が使われているかは、PMX・PMD・VMDを調べるに入れると一覧できます。 再生だけならローカル再生にそのまま入れてください。

いちばん大きい違い: 長さが決まっているか

PMDはほとんどの項目の長さが固定です。モデル名は20バイト、コメントは256バイト、頂点は1つ38バイト、ボーン名も20バイトと決まっています。文字はShift_JISなので、全角文字は1文字2バイトです。PMXは名前を長さ付きの文字列として持ち、文字コードもUTF-16LEかUTF-8を選べます。長い名前や、Shift_JISに無い文字も書けるようになりました。

PMDPMX
ファイルの先頭Pmd + 版(小数)PMX + 版(2.0 / 2.1)
文字Shift_JISの固定長(名前は20バイト=全角10文字)UTF-16LEかUTF-8の可変長
頂点1つ38バイト固定ウェイトの種類と追加UVの数で長さが変わる
面が指す頂点番号2バイト固定(頂点は65,536個まで)1・2・4バイトから、モデルの大きさに合わせて選ぶ
ウェイト2本のボーンの比率だけ1本・2本・4本・SDEF(2.1ではQDEFも)
テクスチャ材質ごとに20バイトの欄へ tex.bmp*sphere.sph のように並べて書くテクスチャの一覧を別に持ち、材質は番号で指す
表情(モーフ)頂点を動かすものだけ頂点・ボーン・UV・材質・グループ(2.1ではフリップとインパルスも)

PMDで困りやすいところ

  • テクスチャ名が短い。 通常のテクスチャとスフィアマップの名前を * でつないで、合わせて20バイトに収める必要があります。全角なら2つ合わせて10文字です
  • 頂点は65,536個まで。 面が頂点を2バイトの番号で指すためです
  • 表情は頂点を動かすものだけ。 目の色を変える材質モーフや、ボーンを動かす表情は書けません
  • トゥーンのテクスチャは10枚の欄を固定で持ち、それぞれ100バイトの名前を入れます

PMXは「必要な大きさだけ」使う

PMXのヘッダには、頂点・テクスチャ・材質・ボーン・モーフ・剛体を指す番号を、それぞれ何バイトで書くかが入っています。実物のPMXで確かめると、数に合わせて選ばれていました。 ボーンが314本ある人物モデルではボーン番号が2バイト、15本しかないステージでは1バイトです(1バイトの番号は127までしか指せません)。

モデル頂点ボーンモーフ剛体番号のバイト数(頂点 / ボーン / モーフ / 剛体)
人物A(2体)約4万310〜314157〜1591412 / 2 / 2 / 2
アリシア22,31115063792 / 2 / 1 / 1
ステージ4,66915802 / 1 / 1 / 1

実物のPMXで、PMXだけの機能はどれくらい使われているか

5体とも版は2.0、文字コードはUTF-16LE、追加UVは0でした。PMXにしかない機能のうち、実際に使われていたのは次のものです。

  • SDEF(球面変形)のウェイト: 人物Aの2体で、頂点の6〜8%(2,410個・3,132個)。9割近くはツインテールの髪の節に使われていました
  • 4本のボーンにまたがるウェイト(BDEF4): アリシアで3,332個(15%)、人物Aで約1,500個
  • 材質モーフ: 人物Aで55〜62個、アリシアで4個。PMDでは書けない種類です
  • ボーンモーフ・UVモーフ: 人物Aとステージで少数

このサイトの再生(three.jsのMMDLoader)は、SDEFを2本のボーンの比率(BDEF2)として扱います。SDEFを指定した関節の曲がり方は本家MMDと厳密には一致しませんが、読み込めなかったり崩れたりはしません。

PMDをPMXにしたほうがよいか

再生するだけなら変える必要はありません。このサイトはPMDをそのまま読み込みます。名前の長さやモーフの種類で困ったとき、またはPMXでしか書けない機能を足したいときに、PMXエディタで開いてPMXとして保存し直してください。