PMXの付与ボーン(回転付与・移動付与)の中身|腕捩・足D・目はこう動いている

モーションは腕捩や足のボーンを動かすだけなのに、腕捩1〜3や足Dまで一緒に回る。これはPMXの「付与」という仕組みで、ボーンがほかのボーンの回転や移動を、決まった割合で受け取っています。

最終更新: 2026-10-06 · 実PMX 3体(人物A 2体・アリシア)とステージ1つのボーンの付与の指定を、three.js同梱のパーサで読んで数えて確認

付与は「誰の動きを・どれだけ受け取るか」

付与を持つボーンは、付与親(動きを受け取る元のボーン)の番号と、割合(付与率)を持ちます。付与率が0.5なら半分だけ、1なら同じだけ、-1なら逆向きに同じだけ動きます。ボーンのフラグで「回転を受け取る」「移動を受け取る」「ローカルで受け取る」を選びます。

実物のモデルでの数

モデルボーン付与ボーン回転付与移動付与ローカル付与
人物A(ad_ik2)314535300
人物A(ad_org8)310515100
アリシア150222110
ステージ150000

ほとんどが回転付与でした。移動付与はアリシアの「舌1」(「口」の移動を0.5受け取る)の1本だけで、ローカル付与はどのモデルにもありませんでした。

何に使われているか

付与ボーン ← 付与親付与率役割
右腕捩1 右腕捩2 右腕捩3 ← 右腕捩0.25 / 0.5 / 0.75腕のねじれを肘へ向かって段階的に分ける(手捩も同じ)
右足D 右ひざD 右足首D ← 右足 など1足の回転をそのまま写す(準標準ボーン)
右目 左目 ← 両目1(アリシアは0.5)両目を1本のボーンで動かす
右目戻 ← 右目-0.7目の動きを一部打ち消す(人物A)
右肩C ← 右肩P-1肩Pの回転を打ち消して、腕から先が一緒に回らないようにする
腰キャンセル右 ← 腰-1腰の回転を打ち消す
左足親指1 など ← 左足先EX0.2〜0.8足先EXで足の指をまとめて曲げる(人物A)
左腕回転 ← 左腕0.5腕の回転の半分を受け取る補助(アリシア)

付与率が負の値の付与は、ほかのボーンの動きを打ち消すために使われています。肩Pと肩C、腰と腰キャンセルが典型です。

three.jsで動くもの・動かないもの

three.js(r171)の MMDAnimationHelper が当てるのは、ローカルでない回転付与だけです。移動付与とローカル付与は、ソースに「TODO: implement」と書かれたまま何もしません。実物の3体では付与ボーン126本のうち125本が回転付与なので、ほとんどはthree.jsでも動きます。動かないのはアリシアの「舌1」の移動付与だけです。ただし、手元のVMD 30本には「口」を動かすキーが1つも無かったので、実際の再生で差が出る場面は確かめられていません。

付与は、付与親の付与を先に計算してから子へ伝える必要があります(付与親自身も付与を持つことがあるため)。MMDLoaderは付与の親子関係から木を作り、親から順に並べ替えています。

VMDで付与ボーンを動かすと

付与ボーンにもVMDのキーを書けます。three.jsでは、キーの回転に付与で受け取った回転が掛け合わされます。実物のVMDでも、足Dを動かすキーが18本に入っていました(うち実際に回転しているのは82個中33個)。足Dを持たないモデルでは、そのキーは捨てられます(別のモデルで一部が動かない原因)。