MayaからMMD(MikuMikuDance)専用形式「PMX」を読み書きするスクリプト、「PmxIO for Maya」を公開しました。このスクリプトは、PMXの他にPMD形式の読み込みにも対応しています。
ツール名のPmxIOはベースとなったライブラリの「MeshIO」から取っています。
MeshIOはMQOやOBJにも対応しているのですが、このツールはPMX特化なのでこの名前になりました。
現状では、MayaからMMDへデータを送る数少ない方法の一つになると思います。

公式 初音ミク ver2
PyPI pymeshio
ツール名のPmxIOはベースとなったライブラリの「MeshIO」から取っています。
MeshIOはMQOやOBJにも対応しているのですが、このツールはPMX特化なのでこの名前になりました。
現状では、MayaからMMDへデータを送る数少ない方法の一つになると思います。


ダウンロード
PMXIO Ver0.11α更新履歴
- 2013/09/14 Ver0.11α with MeshIO Ver2.7.5
- 公開
インストール
一般的なPythonスクリプトと同じく、起動時にロードして使用します。- Mayaスクリプトフォルダに環境パスを通します。
- Mayaスクリプトフォルダの位置は環境によって異なります。
例えばWindows7 / Maya2014日本語版であれば、
.../Documents/maya/2014-x64/ja_JP/scripts フォルダになります。 - 環境パスの通し方は長くなるのでネットで調べてください。
- Mayaスクリプトフォルダの位置は環境によって異なります。
- Mayaスクリプトフォルダに「TrM_PMXIO.py」および「pymeshio」フォルダを丸ごとコピーします。
- MayaスクリプトフォルダにuserSetup.pyが無ければ新規に作成します。
- userSetup.pyは空のテキストファイルを作成し、拡張子を.pyに変更します。
-
userSetup.pyに以下の一文を書き加えます。
import TrM_PMXIO
-
Mayaを起動し、以下のコマンドをコマンドラインPythonモードで実行します。
TrM_PMXIO.startup()
使い方
- インポート
-
設定を入力後インポートを実行します。
- 倍率
- モデルの拡大縮小率を指定します。
- 透明度マップの接続
- シェーダーにカラーテクスチャのTransparencyを接続します。
- エクスポート
-
メッシュを選択後エクスポートを実行します。
メッシュは複数選択することもできます。
メッシュがスケルトンにバインドされていた場合、自動的にボーンもエクスポートされます。
- 倍率
- モデルの拡大縮小率を指定します。

公式 初音ミク ver2
仕様(Ver0.11α)
- インポート
-
- ファイルタイプ
-
PMX / PMD。
一部の特殊なデータ(グループモーフ等)を持ったファイルは、読み込めない事があります。
その場合、該当するデータをPMX Editor等で削除することで、読み込めるようになります。(MeshIOに準拠) - メッシュ
-
頂点座標、法線、UV1の読み込み。(UV2~4は非対応)
- ボーン
-
親子階層の保持。
- スキンウェイト
-
BDEF1~4対応。
SDEFはBDEF2扱い。
QDEFは非対応。 - マテリアル
- Blinnとして読み込み。
- テクスチャ
-
カラーマップのみサポート。
「透明度マップを接続」にチェックを入れた場合、アルファを持ったテクスチャをマテリアルのtransparencyに自動的に接続する。 - その他
- PMX内で使用される名前及びコメントを、追加のアトリビュートとして取得。
- エクスポート
-
- ファイルタイプ
- PMXのみ。
- メッシュ
-
頂点座標、法線、カレントUVの出力(UV1)。
四角形以上のフェースを自動的に三角形に分割。
頂点フェースを自動的に個々の頂点として分離。
(MMDが頂点フェースに対応してない為)
現時点では、常にWorld座標として出力。 - ボーン
-
選択メッシュにバインドされたボーンを自動的に出力。
親子階層の保持。
- スキンウェイト
-
ウェイト数に応じてBDEF1~4として出力。
ウェイト数が5以上だった場合、値の小さい方から切り捨てて正規化。 - マテリアル
- BlinnまたはLambertに対応。
- テクスチャ
- カラーマップのみサポート。
- その他
- 各ノードの追加のアトリビュートに設定された名前及びコメントを出力。
Jp Name: 日本語名
En Name: 英語名
Notes: コメント
今後の予定
- ボーンのローカル軸
- ネームスペースへの対応
- ハードエッジの分離ON/OFF
- テクスチャの自動配置
- テクスチャの拡大縮小
- テクスチャのファイル形式変換
- エッジカラーを追加のアトリビュートに取得
- 頂点単位のエッジ倍率を頂点カラーに取得,設定
- ボーンの回転,移動付与をコンストレインとして取得
- IKへの対応
- 頂点モーフの出力
- 頂点の差し替えモード
- 表示枠をセットとして取得
- プラグイン化
- ドキュメントの整備
謝辞
最後になりますが、素晴らしいライブラリを作成してくださったousttrue様に感謝の言葉をお送り致します。PyPI pymeshio
コメント
コメント一覧 (18)
最近MMDに興味を持ち、mayaから直接PMXに書き出せるエクスポーターを探していたところ、こちらにたどり着きました。
素晴らしいスプリクトだと思い、早速入れ込もうと思ったのですが、「"TrM_PMXIO.startup"が見つかりません。」
と、エラーが出てしまいます。
環境は下記のとおりです。
OS:windows XP(32bit)
Ver:maya 2009
スプリクトは自分の環境にあった任意のフォルダに配置し、userSetup.pyも上記に従い作成したのですが…。
その他、考えうる別のフォルダに入れて試しても無理でした。
スクリプトもコマンドラインの方法の他に、スクリプトエディタからのロードも試してみましたが無理でした。
これだけの情報でご判断難しいかと思いますが、ご教授よろしくお願いいたします。
でためさせてもたったのですが、
TrM_PMXIO.startup() を実行すると
# エラー: NameError: file <maya console> line 1: name 'TrM_PMXIO' is not defined #
というエラーが・・・
その後立ち上がるようになりました。
大変失礼いたしました。。
その後、かこみきさん作のアリスたんをインポートしたところ、以下のエラーが出ましたのでご報告します。
------------------------
Ver: 0.11α
Traceback (most recent call last):
File "TrM_PMXIO.py", line 1719, in _btnRunClicked
importer.importModel(filePath, scale, useAlpha)
File "TrM_PMXIO.py", line 694, in importModel
model = pmxreader.read_from_file(pmxPath)
File "reader.py", line 336, in read_from_file
pmx=read(io.BytesIO(common.readall(path)))
File "reader.py", line 362, in read
"invalid signature", signature)
ParseException: ('invalid signature', 'Pmd\x00')
MeshIOライブラリがこのファイルに対応していない可能性があります。
------------------------
開発がんばってください!
インポート出来たようで何よりです。
エラーに関しては, 内部で使っているサードパーティ製のスクリプト(ライブラリ)の仕様によるものなので, こちらでは対応出来ない可能性が非常に高いです.
一度, 対象のモデルをPMXエディタに読み込み後, PMXエディタから保存してみてください.
読み込めるようになっているかもしれません.
それでもダメな場合は, 未対応の機能を使ってしまっていると思われるので, その機能のデータをPMXEで削除すると読めるようになるかもしれません.
>>開発がんばってください!
有難うございます!がんばります!
MAYAからPMXエディタに安定して移行できる手段が見つからずに四苦八苦していたところ、こちらにたどり着きました。
ぜひ利用させていただければと思うのですがインストールが上手くいきません。
インストール手順4のTrM_PMXIO.startup()を実行すると、
# エラー: NameError: name 'TrM_PMXIO' is not defined #
と出てしまいます。何か対処法はありますか?
環境はwindows7 64bit maya2010です。
ご回答よろしくお願いします。
インストール失敗の件ですが、スクリプト内で使用している「PyMEL」という機能が2011からの搭載になるので、それが原因かと思います。
Maya2010以前に関しては少々面倒ですが、手動でPyMELをインストールしてやる必要があります。
詳しくは申し訳ありませんが、グーグルで調べるとかしてみてください。(説明がかなり長そうなので)
スクリプトも使って頂けて幸いです。
開発はまだ行っていますが、公開しようかちょっと迷っています。
というのも、作ったはいいものの細かくデバッグしている時間が無いのです・・・。
デバッグが半端な物を世に出して良いものか・・・。悩みどころです。
教えてください。
モーフの対応末永くお待ちしております!
MMDに興味を持ちMAYAで編集したいと思い途方に暮れていたいたところ、こちらにたどり着きました。
早速インストールしてみたのですが以下のようなエラーメッセージが出てしまいました。
なにか対処方法はありますでしょうか?
AttributeError: file /Applications/Autodesk/mentalrayForMaya2015/scripts/TrM_PMXIO.py line 1666: 'CheckBox' object has no attribute 'onCommand'
環境:Mac10.8.5
Maya2015
# エラー: AttributeError: file C:/Users/ijh0/Documents/maya/2016/ja_JP/scripts\TrM_PMXIO.py line 1666: 'CheckBox' object has no attribute 'onCommand'
というエラーメッセージが出ます。
環境:win10 Maya2016
>>13 nitopome様
昨日からMaya使い始めたばかりで、作者様がお返事するところで恐縮ですが、pythonスクリプトでAttributeErrorが出る場合は、パスが通ってないんじゃないでしょうか。
パスの通し方は、コントロールパネルからシステムを開いて、システムの詳細設定から、環境変数のボタンをクリックし、適当なところにパスを通す(下段のシステム環境変数のpathを選択して、編集ボタンをクリック。pathがすでにあった場合は、何らかのpathが入力されているため、その後に、[;]を入れて、TrM_PMXIO.pyが入っているフォルダのパス(C:ドライブからTrM_PMXIO.pyが入ってるフォルダまでのパス)を入力。なければ、pathを新規作成(なぜ上にPATHがあるのに、システムの方にパスを作るかというと、上の段のPATHはいろいろなソフトをインストールした時に自動的に通しているため、編集の際に間違えて入力すると、ソフトの方で不具合が発生するため、自分で編集したものを下の段で個別に編集すれば、間違えた際にわかりやすいからです))。
# エラー: NameError: file <maya console> line 1: name 'TrM_PMXIO' is not defined #
という表示が出てしまいます。
環境は、Windows10 64bit 学生版Maya2015
です。
環境パスは上記の通りに通しました。
なにか対処法はありますでしょうか。
横からですが、新しいサイトに移転されたため
そちらで公開されてますね。
コメント有り難うございます。
PmxIOですが、移転先のブログで公開していますので、そちらからダウンロードをお願いします。
http://trtools.jp/mayascript/pmxio-for-maya/