Maya用スクリプト、PmxIO for Mayaを配布します。
PmxIOはMMD(MikuMikuDance)用モデルデータ、PMXファイルをMayaで読み書きする為のスクリプトです。
スクリーンショット
ダウンロード
PmxIO_for_Maya_v0.50b.zip (100.5 KB)インストール方法
- ダウンロードしたZipを解凍してください。
-
解凍した中に入っているpmxioフォルダを任意のフォルダに移動します。
移動先のフォルダは何処でも良いのですが、Pythonパスを通す必要があります。
一般的にはMayaのスクリプトフォルダ等がよく使われます。
../Documents/maya/2017/ja_JP/scripts
等 -
コピー先のフォルダ(pmxioの一つ上のフォルダ)にPythonパスを通します。
Pythonパスの通し方はネットで調べれば色々とやり方がヒットしますが、ここでWindows7での設定方法を紹介しています。 -
Pythonパスの設定が終わったら、OKを押して設定画面を全て閉じ、Mayaを起動します。
-
Mayaのコマンドシェルフに以下のPythonコードを登録します。
import pmxio
pmxio.run()
シェルフボタンをクリックして、無事PmxIOが起動すれば完了です。
仕様
以下は主にver0.11aでの仕様になります。
最新版のver0.50bの仕様については追々追加していきます。
また、動作はMaya2017日本語版にて確認しています。
インポーター
区分 | 説明 |
---|---|
ファイルタイプ | PMX / PMD 一部の特殊なデータ(グループモーフ等)を持ったファイルは、 読み込めない事があります。その場合、該当するデータを PMX Editor等で削除することで読み込めるようになります。 |
メッシュ | 頂点座標、法線、UV1の読み込み(UV2~4は非対応) |
ボーン | 全て通常ボーンとして読み込み |
スキンウェイト | BDEF1~4対応 SDEFはBDEF2扱い QDEFは非対応 |
マテリアル | Blinnとして読み込み |
テクスチャ | カラーマップのみサポート 「アルファを接続」にチェックを入れた場合、 アルファを持ったテクスチャをマテリアルのtransparencyに接続する |
その他 | PMX内で使用される名前及びコメントを追加のアトリビュートとして取得 |
エクスポーター
区分 | 説明 |
---|---|
ファイルタイプ | PMXのみ |
メッシュ | 頂点座標、法線、カレントUVの出力(UV1) 四角形以上のフェースは三角形に分割 頂点フェースを自動的に個々の頂点として分離(MMDが頂点フェースに対応してない為) 現時点では常にWorld座標として出力 |
ボーン | 選択メッシュにバインドされたボーンを自動的に出力 |
スキンウェイト | ウェイト数に応じてBDEF1~4として出力 ウェイト数が5以上だった場合、値の小さい方から切り捨てて正規化 |
マテリアル | BlinnまたはLambertに対応 |
テクスチャ | カラーマップのみサポート |
モーフ | ベースメッシュ名をプリフィックスに持つ名前のメッシュをモーフとして扱う 例) ベース: Face モーフ: FaceSmile1 ベースとモーフメッシュの頂点数は一致している必要がある |
その他 | 各ノードの追加のアトリビュートに設定された名前及びコメントを出力 Jp Name: 日本語名 En Name: 英語名 Notes: コメント |
謝辞
最後に、PmxIOはPythonライブラリPyMeshIOを使用して作成しています。
また、配布するパッケージ内にPyMeshIOのソースコードを同梱しています。
素晴らしいライブラリを作成してくださった作者様にこの場を借りてお礼申し上げます。
MeshIOプロジェクト
ツイッターで連絡させていただきましたリッツです。
こちらのツールについて、更新楽しみにしておりました。
誠にありがとうございます。
MMDをmayaと互換性を持たせることで3DCGに興味のある。専門学生や大学生などの3Dアニメーターが直面するモデル不足に対しての解決や、
ハードルをグッと下げて頂けると、僕自身感じており、とても感謝しております。
ありがとうございました。
こちらこそ、使って頂いてありがとうございます!
要望とかも可能な範囲で受け付けますので、何かあったらご連絡ください。
専門学校CG科学生です。
おかげさまで私の作品と他人の作品と比べて学んでいます。
ありがとうございます。
コメント有り難うございます!
そう言って貰えると作って良かったと思えます。
ありがとうございます!
お久しぶりです。
現在MMD用のキャラー作ってますがMaya 2018で作業してます。
マテリアルやリギングなどモデル自体をどう書き出しすればいいんですか
MMDモデルをMayaで開く方法を調べていて、いまいち理解できず困っていたところ知恵袋からこちらのブログに飛んできました!
Pythonパスというものを設定しないといけなかったんですね(;´・ω・)
あなた様のおかげでまた一つ賢くなれました(`・ω・´)b
掲載ありがとうございました。
コメント有り難うございます!
知恵袋・・・でしょうか。どんな質問だったか気になります。
何はともあれ、お役に立てて幸いです!
アップデートありがとうございます!!
モーフ対応待ち望んでいました。
とても助かります。
本当にありがとうございました。
コメント有り難うございます!
ちゃんと動いていれば良いのですが・・・
動いてなかったら教えてください!
ああ、2ヵ月遅れでしたがようやく更新に気づくことができました、ありがとうございます!
あなたの作ったツールのお陰でmayaでモデルを作り、MMDに送り出すことができました、感謝してもしきれません。
コメント有り難うございます!
こちらも、スクリプトを使って貰えて嬉しいです。
使っていて、何かバグなどありましたら教えてください。
import pmxio
pmxio.run()
# pymel.internal.factories : MFnDagNode.model is deprecated
# pymel.core : Updating pymel with pre-loaded plugins: Fur, modelingToolkit, OpenEXRLoader, DirectConnect, AbcImport, mayaHIK, ikSpringSolver, tiffFloatReader, AbcExport, VectorRender, ArubaTessellator, quatNodes, mayaCharacterization, gpuCache, rotateHelper, Substance, MayaMuscle, AutodeskPacketFile, autoLoader, retargeterNodes, fbxmaya, matrixNodes, sceneAssembly, ik2Bsolver
# 警告: pymel.internal.factories : could not create a PyNode for manipulator type nexManip #
# エラー: AttributeError: file C:\Users\(アカウント名)\Documents\maya\2014-x64\ja_JP\scripts\pmxio\gui.py line 173: ‘CheckBox’ object has no attribute ‘setChangeCommand’ #
フォルダの配置や「http://trtools.jp/windows/windows7-pythonpath/」を参照しても、上記のエラーしか出ず、起動出来ません。maya 2014(学生版)、Win8.1といった環境で、このスクリプトは使用できないのですか?
maya 2015(学生版)、Win8.1で無事開くことができました。maya2014以前には対応してなかったみたいですね…。
ありがとうございます。
すいません今日導入しようと思ったんですが全然できなくて困ってます
わかりやすい動画とかってありますかね
はじめまして
MMDモデルのインポートに関して質問があります
ジョイント方向の設定もしくは変更することは可能でしょうか?
リグを付けたくてもローカル軸だと難しのです
ヨモギ様は実際に動かす際にはどのようにやっているのですか?
エラー報告
>> とあるモデル.pmx
インポートを開始しました。
# 警告: エラーが発生しました。————————————- #
# 警告: Ver : 0.50b #
# 警告: Lang: #
# 警告: Traceback (most recent call last):
File “gui.py”, line 471, in runBtn_Clicked
self.runImport()
File “gui.py”, line 425, in runImport
importer.run(path, setting, self.putMsg)
File “importer.py”, line 328, in run
model = reader.read_from_file(filePath)
File “reader.py”, line 336, in read_from_file
pmx=read(io.BytesIO(common.readall(path)))
File “reader.py”, line 392, in read
rigidbody_index_size
File “reader.py”, line 28, in __init__
“extended uv is not supported”, extended_uv)
ParseException: (‘extended uv is not supported’, 3)
#
# 警告: MeshIOライブラリがこのPMX/PMDファイルに対応していない可能性があります。 #
# 警告: —————————————————— #
————————————————
おねがいします
コメント有り難うございます。
こちらのエラーですが、PmxIOが使用出来ないデータがPMXファイルに含まれている時に発生します。
大変申し訳ありませんが、こちらは仕様となります。
エラーログを見ると、拡張UVが読み込めていないみたいなので、PMX Editor等で拡張UVを削除して再度読み込んでみてください。
手順5のコードを入力すると
# エラー: ImportError: file line 11: No module named pmxio.trutils.maya #
import pmxio
pmxio.run()
# エラー: ImportError: file line 1: No module named pmxio #
とエラーコードが表示されます。解決策を教えていただきたく存じます。
うまくスクリプトを読み込めていないみたいです。
申し訳ありませんが、原因不明です。
単純に設定がうまくいっていないか、Mayaのバージョンの問題かもしれません。
このような便利なスクリプトを配布していただき、ありがとうございます。
こちらの最新版を、以前通りmaya2014でも動作できるようにする方法はあるのでしょうか?
2014で読み込めてなかったんですね・・・。
自分の環境では2014が使えないので、時間が空いたらインストールして確認してみようと思います。
ピンバック: MayaNote – Hello,World!
はじめまして。
このようなスクリプトを配布していただきありがとうございます。
質問なのですがこのスクリプトはMaya2018でも使用できますでしょうか。
ご返事いただけると幸いです!
ピンバック: 【Maya】MMDモデル(PMX)をインポートする方法 | CGメソッド
はじめまして。
このようなスクリプトは通常使用できないようなモデルをMAYAで使用することができ、就職活動用の作品を制作するにあたって大きなモチベーションとなっています。本当にありがとうございます。
ただ、MAYA2018には完全に対応してないのか、マテリアルが読み込まれません。対処法などありましたら、返信頂けると幸いです。
バグ報告です
# 警告: エラーが発生しました。————————————- #
# 警告: Ver : 0.50b #
# 警告: Lang: #
# 警告: Traceback (most recent call last):
File “gui.py”, line 473, in runBtn_Clicked
self.runExport()
File “gui.py”, line 456, in runExport
exporter.run(path, transes, setting, self.putMsg)
File “__init__.py”, line 31, in run
model = Model(transes, direc, setting, msgCallback)
File “mesh.py”, line 349, in __init__
mesh = Mesh(trans, boneFact, matFact, indexOffset, setting)
File “mesh.py”, line 191, in __init__
meshData = MeshData(trans, setting.skinMinWeight)
File “mesh.py”, line 48, in __init__
self.joints, self.weights = self._getSkinWeights(mesh, minSkinWeight)
File “mesh.py”, line 69, in _getSkinWeights
minSkinWeight, normalize)
File “skin.py”, line 165, in compressWeights
s = reduce(redFunc, vertWeights)[1]
TypeError: reduce() of empty sequence with no initial value
#
# 警告: —————————————————— #
.pmxをPmxIO for Maya ver0.50bでインポートした後、エクスポートしようとしたときに発生したものです。
申し訳ありません。自己解決しました。こちらのデータの不備なのでお気になさらず
度々申し訳ありません。
ボーンとスキンの関係がぐちゃぐちゃ(ズレる?)のですがボーンは何を基準に参照しているのでしょうか?
(Mayaではボーン1に紐づけられていたスキンオブジェクトが、出力したPmxではボーン2に紐づけられているといった感じです)
ウェイト値は問題なく変換されています。
コメントありがとうございます。
ウェイトですが、メッシュにバインドされたスキンクラスターを参照していたとは思うのですが、何分作ったのが随分前なのと、現在自分がMayaを使っていない(購入してない)ので、状態を確認出来ません…。
一度スキンウェイトをスクリプト等で外部に書き出して、ヒストリの削除などを行って再バインド、ウェイトのインポート等すれば治るかもしれません。
いつも大変ありがたく使わせていただいております。
1点要望があります。
書き出し時の材質の順番をMaya側から制御できるようになると助かります。
お手すきの際にご一考いただけたら幸いです。
コメント有難うございます。
PmxIOはあまり更新出来ていませんが、更新する機会があれば参考にしたいと思います。
このようなエラーがでてしまいエクスポートが使えません。
解決策がありましたら教えていただけるとありがたいです・・・。
エラーが発生しました。————————————-
Ver : 0.50b
Lang:
Traceback (most recent call last):
File “gui.py”, line 473, in runBtn_Clicked
self.runExport()
File “gui.py”, line 456, in runExport
exporter.run(path, transes, setting, self.putMsg)
File “__init__.py”, line 31, in run
model = Model(transes, direc, setting, msgCallback)
File “mesh.py”, line 349, in __init__
mesh = Mesh(trans, boneFact, matFact, indexOffset, setting)
File “mesh.py”, line 191, in __init__
meshData = MeshData(trans, setting.skinMinWeight)
File “mesh.py”, line 43, in __init__
res = self._getSeparatedIds(mesh)
File “mesh.py”, line 150, in _getSeparatedIds
poIds[i] = ids[0]
TypeError: ‘NoneType’ object has no attribute ‘__getitem__’
——————————————————
申し訳ありません、こちらで解決いたしました。
もう一つ疑問点が生じたのですが、エクスポートしたpmxをPmxEditorで読み込むと
元のテクスチャより、テクスチャの明るさが暗くなった状態で表示されてしまいます。
解決策等ありますでしょうか・・・?
初めまして。現在Mayaにてモデリングを行い、ブレンドシェイプにて表情をつけたのですが、pmxエディタに読み込んだ際にモーフで反映がされません。
ベースのマテリアル名をモーフのプリフィックスとして使用しているのですがやはり反映されませんでした。
なにか解決策などはありますでしょうか、申し訳ありません。
VMDが一通り導かれるかどうか
対象ジョイントの部分を関連するジョイントツリーにすると以下のエラー文が出て出力出来なくなります。
インフルエンスのみにすると出力できるのですが必要なボーンが削除されてしまうので
解決方法等ありましたらよろしくお願いします。
エラーが発生しました。————————————-
Ver : 0.50b
Lang:
Traceback (most recent call last):
File “gui.py”, line 473, in runBtn_Clicked
self.runExport()
File “gui.py”, line 456, in runExport
exporter.run(path, transes, setting, self.putMsg)
File “__init__.py”, line 31, in run
model = Model(transes, direc, setting, msgCallback)
File “mesh.py”, line 349, in __init__
mesh = Mesh(trans, boneFact, matFact, indexOffset, setting)
File “mesh.py”, line 195, in __init__
setting.scale, setting.boneTargetMode)
File “mesh.py”, line 214, in _getDeformers
bones = boneFact.createFromJoints(meshData.joints, tgtMode)
File “bone.py”, line 81, in createFromJoints
joints = self._getJointTree(joints)
File “bone.py”, line 58, in _getJointTree
return pm.ls(rootJoints, ap=True, dag=True, type=”joint”)
File “general.py”, line 1212, in ls
res = _util.listForNone(cmds.ls(*args, **kwargs))
File “pmcmds.py”, line 121, in ls_wrapped
new_args = getMelRepresentation(args)
File “pmcmds.py”, line 103, in getMelRepresentation
newargs[index] = getMelRepresentation(value, recursionLimit, maintainDicts)
File “pmcmds.py”, line 99, in getMelRepresentation
newargs[index] = value.__melobject__()
File “utilitytypes.py”, line 569, in newfunc
return self.f(instance, *args, **kwargs)
File “nodetypes.py”, line 185, in __melobject__
return self.name()
File “nodetypes.py”, line 1436, in name
name = self._updateName(long)
File “nodetypes.py”, line 1323, in _updateName
raise general.MayaNodeError
MayaNodeError: Maya Node does not exist (or is not unique):: u’None’
——————————————————
MAYAのバージョンを変えたら通りました
お騒がせいたしました