2011年11月29日火曜日

【script】Maya スキンウェイトの四捨五入

最近、Mayaでゲームモデルに対してスキンウェイトをいれる作業をしてます。
そこでゲームモデルには色々な制約があります。例えば、スキンウェイトは少数第3位までしか使ってはいけないとかです。これも手慣れているモデラーさんなら問題無いかと思うのですがアニメーターが自分で調整する場合やペイントで塗って調整している場合はその仕様を超えて少数第3位以上まで、細かい数値が入ってしまいます。

そこで、本来ならコンポーネントエディターとか使って手打ちで修正する作業が発生するかと思うのですが、全部の頂点に対してやるとなると結構骨の折れる作業になります。



そこでいつもの通りないなら作ろうの精神で
スキンウェイトを小数点第4位で四捨五入するスクリプトを作成しました。

ペイントでザ~ッとウェイトを調整してから、このスクリプトを実行してあげればだいたい仕様通りのスキンウェイトのモデルが出来あがるわけで、かなりの作業効率が望めるかと思います。


Usage
1.メッシュを選択(複数でもOK)
2.このスクリプトを実行

DownLoad
round_skinweight.mel
(Maya2012などで動作確認済み)

2011年11月20日日曜日

【雑記】FBXのファイルのフォーマットについて

MotionBuilderで使われているファイルフォーマットはFBXです。
FBXと言っても、実はこれには2種類のFBXファイルフォーマットが存在するのです。

1つ目はMotionBuilder2010のバージョンまでで使われていたfbxのフォーマット。
2つ目はMotionBuilder2011以降のバージョンとMayaとか3DMaxからExportされたFBXのフォーマット。

これらが何が違うかと言うと、1つ目のfbxフォーマットはMotionBuilderで使用されていたいわゆるネイティブなfbxフォーマットなんです。極端な言い方をしてしまえばfbxの中で独自に進化したガラパゴス的なフォーマットなんです。2つ目のFBXフォーマットはMayaや3DMaxなどからExportされたいわゆるパブリックなFBXフォーマットです。Autodeskがソフト間のDataExchangeとして猛烈プッシュしているファイルフォーマットです。

 なのでMotionBuilder2010までのバージョンまでなら本来ならMayaなどからExportされたFBXフォーマットはFile→Openでもファイルを開いても大きな問題はないので大丈夫かと思いますが本来ならFile→FBX Plug-in Import でファイルを読み込まないといけないんです。

MotionBuilder2011以降ならパブリックなFBXファイルフォーマットを正式に採用しているのでMayaなどのほかの3DCGソフトと互換性がかなり高くなっています。
実はそんな違いがあったのですが、もう最新バージョンなら特にそのようなことも気にせずにデータのImportやExportをしても気を使わなくても大丈夫なはずです。

fbxもガラパゴスから世界に通用するファイルフォーマットに進化をしましたというお話です。

2011年11月18日金曜日

【Tips】Constant Key Reducerの挙動

MotionBuilderでPlotするときのオプションでConstant Key Reducerのチェックがあります。

このチェックをONの状態でPlotすると値が同じキーフレームは削除されます。
それじゃ、OFFの状態でPlotすると値が同じ状態のものは削除されないかと言えば実はされる場合があります。
このようにConstant Key Reducer のチェックをOFFにしてPlotしてもキーフレームが削除されてしまう挙動というのは確かエイリアスに買収されたころのバージョンMotionBuilder6以降から確認出来てたかと思います。
これを直す方法を覚書として以下に残しておきます。

1.以下のテキストファイルを開く
MB2010での場合です。
C:\Users\○○○○○\AppData\Local\Autodesk\MB2010\config\△△△.Application.txt
○○○○○は自分のユーザー名
△△△は自部のマシン名

2.ファイルの中のUseRunTimeConstantKeyReducerの項目を探し出し、
  Noに設定する


上記のようにConfigファイルを書き直してPlotオプションのConstantKeyReducerのチェックをOFFにしてPlotするとちゃんと値が同じキーフレームでも削除されないでキーフレームが埋まっている状態にすることができます。

他のソフトへコンバートするときは、うる覚えですけどキーフレームが埋まっている状態のほうが良かったかと思います、確か・・・・・。

2011年11月7日月曜日

【Tips】MotionBuilderでモデルの差し替え

ゲームのアニメーションを制作していると、モデルの更新というのが良くあります。
Mayaとかで制作しているならリファレンスなど使用していれば気にせず作業ができます。
けどMotionBuilderで作業していると自分でモデルの更新を行わないといけません。

その方法を覚書として残します。

1.古いモデルのファイルを開く

2.File→Mearge...

3.新しいモデルのファイルをMeargeオプションでMeargeAllElementsでマージで読み込み
  矢印がクルクルしている状態のオプションです。

このときにあらかじめ、古いファイルと新しいファイルとでNameSpaceを含めて名前を同じにしておきます。この手順でモデルやSkeletonなどを新しいファイルの物に更新できます。

2011年11月1日火曜日

【Script】Mayaの最大インフルエンスの調整

ゲームのモデルを作成しているとパフォーマンスなどを考慮して1つの頂点に割り当てる骨の数(Mayaでいうところのインフルエンス)が決まっている場合が多々あります。

手馴れているモデラーなら意識していればさほど問題ないと思いますが、
アニメーターが自分が意図したように動かしたい時自分でスキンウェイトを調整するときがありますが、その調整時に意図せずそのゲーム仕様を超えたインフルエンス数にスキンウェイトを入れしまう場合があります。

そういうときは、コンポーネントエディタとかで目で見て超えてないかチェックし、超えて割り当たっている場合は手動で直したりします。これがまた非常に面倒くさい作業だったりします。

これまた例のごとくないなら作ろうの精神で
自動で最大インフルエンス数を調整してスキンウェイトを割り当て直してくれるスクリプトを作りました。

Description
1つの頂点に任意で指定したインフルエンス数を超えて割り当たっている場合、
最小のスキンウェイトを指定した数で割って、大きい値へ割り振り直します。
つまり、以下のようなスキンウェイトの状態のとき


スクリプト実行後は

上図のようになります。上記の例では最大インフルエンス数は3で設定し実行してます。
これはjoint1に割り当たっている0.003が最小なので、0.003を3で割って他の大きいほうへ0.001づつ割り振り直されています。
また、最大インフルエンス数より少ないときは何もしないでそのままの状態です。


Usage
1.オブジェクトを選択します(複数選択もOK)
2.スクリプト内部にある$MAX_INFの数を任意に設定します
3.このスクリプトを実行

DownLoad
(Maya2010では動作確認済みです)