2016年6月6日月曜日

[Houdini]アトリビュート値を段階化


2Dノイズを作成 で生成したノイズの諧調を減らし、段階化する。
多くのゲームではフィールドはなだらかな地形ではなく、歩ける床面と壁面に構造が分かれているので、それを再現するための下準備のつもり。
Ramp Parameterを使用する。

1.2Dノイズを作成 で作った[atribvop1]を開く
2.[fit1][bind1]を繋ぐ線上に[Ramp Parameter]を挿入



3.[grid_object]階層に上がり、[atribvop1]のパラメータを開くと、rampの項目が追加されている
4.他ツールのランプ機能と同様に、任意の段階数、範囲、値を設定
 interpolationConstantに変更


2015年10月15日木曜日

[Houdini] 2Dノイズを作成


Houdiniでゲーム系3D背景の自動生成に挑戦。
まずは一般的なパーリンノイズの作成から。

1.gridAttribute VOP SOPを作成、接続



2.Attribute VOPをダブルクリックしてVOPの中に入る
3.VOP内で Anti-Aliased NoiseFit Rangeを作成
3.[Geometry VOP Global Paramater]"P"から[Anti-Aliased Noise]"pos"に接続
 (パラメータはデフォルトのまま)
4.[Anti-Aliased Noise]"noise"から[Fit Range]"val"に接続
 [Fit Range]のパラメータを以下のように設定
 ・Source Min -0.5
 ・Source Max 0.5
 ・Destination Min 0
 ・Destination Max 1
5.[Fit Range]"shift"から[Geometry VOP Output]"Cd"に接続



ノイズそのものは[Anti-Aliased Noise]で生成されているが、
値の上限、下限が不明なので[Fit Range]を用いて0~1に変えている。

2014年3月6日木曜日

[MEL] 戻り値を配列で返す

なぜかずっと出来ないと思っていた、
プロシージャの戻り値を配列で返す方法。
以下サンプル。

proc string[] sample(string $param[])
{
    string $return[];
    for ($i = 0 ; $i < size($param) ; $i++)
    {
        $return[$i] = "Re_"+$param[$i];
    }
    return $return;
}


sample({"aaa","bbb","ccc"});
// Result: Re_aaa Re_bbb Re_ccc //

勿論戻り値は配列で受け取る事が出来る。
なぜ出来ないと思っていたのか自分でもわからない…。

オマケ
これも忘れがちな、配列の最後に新しい項目を追加する方法。
{
    string $array[] = {"000","001","002"};
    string $item = "003";
    stringArrayInsertAtIndex(size($array) , $array , $item);
    print $array;
}


000
001
002
003

変数の型に応じて、
floatArrayInsertAtIndex
intArrayInsertAtIndex

と使い分ける。

※追記
配列の末尾に追加はこれでいいのではとのご指摘が…。その通りです。

$array[size($array)] = "003";


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行メッセージウインドウを表示する



Simpledialog_01



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





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



SimpleDialog(string,string);



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






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





Simpledialog_02





「SimpleDialog」をダウンロード



2012年12月22日土曜日

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



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

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

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




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


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



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


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


「MaterialLister」をダウンロード


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