PMXのUVモーフとボーンモーフ|表情パネルで動かしても変わらない残りの2種類
表情の一覧に「表情1」「ヘッドセットLED」「B首長さ」のような名前があるのに、動かしても何も変わらない。頂点モーフ・材質モーフ以外の、UVモーフとボーンモーフという種類です。
このサイトの再生と表情パネルは、2026-10-06からUVモーフを当てています。 ボーンモーフはまだ当てていません(下記)。
UVモーフは「テクスチャの貼り方をずらす」
UVモーフ(種別3)は、頂点ごとにテクスチャ座標(UV)をずらす量を持っています。形は変わらず、同じ面に貼る画像の位置だけが動きます。 1枚のテクスチャに表情の絵を何種類か並べておき、UVをずらして切り替える、という使い方ができます。
| モデル | UVモーフ | 中身 |
|---|---|---|
| 人物A(ad_ik2) | 8 | 「表情1」「表情2」(顔の1,141頂点)、「旧瞳」(218頂点)、LED 5つ |
| 人物A(ad_org8) | 8 | 同上 |
| アリシア | 0 | — |
| ステージ | 1 | 「全体広く(UV)」(8頂点)。頂点モーフと組にしたグループモーフの子 |
人物Aの「表情1」は顔の1,141頂点のUを0.5、「表情2」は同じ頂点のVを0.5ずらします。顔のテクスチャの別の区画へ切り替わる作りです。「ヘッドセットLED」などの5つは、LEDの部分だけを横へ少しずらして(-0.149〜0.104)、光り方の違う絵に当てています。
このサイトで当てた結果
three.js(r171)のMMDLoaderは、UVモーフの分岐を「TODO: implement」のまま空にしています。このサイトでは、描く直前に表情の重みを読み、元のUVに「ずらす量 × 重み」を足して書き戻すようにしました。グループモーフの子にUVモーフがある場合も、グループの重みを掛けて当てます。
人物Aで確かめると、「表情1」で1,752画素、「表情2」で28,738画素、「ヘッドセットLED」で821画素が変わりました。重みを0へ戻すと、元の画面と1画素も違いません。
ボーンモーフは「ボーンを動かす表情」
ボーンモーフ(種別2)は、ボーンごとに移動量と回転を持ちます。体型の調整や、ヒールの高さに合わせた立ち位置の補正に使われます。実物では次のとおりでした。
| モデル | ボーンモーフ | 動かすもの |
|---|---|---|
| 人物A | 「B首長さ」 | 頭を0.1下げる |
| 人物A | 「B巨乳」「Bちっぱい」 | ネクタイ親を前後へ動かす |
| 人物A | 「Bヒール透明」 | 全ての親を0.8下げ、つま先IK・足先EX・髪IKなど9本を動かす |
| ステージ | 「柵移動」 | 柵一括移動を20動かす |
どれも単独ではなく、グループモーフの子として使われていました。 人物Aの「首長さ」は頂点モーフ「V首長さ」とボーンモーフ「B首長さ」の組、「ヒール透明」はボーンモーフと材質モーフ「Mヒール透明」の組です。ステージの「ステージ広く」も頂点モーフと「柵移動」の組でした。表情パネルで動かすのはグループのほうで、形を変える分とボーンを動かす分が一緒に効く作りです。
- このサイトの再生は、ボーンモーフをまだ当てていません。 グループモーフを動かすと、子のうち頂点モーフ・材質モーフ・UVモーフの分だけが効きます。
- ボーンモーフは、モーションの値を当てたあと、IKを解く前に足す必要があります。three.jsの再生の流れ(モーションを当てる → IK → 付与)のあいだに差し込む場所が要るため、別に取り組みます。