MMDとmayaの間でモデルを変換するスクリプト『mmdpaimaya』

------------
## [2018/03/25] バグを発見したため、修正しました。これ以前ダウンロードしたかたには恐らくエラーが出ます。
------------

MMDのモデルをmayaの中に読み込んだり、mayaで作られたモデルをMMDモデルファイル(.pmx)に書き出したりするスクリプトを作ってみました。

githubで置いています >> https://github.com/phyblas/mmdpaimaya
ダウンロードリンク >> https://github.com/phyblas/mmdpaimaya/archive/master.zip

mmdpaimaya

もともと同じようなプラグインはYomogiさんのPmxIO(http://mayatech.blog.jp/archives/3009881.html )とGRGSIBERIAさんのmmd-transporter(http://www.nicovideo.jp/watch/sm23644737 )がありましたが、このmmdpaimayaはその2つを参考として、自分なりに作ってみたものです。

2017年2月からgithubで公開しましたが、当初はあまり完成していなかったので、自分で使ってみながら少しずつ改善してきて、今(2018年3月)初めて詳しい説明を書くことにしました。

機能

  • .pmdや.pmxや.xファイルをmayaに読み込み
  • mayaから.pmxに書き出し

使うための準備

zipを解凍したら、中にフォルダが5つあります。その中の4つは借りたものです。

  • pymeshio: .pmdや.pmxを読み込むため
  • pykakasi: 日本語の名前をローマ字に変換するため
  • jctconv: 半角カタカナから全角に変換するため
  • pkg_resources: pykakasiによって呼び出される

そしてmmdpaimayaというフォルダは自分の書いたコードです。

これら全部のフォルダをMayaスクリプトフォルダに置くことです。そのMayaスクリプトフォルダですが、OSや言語によって異なります。例えば

  • windows日本語版: My Documents\maya\バージョン\ja_JP\scripts
  • windows英語版: My Documents\maya\バージョン\scripts
  • mac日本語版: ~/Library/Preferences/Autodesk/maya/バージョン/ja_JP/scripts
  • mac英語版: ~/Library/Preferences/Autodesk/maya/バージョン/ja_JP/scripts

そこで置いておくとmayaからモジュールとして呼び出すことができます。

使えるmayaのバージョン

windows版とmac版の、maya2015, 2016, 2017, 2018はおすすめします。他のバージョンではまだ試したことがありません。

使い方

スクリプトエディタで以下の通り入力して、実行

import mmdpaimaya.natang
natang_sang = mmdpaimaya.natang.roem()

スクリプトエディタ

それとも、スクリプトをシェルフに保存した方が使いやすいと思います。

これを実行してインポートエラーが出る場合は、Mayaスクリプトフォルダを間違ったかどうかを調べてください。

問題がなければこのようなウィンドウが出ます。右上の選択でGUIの言語を好きに選べます。

mmd > maya

タブは2つあります。
- mmd > maya インポート
- maya > mmd エクスポート

インポートのタブ

好きなMMDモデルファイルを選択してmayaのシーン内に読み込みます。

尺度

大きさの倍数です。MMDとmayaで使う単位は違うので適切に尺度を指定することをおすすめします。単位がセンチの場合は8xで、メートルの場合は0.08xがいいです。

材質ごとにポリゴンを分割する

ポリゴンを分割したらblend shapeも骨も使えなくなります。

blend shapeも作る

頂点モーフからblend shapeを作りますが、頂点モーフ以外の他のモーフは使えないので無視されます。モーフの名前は全部ローマ字に変換されます。

qii4.jpg

骨も作る

IKを作るスクリプトはまだ完成ではないので、『IKも作る』を無視していいです。maya内のHumanIKを使った方がおすすめ。

HumanIKのことは詳しく説明しませんが、骨を作ったら骨の名前はpykakasiで名前をローマ字に変換されて、HumanIKを定義する時にスクリプトと一緒に同梱されたmmdhik.xmlというファイルをロードすると便利です。

材質

基本的にblinnをおすすめしますが、arnoldでレンダリングする場合はaiStandardかaiStandardSurfaceを使います。aiStandardかaiStandardSurfaceはarnoldをロードしていない場合は選択肢に出ません。maya2017の場合はaiStandardですが、maya2018はaiStandardSurfaceになります。

alpha map

pngとか画像ファイルには普通にアルファ値があって、ある部分を透明にできます。『全部』を選択する場合、アルファ値を持つ画像すべてはマテリアルの透明度に繋がりますが、あるマテリアルだけ選択することもできます。

alpha値の画像ファイルを別に作る

mayaでは普通に画像ファイルのアルファを直接使うよりも、アルファ値のファイルを別に作る場合の方がよくあります。画像ファイルのアルファをそのまま使えば問題が起こる場合がありますから。
対策として一応アルファ値の画像ファイルを別に作るという機能を加えましたが、これを使うにはPILというpythonのモジュールが必要となりますが、PILをmayaの中で使うにはちょっと面倒な加工が必要です。
PILがインポートできない場合この選択肢は選択できない状態となります。

まだmayaに導入できないこと

MMDとmayaの仕組みは色々違うのでMMDでは使えるがmayaに変換できない機能があります。

  • 物理
  • 頂点モーフ以外のモーフ
  • スフィアマップ
  • SDEFのスキンウェイトは使えず、BDEF2扱いとなります

読み込みできるモデル

基本的に殆どの.pmdと.pmxと.xファイルはインポートできますが、問題があるモデルが一部あります。原因不明なものもありますが、よくある原因の一つは『追加UV数』が0ではないモデルです。pmdエディタで『追加UV数』を調べて0ではない場合は0にしておくと問題が解決です。

追加UV数

それと、インポートできてもテクスチャが変になる場合も多少あります。特に.xファイルの方が問題が多いようです。

.xファイルの場合は当然なことですが、ブレンドシェイプと骨が使えません。

注意

  • MMD以外の使用が禁止されるモデルがあります。ちゃんとそれぞれのモデルの利用規約を読んで下さい
  • MMDでは綺麗だけど、mayaに移ると台無しっていうモデルもあります

エクスポートのタブ

mayaのシーン内で選択されているポリゴンを.pmxファイルに書き出しします。複数選択も可能です。

maya > mmd

複雑な方法でできたポリゴンにはエラーが出る可能性があります。その場合、エクスポートの前にポリゴンを結合したり、ヒストリを削除したりしておいたら無難です。

骨(ボーン)もモーフ(ブレンドシェイプ)も材質(マテリアル)も選択したらMMDで使えます。マテリアルの種類はなんでも使えますがblinnを一番おすすめします。

『テクスチャをコピーする』を選択するとマテリアルに使われているファイルテクスチャのファイルをすべて.pmxファイルと同じ場所にコピーします。

ファイルテクスチャ以外のテクスチャ(チェッカやランプとか)はMMDでは使えないので、無視されます。

『sphモード』と『sphファイル』はすべての材質に適用するスフィアマップです。もともと私の作ったモデルは全部同じスフィアマップを使用するので、これはただ自分の都合で追加された機能です。

エクスポートしてできた.pmxファイルはすぐにMMDで使うとエラーが出る場合がありますので、その場合はまずpmdエディタで読み込んでもう一度保存したら解決できます。

使った例

mayaで作られたMMDモデル http://3d.nicovideo.jp/u/phyblas
MMDモデルを使ってmayaでレンダリング https://www.youtube.com/watch?v=7iixZmr8rAo

謝辞

このスクリプトはPmxIOとmmd-transporterを参考として書いたので、製作者に感謝の言葉をお送り致します。
それと、.pmdと.pmxを読み込むためのpymeshioや日本語をローマ字に変換するためのpykakasiなどのモジュールの製作者も感謝の言葉をお送り致します。

終わりに

このスクリプトはみんなさんに役に立てたら嬉しいです。

問題やコメントはここ(qiita)でもgithubの方でもお尋ねください。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.