pmxファイルの作成
blenderからMikuMikuDance用のpmxファイルを作成する方法をざっくりと記載
ソフトウェアの準備
Blender2.62をインストール (Pythonは不要)
※2.63は5/21現在非対応
※エクスポータだけ2.63aで使えるように私の方でなんちゃって修正したやつ→Blender2Pmx_i1.21_e1.22a.zip
(まともに修正出来てるとは思えないのでバグが怖い人は本家待ってください)
http://u7.getuploader.com/Yjo_oi_Neg/
からblender2pmx.zipをダウンロード
「C:\Program Files\Blender Foundation\Blender\2.62\scripts\addons」にフォルダごと入れる。
Blenderを起動してFileからUserPreferencesを選択

AddonsタブからInport-Exportを選択

MMD PMX Formatを一覧から探しチェックを付けてSave As Defaultボタンを押す

入出力
ファイル>インポート>PMX file for MMD(.pmx)
・インポートするとxmlファイルがpmdと同じフォルダ内に生成される
ファイル>エクスポート>PMX file for MMD(.pmx)
・エクスポートする際は同名のxmlと各種テクスチャを同じフォルダに配置(例:test.blend・test.xml・eye.bmp)
・書き出し時はArmatureを選択してから行う。
・pmdエクスポータと座標系・モデルサイズ・色が違うのでpmd時に使ったデータを流用する場合は注意
XMLファイル内の説明
materials
| xml |
PMDE |
説明 |
| b_name |
|
Blender上のマテリアル名 |
| both |
両面描写 |
pmd時の透明度0.999と同じ |
| ground_shadow |
地面影 |
地面に影を落とす |
| drop_shadow |
セルフ影マップ |
自分に影を落とす(他の素材) |
| on_shadow |
セルフ影 |
自分に影を落とす(同一素材) |
| on_edge |
エッジ(輪郭) |
輪郭線の表示 |
| edge_size |
エッジ(輪郭) |
輪郭線の太さ |
| toon |
toon |
toon指定0でtoon01.bmp |
| use_systemtoon |
|
ユーザー作成toon使用toon値にファイル名指定 |
| edge_color |
エッジ(輪郭) |
輪郭線の色、Aは透明度 |
bones
| xml |
PMDE |
説明 |
| b_name |
|
Blender上のボーン名 |
| name |
ボーン名 |
ボーン名(日) |
| name_e |
ボーン名 |
ボーン名(英) |
| rotatable |
回転 |
回転する |
| movable |
移動 |
移動する |
| ik |
IK |
IKボーンの場合1 |
| visible |
表示 |
表示する |
| operational |
操作 |
操作する |
| target |
Target |
b_name指定 |
| add_rot |
回転+ |
ターゲットの回転に連動 |
| add_move |
移動+ |
ターゲットの移動に連動 |
| power |
付与率 |
連動具合(1で100%) |
| fixed_axis |
軸制限 |
捩ボーン |
| local_axis |
ローカル軸 |
ローカル軸を作成する |
仕様
モデルサイズは1BU=1ミクセルで出力される
・1ミクセルはMMDの1マスでミクの身長から1ミクセルは40cmと推測される
・アクセでDirectX Exporterを使いXファイルを出すと1BU=2ミクセルになるため注意
四角面はエクスポートすると三角面に変換されるため変に変換される箇所は先に三角にしておく
マテリアルは色(Col)→Diffuse、光沢(Spe)→Specularになる。
Ambientはカスタムプロパティでプロパティ名「Ambient」を追加、プロパティ値に「[0.5, 0.5, 0.5]」のように入れる
(ない場合は自動計算された値が入る)
画面上の色から取得する場合はPMDColorCalcなんかを使うと便利
(PMDColorCalcが見つからない方のためにこのサイトにもVer1.5のやつを置いておきました→PMDColorCalc Ver 1.5)
エクスポート時に面UVから頂点UVに変換されるためくっついていないUVマップの境界は頂点が2倍になる
blender上では法線が裏返しでも見えるがMMD上で片面の場合は見えないため外向きになるように修正する
物理設定はBlender上で出来ないがインポートした際に剛体とジョイントはXMLに保存されて出力時に一緒に出力される
MMDのボーン名は15バイト(半角15文字、全角7文字)まででそれ以上の場合は、
エクスポータでPMDが出来たとしても MMDで読み込んだ際にMMDが落ちる
SDEFは非対応(Blenderはオブジェクト単位、MMDは頂点単位のため)(インポート時はBDEFに変換される)
素材モーフ非対応(xmlには記載されるが取り込めない)
UVモーフ非対応(xmlには記載されるが取り込めない)
生成されるファイル(xml、pmx)の上書き確認はないので注意(同名ファイルは強制上書き)
スフィアはテスクチャの2行目に追加する、テクスチャがなくスフィアのみの場合は1行目にタイプなしの空テクスチャを入れる
ブレンドがミックスで乗算(旧sph)、追加で加算(旧spa)になる
ローカル座標値非対応(ローカル座標を使うかどうかの判定のみ対応)
不具合や注意点など(2011/12/18現在)
ボーンを選択してからエクスポートを実行しないとエラーになる。
マテリアルの設定されていない頂点があると書き出しに失敗する。
頂点がないオブジェクトが存在しているとエラーになる。
どこにも割り当てられていないマテリアルがあるとエラーになる。
取り込み時ShapeKeysがbasisになっていないので編集する際は注意
回転のみのボーンはポーズモードでボーンのlocationのXYZをロックすると回転のみになる
(ただしxmlでmovable値指定の場合はそちら優先)
テクスチャのファイルパスは無しか下層フォルダでないと反映されないので注意
IKの角度制限はInversKinematicsで設定可能だがYがZにZがYに反映される不具合あり
(BlenderのXYZを単純にMMDのXYZに入れてると思われる)
ローカル軸がおかしくなる不具合があるためPMDEで修正必要
(MMDはボーンの向きが+Xになるはずが出力したのは-Yになる)
IKのLoop値はIKボーンのCustom Propertiesで「IKLimit」「IKLoops」という値を作成して設定する
(例:足IKLimit=2 IKLoops=40 つま先IKLimit=4 IKLoops=3 )
モーフ<morphs>と表示名<labels>が一致しないとおかしくなる不具合あり
モーフ数が多いと処理できない
物理設定をxml上で編集する場合は<rigid_bodies>のindexを<constraints>のbody_A・body_Bに割り当てればよいが
<rigid_bodies>のindexが8でindex0〜7がない場合はbody_A=8ではなくbody_A=0になるので注意
(※rigid_bodiesのindexを0から振りなおしておけばまず問題ない)
出力後PMDEで行う作業
ボーンのローカル座標設定
肩、腕、ひじ、手首それぞれ選択してローカル軸ボタンをONしたの「>」を押す
SDEF化
対象の頂点を選んで
編集>ウエイト関連>選択頂点をSDEF設定
※ただし親子でボーンが繋がってない場所はSDEF化されない
UVモーフ
モーフリストで右クリック>新規モーフ追加>頂点/UV
モーフ編集画面で種類を頂点からUVへ
子窓の「絞」から「頂点/材質マスキング」を開き「材質」で変更する材質のみチェック
画面で頂点を範囲指定
子窓の「動」から「オブジェクト操作」を開き「UV」タブの移動Vを押したままマウスを動かす(Vが縦、Uが横)
モーフ編集に戻り新規追加ボタンを押す(続けて作成はいいえ)
材質モーフ
モーフリストで右クリック>新規モーフ追加>材質
材質タブで変更したい材質を選択し右クリック>indexコピー
モーフタブに戻り先ほど作成した材質モーフのオフセットの下にある空欄を右クリック>「indexコピーから追加」
編集ボタンを押して編集
ボーンモーフ
まだ使ったこと無いのでパス
モーフのグループ化
複数のモーフを選んで右クリック>グループモーフにまとめる
小ネタ
アイテムなどを消す方法その1:体の中に隠す
袖やブーツなどを消したい場合ただ小さくするだけだと動かした際にウエイトの関係で飛び出してしまう
足首とひざの2種類のウエイトがある頂点を隠したい場合は足首とひざボーンの接続部分に納めると変形の影響がほとんど無い状態になる
アイテムなどを消す方法その2: セルフ影付き素材の消去
材質モーフの加算で素材色のAを「-0.02」エッジA「-1」・・・(素材色のA値が0.98で他の材質へ影を落とさない)
UVにあらかじめ透明箇所を作っておきUVモーフで透明箇所に移動させる
この二つをグループ化させる
リボンなどの物理をつける箇所を作成する場合のコツ
最初から垂れた状態で形状を作ってしまうと剛体設定で角度制限などが厳しくなり動きがぎこちなくなる
無重力状態の位置で作成して剛体で垂れた状態になるようにすると動きのある剛体設定が出来る
モーフを非表示化する
PMDEでモーフを選択してCtrl+C、メモなどに貼り付けて2行目の後ろから2個目を0にする
その内容をすべて選択してCtrl+C、元のモーフにCtrl+Vで貼り付ける
例:「Morph,"あ","a",3,1」→ 「Morph,"あ","a",0,1」
エクスポータで扱えるモーフの場合はXMLで0にしておけば非表示で出力される
|