拙作エクスポーターでPMXをうまくエクスポートできない場合の対処法をまとめました。
実は大半が自分の経験談だったりします^^;ナンテコッタイ
最終更新日: 2015/09/17
- PMXEやMMDがフリーズする
- 頂点が引っ張られたような位置にある
- エラーでエクスポートできない
- エクスポートが重い
- ボーン名に日本語を使えない
1. PMXEやMMDがフリーズする
(トラブルの内容)
エクスポートしたPMXをPMXEやMMDに読み込むと、プログラムがフリーズしてしまう。
エクスポートしたPMXをPMXEやMMDに読み込むと、プログラムがフリーズしてしまう。

(対処法)
メッシュオブジェクトにある孤立した頂点を削除してください。
メッシュオブジェクトにある孤立した頂点を削除してください。
エラーの原因はメッシュオブジェクトの中に面を構成しない頂点があることです。本来、このような頂点はPMX2.0の仕様としてあってはならないものなのですが、拙作エクスポーターは平気でこのような頂点も出力してしまいます(なんてお馬鹿)。
Blenderで面を構成しない頂点を削除する手順は、次のとおりです。
- 編集モードで頂点を全選択する。
- ヘッダーメニューの「メッシュ」=>「クリーンアップ」=>「孤立を削除」(Delete Loose)を実行する。

削除する前にどの頂点が孤立した頂点になっているのか確認したい場合は、こちらの記事のスクリプトを試してみてください。
2. 頂点が引っ張られたような位置にある
(トラブルの内容)
エクスポートしたPMXをPMXEのTransformViewやMMDに読み込むと、頂点が引っ張られたような位置にある。
エクスポートしたPMXをPMXEのTransformViewやMMDに読み込むと、頂点が引っ張られたような位置にある。

(対処法)
頂点のボーン変形グループの合計を4以下にしてください。また、それらのウェイトの合計が1になるようにしてください。
エクスポート時にSubsurfモディファイアを適用している場合は、細分化の際に生成される頂点のウェイトが上記に反しないように、周囲の頂点のウェイトを調整してください。
頂点のボーン変形グループの合計を4以下にしてください。また、それらのウェイトの合計が1になるようにしてください。
エクスポート時にSubsurfモディファイアを適用している場合は、細分化の際に生成される頂点のウェイトが上記に反しないように、周囲の頂点のウェイトを調整してください。
エラーの原因はBDEF4のウェイト合計が1.0でないことです。次のようなケースでこの問題が発生します。
- 頂点のボーン変形グループの合計が3または4で、そのウェイト合計が1.0でない場合
- 頂点のボーン変形グループの合計が5以上ある場合
Blender上でボーン変形グループ数を制限するには、ウェイトペイントでヘッダーメニューの「ウェイト」=>「合計を制限」(Limit Total)を実行してください。ツール・シェルフにもあります。また、「すべてを正規化」(Normalize All)を実行することで、頂点ごとのウェイト値の合計を1.0にすることができます。
いずれも、オペレーターでオプションを指定する必要があります。


使用部分は「デフォームポーズボーン」、なければ「全グループ」を選択します。
このような機械的な処理では満足できないという場合は、頂点を一つ一つウェイト調整することになります。こちらの記事のスクリプトを使うと、ボーン変形ウェイトの合計が制限を超えている頂点を見つけ出すことができます。
エクスポート時にSubsurfモディファイアを適用している場合は厄介です。一見、どの頂点も4ボーンで正規化されているようでも、細分化により生成される頂点のグループ数が制限を超えてしまう場合があるからです。下図を見てください。

隣接する頂点の頂点グループが異なるとき、Subsurfの適用によって生成される頂点はそれらを混合したものになります。その結果、グループ数が増えています。グループ数が制限を超えないようにするには、隣接する頂点のグループ数を減らすしかないでしょう。
私は、テスト用にオブジェクトを複製し、複製したほうのSubsurfを適用した上で上記記事のスクリプトを実行して制限超過の頂点を見つけ、元のオブジェクトに戻って頂点グループを割り当てし直すという地道な作業をやっています(作業後に複製オブジェクトは削除します)。
あるいは、もうSubsurfだけ適用してしまい、ウェイトの制限と正規化を実行しちゃったほうが楽なのでしょうが・・・
3. エラーでエクスポートできない
(トラブルの内容)
エクスポートを実行すると、エラーが発生し、PMXをエクスポートできない。
エクスポートを実行すると、エラーが発生し、PMXをエクスポートできない。

(対処法)
バージョン2.74以降のBlenderをお使いください。
バージョン2.74以降のBlenderをお使いください。
Blenderはバージョン非対応のアドオンでもインストールはできてしまうので、上図のようなエラーが発生する場合があります。
拙作エクスポーターはカスタム法線が利用可能になったバージョン2.74以降に対応しています。これより前のバージョンをお使いの場合は、Blenderを更新してください。
最新のBlenderを使っているというのにエラーが発生する、という場合は、もはやスクリプトのバグです。システムコンソールにどのようなエラーが表示されているか、コメントでお教えいただくと大変助かります。
4. エクスポートが重い
(トラブルの内容)
エクスポートが終了するまでに時間がかかりすぎる。
エクスポートが終了するまでに時間がかかりすぎる。
(対処法)
オブジェクトを分割し、シェイプキーを必要なオブジェクトにだけ作成してください。ただし、この手法には副作用があるので要注意。
オブジェクトを分割し、シェイプキーを必要なオブジェクトにだけ作成してください。ただし、この手法には副作用があるので要注意。
エクスポートで一番時間がかかるのは、シェイプキーの処理です。拙作エクスポーターはシェイプキーごとにメッシュを複製し、その全頂点を対象に変形の有無を確認します。したがって、モデル全体を一つのオブジェクトにしている場合には、シェイプキーの数×モデル全頂点数という回数の処理が行われます。
もしシェイプキーで顔の表情を作成しているだけであれば、顔だけ別オブジェクトにすれば、シェイプキーの数×顔オブジェクトの頂点数という回数でシェイプキーの処理が済みます。
ただし、オブジェクトの分割には別の問題が生じます。モデルの総頂点数が増え、二つのオブジェクトの境界が目立ち、その上、リンクが面倒などBlender上での運用にも難があります。そもそも、シェイプキーが作成済みの場合、オブジェクトの分割は手間がかかります。これらの副作用等を考慮した上で、オブジェクトを分割するかどうか判断してください。
なお、Python 3.5では拙作エクスポーターが多用するcollections.OrderedDictが4倍から100倍速くなるそうです。もし将来BlenderのスクリプトエンジンにPython 3.5が採用されたら、拙作エクスポーターの処理時間も少しは速くなるかもです。
5. ボーン名に日本語を使えない
(トラブルの内容)
Blender上でボーン名に日本語を使えないので、エクスポートしたPMXをPMXEで日本語化する作業が面倒だ。
Blender上でボーン名に日本語を使えないので、エクスポートしたPMXをPMXEで日本語化する作業が面倒だ。
(対処法)
マニフェスト(設定ファイル)にボーン名を変換する辞書を用意してください。日本語化はエクスポート時に自動化されます。
マニフェスト(設定ファイル)にボーン名を変換する辞書を用意してください。日本語化はエクスポート時に自動化されます。
バージョン2.73になってBlenderはWindows環境で日本語入力が可能になりましたが、まだ日本語入力ができない環境もあるようです。そもそも言語設定を英語にしてBlenderを使っているという方も多いです。ボーン名などに日本語を使うのは、一般的とは言えません。
そこで、拙作エクスポーターはエクスポート時にボーン名などの名称を変換する機能を用意しています。この機能を使うためには、変換用の辞書をマニフェストに設定しなければなりません。
manifest.txtという名前のテキストファイルがエクスポート先に存在すると、エクスポート用のマニフェストとして扱われます。変換用の辞書の設定例を以下に示します。
[DEFAULT]
dict: DICTIONARY
[DICTIONARY]
neck: 首
head: 頭
左eye: 左目
右eye: 右目
DEFAULTというセクションは、PMXファイル名に依存しない設定を追加する場合に使用します。特定のPMXファイルに限定した設定は、[PMXファイル名]というセクションを使ってください。この場合のファイル名に拡張子は含みません。
dictというキーに辞書用のセクションを指定します。上の例ではDICTIONARYセクションを指定しています。辞書用のセクションには、変換対象となる名前をキーにして、変換後の名前を「:」の後に続けます。上の例を見てわかるとおり、左右のマーカー(.Lなど)は「Rename Bones」オプションが有効のときは既に変換されている前提でキーを指定します。
辞書を用意する場合は、次の3点に注意してください。
- マニュフェストを適切な文字コードで保存してください(環境に依存)。
- 辞書はボーン名だけでなく、モーフや材質、表示枠の名前の変換にも利用されます。
- 辞書にキーの重複があると、エラーが発生します。
なお、エクスポートの結果が名称によって変化するような項目(角度制限の上限など)では、デフォルトでRigifyアドオンの「Human(Meta-Rig)」や標準ミクの英語名に準拠した名称にも対応するようにしています。さらに独自の名称に対応させることも、マニフェストの設定で可能です。詳しくは、README.txtをご覧ください。