Houdini 15 からの PolyExtrude
Houdini 15 から Polygon Extrude の機能が大幅に強化され。非常に強力になった。例えば
反面、過去に行えていたことが出来なくなった部分もある。その一つが Hscript を元にしたローカル変数の使用。ここでは、それを回避するための新しい方法を紹介。使用バージョン: Houdini 15.0.291 (11/18追記: これからダウンロードするのであれば 15.0.297 以降を推奨。大幅なパフォーマンス向上およびバグ修正あり。
参考シーンファイルへのリンクは一番下にあり。
Houdini 14 で出来たこと
Houdini 14 およびそれ以前では、PolyExtrude の Local Translate Z に $PR 等を元にしたエクスプレッションを挿入して、面のIDを元にした Extrude が可能だった。例えば、
fit01( rand($PR), 1, 3) // Houdini 15 では不可。This will NOT work in H15.
こうすると、下のような結果を得ることが出来た。
このシーンファイルは、ここから入手可能。
このアプローチには問題もあった:
- Hscript がシングルスレッドであること
- 結果、小さいものであればお手軽に動かせるが、大きなデータには非効率である。
Houdini 15 での方法
上と同様のことを Houdini 15 で作成する方法を以下に紹介。
- Create シェルフの Grid を Ctrl クリック、原点に grid_object1 を作成。i キーを押すなり、ダブルクリックするなりして中に入る。
- grid1 のサイズを 4x4 から 10x10に変更 (しなくとも良いと思うが)。
- grid1 の出力から、TAB->Attribute->Attribute Wrangleを作成。Attribute Create ではなく、Attribute Wrangle を使う理由はこちらを参照のこと。
attribwrangle1 が出来る。ちなみに確定時に Enter ではなく、Shift+Enter を押すと自動的に作成されたノードに表示フラグが移動する。これは H15 からの新機能。- Run Overを Primitive (面) に
- VEXpression の部分に
i@xamount = @primnum;
と入力し、フィールド外の部分をクリックしてリフレッシュ。"xamount" は予約語ではないので何でも良い。primnumはVEX/Wrangle 言語を元にした Hscript の $PR に相当する面のIDを返す変数。予約語。
Geometry Spreadsheet で Primitive の項を見れば、面の ID と同じ値が xamount アトリビュートの値としてアサインされていることがわかる。 - attribwrangl1 の出力から、TAB->Polygon->PolyExtrudeを作成。
- Divide Into を Individual Elements に
- Distance を 1 に
- Front Group のトグルをオンに (後々使用)
- ずっと下のほう、Z Scale のトグルを オンにし、有効になったフィールドに attribwrangle1 ノードで定義した xamount を指定。
- 突き出しの値を面単位でランダム化するため、 TAB->Attribute->Attribute Randomize を実行。できた attribrandomize1 ノードを attribwrangle1 と polyextrude1 の間に挿入する。
- Attribute Class を Primitives に
- Attribute Name を attribwrangle1 ノードで定義した xamount に
- Operation を Multiply に
- Distribution タブ以下の Dimensions の値を1 に
Distribution タブ以下の Distribution を Uniform (デフォルト)から他に変える事で様々なランダム方法を試すことが可能。 - 突き出しの前面を着色するには、polyextrude1 の出力から TAB->Material->Color を実行。
- Group にpolyextrude1 で作成した extrudeFront を指定
- Class を Primitive に
- Color Type を Random に
これでほぼ同じことが出来た。 - H14 のサンプルファイルと同じように、この平面オブジェクトを三角関数を使って移動させ、影響範囲を限定するには、同じ要領が適用可能。まず、grid1 と attribwrangle1 の間に transform1 を挿入。
今回は、Hscript の代わりに Python を使って記述。 - transform1 と attribwrangle1 の間に Group ノードを挿入。
- Entry を Primitive に
- Operation を Group By Expression に
- Filter Expression に @P.x > 0
- このグループ (group1) を polyextrude1 の Group フィールドに指定し、再生すれば上記 H14と同じアニメーションを再現可能。
まとめ
- Hscript ベースから脱却し、VEX/Wrangle ベースに移行することで、より効率の良いネットワーク構築が可能になる。
- シーンファイル: h15_polyExtrude.hip (104KB)
- これからダウンロードするのであれば 15.0.297 以降を推奨。大幅なパフォーマンス向上およびバグ修正あり。
0 件のコメント:
コメントを投稿