チュートリアル / GEMBAコンバート道
第1回:モデル・マテリアル編
- 3ds Max
- Maya
- コラム
- チュートリアル
- データ
- マテリアル・シェーダー・UV
- モデリング
- 上級者
- 中級者
- 映画・TV
はじめましてこんにちは、株式会社GEMBAでTDやってます、水橋と申します。
日頃はエフェクトのデザイナやったりスクリプト書いたり、レンダリングの管理してたりしています。
なんでもやります。おねがいします。
GEMBAは映画、ゲーム、アニメ、パチンコと幅広いジャンルでのフルCG映像制作している会社です。メインツールは3ds Maxですが、3ds Maxの経験がないとGEMBAで働けないというわけではありません。新人で入ってくる半分以上がMayaの勉強をしてきた子たちだったりします。
「GEMBAコンバート道」とは
みなさんはまわりで「Mayaならできるんだけどな~」「Maxならプラグインでできるよ」「こっちのソフトの方がいいんじゃないの?」みたいな会話を耳にしていませんか?
そういった問題を解消して、異なる環境、異なる会社、異なるソフトウェアの垣根を乗り越えるためにデータの変換(コンバート)をしてしまおう!ソフトやツールの使い方は置いといてコンバートしてしまおう! という企画です。
実際、GEMBAで行っているケースも含め、 各作業ごとにどうやってコンバートしてきたかを解説していきたいと思います。なので、内容はテクニカルなお話が好きな方向けです。
第一回はモデル・マテリアル編です。
早速、3ds Maxで制作されたモデルをMayaへコンバートしたいと思います。
環境は、3ds Max 2015 SP2 (HairFarm 2.5.2,Vray 3.20.03)とMaya 2015 (Vray 3.10.01)です。
いい感じのおじさんキャラ(GEMBAの重役?)がいたので、(画像は3ds Maxのビューポート) こいつをMayaへ持ってきます!
では各要素ごとに手順を追っていきましょう。
Topology,Geometry
まずトポロジ・ジオメトリ情報はAlembicでコンバートします。
コンバートしたいモデルを選択した状態で、「Export Selected (選択項目の書き出し)」保存形式を「Alembic(*.ABC)」を選びます。
今回はアニメーションは必要ないのでこんな感じの設定で書き出します。
注意点としては書き出したオブジェクトがポリゴンなら四角形ポリゴンに、
メッシュなら三角形ポリゴンになります。
モディファイヤなどメッシュとして扱っているオブジェクトがある場合、
ポリゴンに変換しておくとよいです。
早速Mayaに読み込みましょう。
「Pipeline Cache (パイプライン キャッシュ) メニュー > Alembic Cache (Alembic キャッシュ) > Import Alembic (Alembic から読み込み)」
書き出したABCファイルをインポートします。
特別なことをしなくても簡単にモデルをコンバートできました。
ちなみにメッシュの状態でエクスポートしたものをインポートするとこうなります。
ソフトウェアによって四角形ポリゴンの扱いが異なるので、
場合によっては全てを三角形ポリゴンで扱ったほうが良いかもしれません。
これでトポロジ・ジオメトリは完了。
Material,Shader
続いてマテリアル・シェーダーです。
Vrayを使っているのでVrayVRmatMtlを使う手もありますが、
せっかくなので自力で変換してみます。
やり方は単純「3ds Maxのプロパティと同じ値をMayaのアトリビュートに打ち込む」です!
人力でもよいのですがせっかくMAXScriptとPymelという便利なものがあるので使いましょう。
まずは下準備
3ds MaxとMayaの名前を調べます。
「MAXScript Listener」を表示させて「Macro Recorder」を起動します。
マテリアルエディタでVrayMaterialを作成し、
RoughnessとGlossinessの値を変更してみると記録が残っています。
3ds Max上でVrayMaterialは「VrayMtl」という名前なことと、
それぞれのプロパティの本当の名前が判明しました。
チクチク面倒なので、いっぺんに調べるスクリプトはこんな感じです。
showproperties (VrayMtl())
「MAXScript Editor」にコピペして実行してみてください。
こんな感じでズラッと表示されます。値のタイプまで表示されています。親切!
Mayaでも見てみましょう。
こんな感じで、上段一番下の行にVrayMaterialのアトリビュートが表示されています。
3ds Maxと同じようにタイプまで表示させたいときは
以下スクリプトで実行すると合わせて見やすいです。
import pymel.core as pm shader , shadingEngine = pm.createSurfaceShader('VRayMtl') import maya.cmds as cmds for i in pm.listAttr(shader): try: print (i+" : "+str(type(cmds.getAttr((shader+"."+i))))) except: pass
左:Mayaのアトリビュートと右:3ds Maxのプロパティの名前を表にしてみました。
見比べるとちょっとづつ違いますね・・・。
面倒ですが、ここから先はチクチク確認する必要があります。
3ds MaxとMayaへの理解を深めるため、と自分に言い聞かせながら対になる名前を探します・・・
マテリアルコンバート用のmaxscriptの作成
・・・準備はできたのでいざコンバートです!
3ds MaxからShaderを作成するpymelを書き出すスクリプトを作成します。
回りくどいですが、大体のスクリプトの流れは以下のようになっています。
1. VrayMaterialごとにプロパティの値を取得
2. Mayaのアトリビュート名、型に合わせて1の値を編集
3. MayaでShaderの作成、アトリビュートを設定する関数
4. Mayaでマテリアルのアサイン情報(ShadingGroup)を設定する関数
5. 3,4を使って2を実行する命令文を作成
6. テキスト(*.py)として出力
7. Mayaで6のpyを実行
できたスクリプトの結果はこちらです。※スクリプトはGEMBAウェブサイトにて配布中!
コンバートしたモデルのシーンに対して実行するとShaderとShadingGroupが作成されます。
シンプルなマテリアルは一発で変換できました!パチパチパチ(拍手
注意点としていくつかあげると
・3ds Maxで名前の重複や記号を許してしまうので、
Mayaで作成したときにノード名が変わってしまうこと。
・ShadingGroupのアサインをオブジェクトのノード名で行っているので、
NameSpaceや重複オブジェクト名は3ds Max上で整理してからMayaにもってくること。
・標準のAlembic(3ds Max)でExportしたオブジェクトはノード名に「_trans」が付加されてしまうこと。
※オススメはExocortexCrate (http://exocortex.com/products/crate) のAlembicプラグインです。
ノード名はそのままだったり、階層を除去できたり、PointCacheで出せるなど機能が豊富です。
で、レンダリングしたのがこちら。(同じ要領でVrayLightももってきました。)
とりあえず、Material,Shaderは完了です。
Hair
最後に髪の毛をコンバートしてみます。初挑戦です。
まず、HairFarmからスプラインを作成。
「HairFarm > Utility > Hair to Spline Object...」から選択しているHairをスプラインに変換します。
スプラインとして変換できました。
これをAlembicでMayaにコンバートして使いたいのですが、
複数のLineを持ったSplineShapeなので、MayaのHairが適用できなかったりします。
ので、一本づつSplineをオブジェクトとして分解します。
手作業でやるのも面倒なので、スクリプトで処理しました。
※スクリプト配布中!
ジオメトリ・トポロジの時と同様にAlembic経由でMayaへコンバートします。
Maya上でHairとVrayHairMaterialを適用したものがこちら。
これで全ての要素がコンバートできました!
そして最後にLookDev風にレンダリングしたものがこちらです。
以上で「GEMBAコンバート道~第一回~モデル・マテリアル編」は終了です。
今回はMax to Mayaでしたが、逆も同じ発想でいけるかと思います。
日々環境が変わる中でひとつのやり方に固執しないワークフローもあるかと思います。
それがコンバート道です!
延々とおじさんの画像ばかりで恐縮でしたが、最後までご覧頂きにありがとうございました!
今回使用したスクリプトはGEMBAウェブサイトで配布しておりますので、 気になる方はこちらへどうぞ。
ホームページアドレス
http://gemba.co.jp/wp/downloads/column1/