No More Retake

3DCG屋さん向けTips&Referenceサイト

メニュー

Houdini:Wedge(TOP)

Houdiniノード勉強回。サンプルファイル->WedgeTOP_Sample.hiplc

Houdini17.5から追加されたPDG。タスク管理やディペンデンシーを管理する機能です。
まだ私もあまり、使いこなせてないのでメモも兼ねて書いてきます。
Wedge(TOP)は、パターン出しとかをTOPで制御するときに使うやつで、Wedge(ROP)のTOP版。

以下、使用例。Pyroのシミュレーション違いを5パターン、ローカルで作ってみます。こんな感じ。


最初に、Wedgeの対象にTab Menuから”Pyro Configure Billowy Smoke”を作っておきます。

キャッシュ保存用のFileCache(SOP)と、参照用のNullもついでに。

Step1:”TOP Network”に切り替えます

/tasksに移動すると、topnet1ノードがあるのでその中に入ります。自分でTOP Networkノード作ってもOK

Step2:Wedge(TOP)を作る

Tab MenuからWedge(TOP)を作ります。

ノード作っただけでは機能しません。設定とタスク作成が必要です。

Step3:パラメータ設定

パラメータの設定をします。細かいところはマニュアル参照として、大事なところだけ。

  • Wedge Count・・・作りたいパータンの数。
  • Wedge Attributes・・・バリエーションを作りたいアトリビュート。+ボタンを押したりして、作りたい分のアトリビュートを作成します。

ひとまず今回は、こんな感じに設定しました。

※Wedge(TOP)にはアトリビュートの設定方法が大きく分けて2つある。

ひとつはパラメータTarget Parameterを指定し、任意のパラメータにバリエーションを作成する方法。
これは従来のWedge(ROP)の設定と同じ感覚。任意のパラメータをWedge(TOP)でオーバーライドすると言い換えられるかも。
もう一つは上記の例のようにパラメータTarget Parameterを設定しない方法。
この場合、Wedge用の任意の変数が作られる。Wedgeを使いたいパラメータにアトリビュート参照のエクスプレッション(@アトリビュート名)を書けば、いろんな場所で参照できるので便利。しかし、TOPネットワークがなければ機能しないので、注意も必要。
マニュアルには、Pull vs .pushとして記載されている箇所がそれかな。以下は、2つ目の変数を作る方法で行う。

Step4:タスクを作成する

Wedge(TOP)を選択して、Shift+Gキーを押します。

図のように、緑の●が5つノードに追加されます。Step3で、Wedge Countを5に設定したので、5つタスクが作られました。
ちなみに、この●を中クリックするとタスクの情報が見られます。

wOffsetというアトリビュートとその値が確認できました。

Step5:対象先パラメータを設定

バリエーションを作りたいパラメータにエクスプレッションを記述します。
Step3で作成したアトリビュート名を@を付けて記述します。通常のアトリビュート参照と同じですね。
この方法で作ったWedge変数は、特に指定しなくともエクスプレッションでの記述に使えて便利です。

これで、Wedge(TOP)のタスクごとに、異なる値が設定されます。

うまく設定されると、上図のように、Wedge(TOP)のタスクを切り替えることで、数値も変わるはず。

Step6:キャッシュを保存する

シミュレーションキャッシュを保存します。

TOPネットワークに移動し、ROP Geometry Output ROP(TOP)を作成します。

マニュアル曰く、このノードはROP Fetch(TOP)とGeometry(ROP)で作られた複合ノードだそうですが、出力用TOPノードという認識で間違いないはず。
パラメータを設定します。

パラメータSOPには、キャッシュを取りたい場所のノードを指定。
OutputFileで出力先を設定する際、@wedgeindexと記述しておくと各Wedgeの通し番号がつきます。
あとはシミュレーションなので、Initialize Simuation OPsを有効のしてます。

結果確認用に、SOP側にFileCache作って、出力先をリンクしておきます。

ROP Fetchタブでタスクの設定をします。
All Frame in One Batchを有効にしておきます。シミュレーションの場合はONです。

※ローカルマシン一台で計算する場合

TOPの利点は複数タスクを並列に処理できることだが、メモリとCPUを沢山使う重い処理をする場合は、ローカルマシン一台だと並列処理は不可能。並列処理しないようにスケジュールを設定する。
新しくLocal Scheduer(TOP)を作成し、それで並列処理したくないノードを制御する。
まず、Local Scheduer(TOP)を別途作成、下図のパラメータSingleを有効にする。これが有効だと強制的に1個のワークアイテムのみを処理する。(

シングル処理したいTOPノードに、このLocal Scheduer(TOP)を指定。パラメータの”Schedulers”タブにあるTOP Scheduler Overrideってパラメータがそれ。

これで、シミュレーションとかのメモリ沢山喰う処理とかは、一度に一回しか実行されなくなる。

これやらずに、おうちマシン一台でシミュレーション計算させてたら、何度やってもHoudiniが落ちるから調べた。これであってるか自信はないけど、マシンは落ちなくなった。

deadlineスケジュールの挙動が気になるところ。そのうち試してみよう。

Step7:TOPネットワークを繋ぐ

Wedge(TOP)とROP Geometry Output(TOP)を繋ぎます。
ついでにPartition by Attribute(TOP)を作成して、ネットワークの一番下につなげます。

Partition by Attribute(TOP)の設定は下図の感じで。上流で沢山できたタスクをネットワークまとめる設定です。

Step8:Cook

一番下の、Partition by Attribute(TOP)の選択して、Shift+G。
もしくは、メニュー[Task]->[Cook Selected Node]

これで、上流からドンドン処理が実行されます。

処理が最後まで行けば完了。
WedgeかPartition by Attributeのタスクをポチポチやって、結果を確認します。


以上!間違ってたら、だれか教えて!

サンプルファイル->WedgeTOP_Sample.hiplc

(Houdini18.0.416)

関連記事

  1. 2019.04.09

    Houdini:Damping V&W

コメントをお待ちしております

このサイトについて

3DCG Tipsサイト。Houdiniの記事が多めです。

RSS

follow us in feedly

言語切り替え

  • English (United States)
  • 日本語

Archives

  • 2020 (37)
  • 2019 (16)
  • 2018 (33)
  • 2017 (29)
  • 2016 (36)
  • 2015 (64)
  • 2014 (54)
  • 2013 (60)
  • 2012 (55)

スポンサードリンク