PMDとPMXの違い|何が変わったか、どちらで配られていても再生できるか
PMDはMMD初期からのモデル形式、PMXはそれを拡張した後継です。いま配布されているモデルの多くはPMXですが、古いモデルにはPMDも残っています。このサイトのローカル再生はどちらもそのまま再生できます。
手元のモデルがどちらの形式か、何が使われているかは、PMX・PMD・VMDを調べるに入れると一覧できます。 再生だけならローカル再生にそのまま入れてください。
いちばん大きい違い: 長さが決まっているか
PMDはほとんどの項目の長さが固定です。モデル名は20バイト、コメントは256バイト、頂点は1つ38バイト、ボーン名も20バイトと決まっています。文字はShift_JISなので、全角文字は1文字2バイトです。PMXは名前を長さ付きの文字列として持ち、文字コードもUTF-16LEかUTF-8を選べます。長い名前や、Shift_JISに無い文字も書けるようになりました。
| PMD | PMX | |
|---|---|---|
| ファイルの先頭 | 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〜314 | 157〜159 | 141 | 2 / 2 / 2 / 2 |
| アリシア | 22,311 | 150 | 63 | 79 | 2 / 2 / 1 / 1 |
| ステージ | 4,669 | 15 | 8 | 0 | 2 / 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として保存し直してください。