株式会社デジタル・フロンティア-Digital Frontier

Header

Main

  • TOP
  • DF TALK
  • 全国のMayaモデラー必見!Maya2014で追加された新しいメソッド。今ならスクリプトのおまけ付き

全国のMayaモデラー必見!Maya2014で追加された新しいメソッド。今ならスクリプトのおまけ付き

2013/10/21

Tag: ,,,,,,,

夏が終わったかと思ったら、ブーメランのように返ってきた暑さが続いておりますね。
今年の夏は本当にしぶといです・・・。季節の変わり目は体調を崩しやすいのでみなさんもお気をつけて。
そんなわけで、どうも。TDの野澤です。

DFTALKの順番が回ってきたので今回は私が記事を書かせていただきたいと思います。
今回のネタはMaya2014から新しく付いたVertexNormalMethodというアトリビュートについて紹介させて頂こうと思います。
ですが、それだけだとちょっと物足りないかと思いますので、おまけスクリプトもご用意しました。
最後までお付き合い頂けると嬉しいです。




それでは、早速始めます。
Maya2014の新機能のドキュメントはこちらからジャンプできます。

その中の”新しい頂点法線のメソッドのプリファレンス”の項をご確認ください。
Maya2014からpolygon meshノードにvertexNormalMethod(以下、vnm)というアトリビュートが追加されました。
AE

このアトリビュートのデフォルト値はAngle and Area Weighted(int値の場合は3)となっており、
隣接する接線との角度やフェースの範囲の情報から適した法線を描画してくれるタイプです。
この状態にしておくと、今までよりも少ない分割でありながら見た目は良好な状態に保ってくれるので
モデラーにとっては非常にありがたい機能だと思います。
下記の以前のものとの比較画像を御参照ください。
BaseModel

Unweighted
Unweightedの状態。奥行きのシェーディングの境目がハッキリしない。正面のフラットな面も歪んで見える。
※Maya2013以前と同じ法線の結果にしたい場合は、この値をUnweighted(int値の場合は0)に設定してあげる必要があります。

AngleAndAreaWeighted
角のシェーディングがしっかりと表現されている。フラットな面も歪んでいない。




しかし、このvnmですが、実は一つ問題があります。
どんな問題かというと、シーンを保存した時は、きちんとAngle and Area Weightedに設定してあっても、
シーンを開きなおすと、見た目がUnweightedの状態になってしまいます。
しかし、AttributeEditorで値を確認してみると値の方は、Angle and Area Weightedになっています。
これはAutodeskさんも既知の不具合として報告されていますが、Maya2014 Extensionでも依然として起こります。

この問題の解消方法は、シーンを開いた後で、各mesh毎に、vnmを一度unweightedに戻し、
再び、Angle and Area Weightedに戻す方法か、モデルを選択し、キーボードの3キーを押してsmooth表示にするなど
一旦メッシュの情報を再計算させてあげる必要があります。

でもこんなめんどくさい事を毎回するのはとても億劫なので次の様にスクリプト化するといいでしょう。

import pymel.core as pm
meshes = [m for m in pm.ls(typ='mesh') if m.vnm.get(3)]
[m.vnm.set(0) for m in meshes]
[m.vnm.set(3) for m in meshes]

上記のスクリプトを実行して頂くと、シーン中のmeshノードを全て調べ、vnmの値が3ならば一度0に戻し、再度3にします。
この様なめんどくさい事をわざわざやったとしても、お釣りがくるぐらいステキな機能ですので、是非お試しください。
弊社では、scriptJobの中に予め登録しておいてシーンが開かれると自動で上記の工程を行う様にしています。




ところで、今回の様にMaya2014に新しく付いた機能を使って作ったシーンも、
協力会社さんとデータをシェアする為に下位のバージョンに持っていかないといけない事があると思います。
これは先日Twitterで、モデラーの帆足さんからお聞きして知ったのですが、
このvnm以外にもMaya2013からcapacityHintというポリゴンのフェースの数を保存する為のアトリビュートが付いていた様です。

もしこれらのMayaで保存したシーンをMayaAsciiファイルで保存してから、
下位バージョンのMayaでバージョンを無視する様にして開いても
シーンを正しく開く事は出来ません。
詳しくはこちらのリンクをご覧ください。

でも、いちいち上記のリンクで紹介されている方法でシーンから余計な記述を取ってあげてMaya2012以前のバージョンでも開ける様にするのはとても手間ですよね。
なので、これらの作業を支援するスクリプトを作りましたので、是非お役立てください。

スクリプトのリンク

スクリプトの使い方は、まず上記のリンクからスクリプトをpythonスクリプトを置く場所にダウンロードしてください。

その後、scriptEditorから下記のコマンドを実行します。

import saveAsEditedFile
saveAsEditedFile.main()

実行するとsaveAsのダイアログが出現しますので、お好きな名前でシーンを保存します。
保存が完了したら、そのシーンファイルを下位のMayaで開いてみてください。

この中で行っているのは、mayaAsciiの文字列の中から、下位のバージョンでは追加して欲しく文字が無いか検索し、
もし見つかったらその行を削除しています。
ちょっと力業なので、もしかしたらうまく行かない場合もあるかもしれませんが、その時は悪しからず・・・。


最後は少し宣伝をさせてください。
今年もCGWクリエイティブカンファレンス、通称クリカンの季節がやってまいりました。
クリエイティブカンファレンス公式サイト

毎年この時期になると、各社のどんなネタが見られるのか非常にワクワクしますね。
そして、我々も3年連続で登壇させて頂くことになりました。
私もこちらのセッションで弊社のモーションキャプチャと3Dスキャンに関するお話をさせて頂きます。
また、弊社開発室からは、恒例となっている「DFツール紹介マラソン[2013]」で福田と後藤が登壇させて頂きます。
DFでは現在、テクニカル関連に携わる人間が20人を超えて益々ツール開発や制作環境改善に努めております。
もし日程のご都合があいましたら、是非ご参加頂けると幸いです。

来て頂いた方々に損させない様な内容に出来る様に、我々もストイックに準備を進めたいと思います(笑

ちょっと長くなってしまいましたが、最後までお付き合いくださり、ありがとうございました。
それでは、また。


※免責事項※
本記事内で公開している全ての手法・コードの有用性、安全性について、当方は一切の保証を与えるものではありません。
これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご使用ください

Pocket

コメント

コメントはありません

コメントフォーム

コメントは承認制ですので、即時に反映されません。ご了承ください。

*