2013年9月17日火曜日

[MEL]頂点ウェイトの軽量化ツール


リアルタイム系のウェイト調整作業でよく必要になる、
・ウェイト値の桁数設定
・インフルエンスオブジェクト数の上限設定

をひとつにまとめたツールを作ってみた。
ページ下部からダウンロードしたファイルを解凍、ファイルを
Mayaのスクリプトパスにコピー後、Mayaを起動すると使用できる。


【使い方】

1.任意の頂点を選択(複数モデル可)
2.Script Editorに SkinWeightReduction(); と入力。
  シェルフ等に登録しても良い。



・ウェイト値の桁数設定
 [Reduction Threshold]に任意の桁数を入力しEnter。
 (小数点以下1桁の場合は0.1、2桁の場合は0.01…、小数)
 [Round off the Weight Values]ボタンをクリック

・インフルエンスオブジェクト数の上限設定

 [Reduction Threshold]に任意の桁数を入力しEnter。
 (1つの場合は1、2つの場合は2…、自然数)
 [Limit the Number of Influences]ボタンをクリック


ウェイト値の桁数設定は基本的に四捨五入で値を決定しているが、
桁が0.1の場合、値の合計が0.9~1.1になる可能性があるため、
その場合には一番大きな値を増減して正規化している。

一方インフルエンスオブジェクト数の上限設定では、設定数が2の場合、
1頂点中ウェイト値の大きい2つを残し、残りを合計。
残り値を上位2つのウェイトの比率でそれぞれに分配することで正規化した。

どちらも簡単な機能なので1つのツールにまとめたが、値の入力場所を
1つにまとめたUIは少し使いづらいかなと感じている…。

「Skin Weight Reduction」をダウンロード


2013年4月25日木曜日

[試作]Tail Rig のジョイント数を増やす




前から作ってみたかった機能。
ジョイント数の少ないtail rigやsnake spineから、
アニメーションを保持したままジョイントの数を増やした
動作/形状ともに滑らかなチェーンを生成する。
説明しづらいのでとりあえず動画にしてみた。


実際はまだツールの形にもなっていない試作の状態。
使い道としては、
・低スペックハード向けのRIGをアップコンバート
・少ないノードで尻尾を動かすRIGとして使用
などを想定している。
ただ、私自身はRIG/アニメは専門外なので、
本当に使い道があるのかはやや不安・・・。

ご意見などありましたら是非お教えください。


2013年4月11日木曜日

[MEL]シンプルな1行メッセージウインドウを表示する






自作ツールでよく使用する、簡単なメッセージや
リザルト表示の為のダイアログウィンドウ生成機能。
ページ下部からダウンロードしたファイルを解凍して
スクリプトパスにコピー後、Mayaを起動すると使用可能になる。




【使い方】
スクリプトで以下の記述を行う。


SimpleDialog(string,string);


最初の文字列はウィンドウタイトル、次の文字列が本文。





SimpleDialog("タイトル","メッセージ本文");
SimpleDialog("タイトル","メッセージかタイトルの長い方に合わせてウィンドウ幅が調整されます。");
SimpleDialog("タイトルの方が長い場合はこうなります。","メッセージ本文");









「SimpleDialog」をダウンロード


2012年12月22日土曜日

[MEL]オブジェクトにアサインされたマテリアルを調べる



ひさしぶりにツールっぽいツールを作ってみた。
選択したメッシュモデルにアサインされたマテリアルの一覧を表示し、
それがどの箇所に使われているかを調べられるツール。
ページ下部からダウンロードしたファイルを解凍、フォルダ内の2つの
ファイルをMayaのスクリプトパスにコピー後、Mayaを起動すると使用できる。

【使い方】
1.任意のメッシュオブジェクトを選択(複数可)
2.Script Editorに MaterialLister(); と入力。シェルフ等に登録しても良い。

【機能】
①選択オブジェクト名ボタン。複数オブジェクトの場合は”Multi Objects”と表示。
②マテリアルリスト。選択オブジェクトにアサインされているマテリアル一覧。
③再選択ボタン。別のオブジェクトを選択した後にクリックするとリストが更新される。
④ツール終了ボタン。ウィンドウを閉じツールを終了する。




①を押すとオブジェクトが選択状態になる。


②のリスト項目をクリックすると、選択モデルの中で
 そのマテリアルがアサインされているフェースが選択状態になる。



②のリスト項目をダブルクリックすると、そのマテリアルのアトリビュートが開く。


たったこれだけの機能だが、Mayaはオブジェクト毎でのマテリアル管理が
あまり得意でないので、今のところそこそこ便利に使っている。


「MaterialLister」をダウンロード


2013/02/11 MELを更新。複数マテリアル選択に対応しました。
2013/04/10 オブジェクトにアサインされた単一マテリアルが
        選択されない不具合を修正。

2012年12月5日水曜日

[MEL]ビューポートのパネルサイズを取得する

仲間内の勉強会で出たお題への回答案。

メインビューポートパネルの縦横サイズを得る方法。

現在アクティブになっているビューポート※のサイズを表示する。



{
    //パネルレイアウトのサイズ取得
    string $panelX[];
    string $panelY[];
    int $mainX=`paneLayout -q -w viewPanes`;
    int $mainY=`paneLayout -q -h viewPanes`;



    //アクティブなパネルを取得
    string $selectPanel =`getPanel -wf`;


    //各パネルの名前とサイズを取得
    string $panelname[] = `paneLayout -q -ca viewPanes`;
    int $panelwh[] = `paneLayout -q -ps viewPanes`;


    //パネル名とパネルサイズのインデックスを揃える
    for ($i=0;$i<4;$i++)
    {
        $panelX[$i] = $mainX*$panelwh[($i*2)]/100;
        $panelY[$i] = $mainY*$panelwh[($i*2)+1]/100;


        //選択パネル名と同じなら結果を表示
        if ($panelname[$i] == $selectPanel)
        {
            print ($panelname[$i]+":X="+$panelX[$i]+",Y="+$panelY[$i]+"\n");
        }
    }
}



※アクティブなビューポートとはビューポートの外側に白枠のついた状態のもの。

 ”Render the current frame”使用時にレンダリングされるビューと同じ。



出力結果とPhotoshopで計った結果、数ドットの誤差があるような、合っているような・・・。

流用等は自己責任でお願いします。

2012年10月26日金曜日

[MEL]文字列関連のメモ

何かとよく使う、文字列に関係するMELのメモをいくつか。


【現在のシーンのフルパスを取得する】
 file -q -sceneName;

file -q -sceneName;
// Result: C:/Users/mmb_jp/Documents/maya/projects/sample/sample.mb //



【現在のシーンファイル名を取得する】
 file -q -shortName -sceneName;

file -q -shortName -sceneName;
// Result: sample.mb //



【テクスチャのパスを取得する】
 getAttr ファイルノード名.fileTextureName;

getAttr file1.fileTextureName;
// Result: C:/Users/mmb_jp/Documents/maya/projects/sample/sample.tga // 



【フルパスからファイル名のみ(拡張子なし)を取り出す】
 basenameEx("フルパス");

basenameEx("C:/Users/mmb_jp/Documents/maya/projects/sample/sample.mb");
// Result: sample //



【文字の置換】
 substituteAllString("文字列", "検索", "置換後");

substituteAllString("Maya_Memo_Blog", "Maya", "Softimage");
// Result: Softimage_Memo_Blog //


置換の応用、文字列の一部を削除する。

substituteAllString("Maya_Memo_Blog", "Memo_", "");
// Result: Maya_Blog //



【文字列の分割】
 tokenize "対象文字列" "分割文字" $string[];

分割文字は1文字のみ。
複数文字の場合は分割文字が2種という扱いになる。
戻り値は分割数。文字列はstringの配列で受け取る。

string $result[];
clear $result;
tokenize "Maya_Memo_Blog" "_" $result;
print $result;

Maya
Memo
Blog



【文字列の中にダブルクォーテーションを含める】
 \" ("の前に\)

 $str="Maya\"Memo\"Blog";
// Result: Maya"Memo"Blog //

2012年8月8日水曜日

続・物理挙動っぽいカメラを作ってみた



ローカルな勉強会で発表するため、過去に作った物理カメラを
久しぶりに改造してみた。(過去記事はこちら)


【前回からの変更点】
・パラメータ連動の計算をより正確なものに変更
・ズームレンズのf値自動調整を削除
・画像素子サイズを追加。35mm、APS-C、フォーサーズから選択。
 画像素子サイズは設定に応じて焦点距離・F値に補正が掛かる
・シャッター速度に連動するモーションブラーを実装

【追加アトリビュート】
物理カメラは以下の追加アトリビュートのみで設定できる。



・焦点距離(レンズ)
・開放F値(レンズ)

・画像素子サイズ
・絞り
・シャッター速度
・ISO感度


【レンダリング作例】



【画像素子サイズ比較】

画像素子以外変更していないので35mmではオーバー気味に
なっているが、画角・露出が変化しているのが確認できる。



【モーションブラー比較】

シャッター速度を落とす事でモーションブラーが発生する事と合わせて、
露光調整の為に絞りを変更している影響で被写界深度にも違いが
出ていることが確認できる。



相変わらず自習・趣味の域をでない内容だが、手軽にリアリティが
得られるので、急ぎの仕事などでは役に立つかもという感触が得られた。

【追記】
ここで作ったカメラRIGを使い、CEDEC2014「スカルプトマイスター!」の
完成動画をレンダリングさせて頂きました。

【CEDEC 2014】スカルプト・マイスター!

プラスチカ 浅井真紀 / 沙悟浄・完成動画

カプコン 黒籔裕也 / 猪八戒・完成動画

ModelingCafe 山家遼 / 孫悟空・完成動画


Double Negative Visual Effects 田島光二 / 三蔵法師・完成動画