スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
早速アイディアに行き詰まってなかなか自主制作も滞っているので
たまには少し数学っぽい記事を。

Houdini で特定のパラメータにランダムな値を入れる際に rand 関数を使います。
しかし、0.0 から1.0 まで均等に分布されるのではなく
中間値である 0.5 あたりの値が最も多くなるような正規分布の方が望ましい
という場合も多々あると思います。

平たく言えば、例えば大量の石ころを作ろうというとき、
ほとんどの石の大きさは直径4.0cmくらいで、たまに2.0cm や 6.0cm のものもほしい
であるとか、
ほとんどの石はグレーだけれどたまに黄色っぽいものや青っぽいものもほしい
であるとか。

Maya の場合は gauss 関数が用意されているのでいいのですが Houdini にはありません。※追記参照
(とはいえ gauss も個人的には最小値と最大値が不明瞭なため好きでないですが。)

もちろん方法は色々あり、例えば Ramp Parameter VOP を使えば Catmull-Rom などの
優秀なアルゴリズムでの補間も行なえるし、中間値と言わず自由な分布が可能です。

しかし Expression に式だけ書いてささっと手軽にやりたいときもあります。

そこで数学の得意でない私でもすぐに思い浮かんだのが三次関数と三角関数の正弦波。
これらそれぞれの、(0,0)と(1,1) を通り x=0.5 での微分係数がゼロになる式を考えると、

三次関数の場合は y = (x - 0.5)3 * 4 + 0.5

20140228_01.png

正弦波の場合は y = ( sin(x * 2π) + x * 2π)/2π(度数法:( sin(x * 360) + x * 2π)/2π)

20140228_02.png

になりました。

この x に、0.0 ~ 1.0 の値をとる乱数を代入すればいいだけです。
言わずもがな Houdini の Expression では三乗は pow 関数
πは環境変数 $PI を使います。sin 関数は度数法です。
Maya の場合は sin が弧度法で sind が度数法です。

結果にそんな大差がないので三次関数の方が簡単で楽だと思います。


ずいぶん前の記事ですが こちらの記事も似た内容なので是非ご参考までに。



2015.11/30 追記:
Houdini 14 以降のバージョンでは、「Attribute Randomise」 SOP により
ガウス分布を含めた多種の方式でのランダムな値が簡単に習得できるようになりました。
スポンサーサイト
オブジェクトを多数複製しながらあるカーブに沿って配置できるようにしようと考えて
いつも通り Pymel を書いてるとちょっとしたバグ?のようなものを発見。

Pymel の NurbsCurve クラスでカーブの接線や法線がとれるので
Aim Constraint か何かで値を与えながら単純に複製していってもいいのですが
カーブの形状を編集したときにインタラクティブに作用する方がいいなと思い、
モーションパスを使って配置していこうと考えました。

個人的には、これは別に奇態な考えであるとは思えず、
むしろ同様の考えで同様のものを作ろうとした経験のある人も少なくないのではないかと思います。

そしていつも通り UI も作って機能もつけていき、ほぼ完成したのですが…、

undo がきかない

モーションパスをアタッチするためのコマンド、
pathAnimation をループ内で使用すると undo を実行してもうまく戻れない。

手動で undo の chunk を設定しようとしても駄目でした。

更に検証してみたところ、Pymel でなく mel でも同じ結果になりました。
これはバグでしょうか…?

最終的にはやむなく UI からノードを削除できるようにして一応戻せるようにはしましたが、
もしこのツールを作ろうとした人が他にもいればどう対処したのか気になります。


まぁ、今後 Houdini Engine が普及していけば Copy SOP 一発で済む話なんですけどね(ぉ

1028.png
先日、諸事情により愛用ラップトップの中身のデータが全て消えまして。
作成したスクリプト類は幸いデータが残っていたので何とかなりそうだし
考えてみると消えて本当に困るデータというのもほとんど無いので
気を取り直して頑張ろうとしているのですが

唯一ショックなのはメモをとっていたデータが消えてしまったことです。
物臭な性格故バックアップをとったりしていないので完全に消えてなくなりました。

特に最近は Houdini,V-Ray,AE スクリプトなど手広く色々なものを勉強していたので
そのメモが消えてしまったのが痛いです。
まぁ本当に重要なことはアタマに残っているので1から書き直そうと思っています。


さてところで、 MEL スクリプトを書く上で未だにちらちらとメモを見ながら確認することがありました。

特にスクリプトの仕上げの段階などで重要になってくる、存在の確認についてのコマンドです。
状況によって少し書き方が違ってくるので、個人的にこれを一覧にしてメモにしています。




MEL コマンド,プロシージャ:exists
一般的なノード:objExists
アトリビュート:attributeExists
パーティクル・ソフトボディ:   particleExists
ファイル:filetest -f
フォルダ:filetest -d


particleExists に関しては objExists でも存在の確認はできるので
存在の確認というよりもパーティクルもしくはソフトボディかどうかの判定という認識でよさそうです。

ファイルとフォルダは分けて書きましたが -e フラグならどちらでも対応してくれます。
状況によっては -r の『読み取り可能』や -w 『書き取り可能』の方が実用性があるかもしれません。
詳しくはヘルプを見てみるといいと思います。

この他、optionVarScriptJob といった特殊なデータ,
windowcolumnLayout などの UI 関係は基本的にそのコマンド自体に exists フラグがあるので
それを使用すれば問題ありません。


以前は一覧にもっと多くあった気がするのですがいまいち思い出せないので
思い出し次第この記事に追加して更新しようと思います。


faith of the fallen さんの "Awesome Spine" をパクって参考にして MEL でツールを作りました。

というのも、ここのチュートリアル通りに進めてもダウンロードしたファイルの通りにならないので
なぜなのかとノードを調べてみると
このチュートリアルではとても肝心なところの説明がされていないことがわかりました。

ということでこの部分を補いながら利便性と汎用性を上げるためにもツールにしてみました。

まず実行するとこのようなウィンドウが現れ、背骨の長さと骨の数を設定することができます。

111218_1.gif

するとこのように Y 軸に沿って並べられた Joint とその両先端にコントローラが作られます。

111218_2.gif

適当なオブジェクトにバインドしてコントローラを動かすと squash and stretch します。
このままでは Stretch deformer と同じように見えますが…

111218_3.gif
111218_4.gif
111218_5.gif

コントローラを自由に移動回転すると自由に変形できます。

111218_6.gif
111218_7.gif

ノードの使い方は違いけれど Y 軸の回転も "Awesome Spine" を仕組みを使用しています。

データ階層はこのようになっていて、最上階の Group ノードでアトリビュートを操作できます。
111218_add1.gif111218_8.gif

"Expand Scale" ではスケーリングの度合いを、

111218_9.gif

"Curvature" では以前の記事でご紹介した正規化分布グラフの変化の度合いを調節できます。

111218_10.gif


名前は Spine(背骨)となっていますが
シンプルなオブジェクトにシンプルな動きをつけるだけで
簡単にカートゥーン調のアニメーションを作ることができます。

111218_11.gif

最近は AE や PS でのスクリプトや Houdini など色々と新しいことに挑戦していて
なかなか記事になりそうなことが無いですが
もっとスキルアップしてオリジナリティのあるものを作れるようになれたら
どんどんご紹介していけたらいいなと思っています。
聞くところによると 3ds Max では Orthographic View でも
自由にタンブルできるらしいですが
Maya ではできない仕様になっています。
カメラの回転はできるのにビューポートでタンブルができないというのも
少し変わった仕様だと思いますが。

API レベルをいじることができるなら
この仕様自体を変えることができるのかも知れませんが
少し違った形で簡単な MEL で実装してみました。

{
string $panel = `getPanel -withFocus`;

if(`objectType $panel` == "modelEditor")
{
string $camera = `modelEditor -q -camera $panel`;
string $camShp[] = `listRelatives -shapes $camera`;
string $attr = "orthographic";

int $bool = `getAttr ($camShp[0] + "." + $attr)` ? 0 : 1;
setAttr ($camShp[0] + "." + $attr) $bool;
}
}


実行するとアクティブなビューの
Parspective と Orthographic がトグルします。
ホットキーなどに設定すれば手間にもなりません。

私はあまり使う機会はないと思いますが
きっと工業系などのモデリングをする方にとっては有用的だと思います。

また、上記 MEL の上半分の
アクティブなパネルからカメラの名前を取得するという部分は
何れ他のツールを作るときにも使えそうなので
覚えておくといいかも知れません。
Profile
HN らい

都内某社テクニカルディレクター
都内某専門学校講師
都内某企業講師
元中国某社S3Dスーパーバイザー
Contact
(ENGLISH OK. 可以用中文。)
Categories
Archives
RSS Link
QR Code