こちらは、 Houdini Apprentice Advent Calendar 2024 の10日目の記事になります。
Attribute VOPを複製したくなった時の小ネタ。
Attribute VOPはReference Copyをしても中身が継承されません。 ※Reference Copyをした最初の一回だけは継承されます。
ネットワークのいろいろな部分でAttribute VOP使いたいんだけど中の処理を試行錯誤もしたくて…というときにつかえるかもしれません。
Sample File
attributeVOP.hiplc - Google ドライブ
Attribute VOPをAttribute VOPで呼び出す
Attribute VOPはAttribute VOPを呼び出すことができます。

設定の仕方
親にしたいAttribute VOPでは普通に中でノードを作成します。
子にするAttribute VOPの方はVex SourceをSHOPに変更し、Shop Pathを親にしたいAttribute VOPのパスにします。

それぞれでパラメーターなどを変えたい場合は、Detail Attributeを活用して親のAttribute VOP内でDetail Attributeをパラメーターに繋いでおくことで、それぞれの結果を変えることも可能です。


そうするとこのAttribute VOPを実行する際にこのShop PathのAttribute VOPを実行することになるので、子のAttribute VOPの中身がどうなっていても無視されて親のAttribute VOPの結果が出力されます。
もちろんInputやAttributeは繋がっているものが評価されるので、Attribute VOPが複製されたかのような動作をさせることができます。
Compile BlockとInvoke
Compile BlockとInvokeを使用するとCompile Block内の処理をネットワークの別の部分で呼び出すことができます。
いくつかのノードで構成された処理も別の部分で呼び出せるので、複雑な処理をする場合に便利です。(※Spare Inputや対応していないノードがあるなど注意点はある)
なのでこれを使用してAttribute VOPを呼び出すことでAttribute VOP内の変更をネットワークの他の部分にも反映させることができます。

設定の仕方
作り方は簡単で、Compile Blockを呼び出してひとまとめにしたい処理を囲います。

Compile BeginのInputに好きな文字列を入れ、

Invokeノードの方でCompile BlockにCompile Endのノードへのパスを設定し、Input Nameに先ほどCompile Beginで設定したInputの文字列を入れます。

もし呼び出した先と内部の処理を変えたいなどがあればDetail Attributeにパラメーターの値を書き込み、
Attribute VOP内で使用することでInvokeで呼び出した部分と処理を変える、なども可能です。

vflファイルを使用する
致命的にインタラクティブ性がないです。
このvflファイルはこういう用途に使うというよりは、何かものすごく複雑な処理を作成したのち、ノードでの共有ではなくコードベースでチームなどで共有することを目的としたものになります。
Wrangle内で#include <hogehoge.vfl>などを使用して呼び出すこともできます。
vflファイルを作るときにVOPで作ってしまう!というのはデザイナー側としてはかなり便利だとも思うので話は少し逸れますがそういった使い方もできます。
設定の仕方
親にしたいAttribute VOP上で右クリック、View VEX Codeを選択します。

すると出てくるCVEXのコードをコピーしてテキストなどに貼り付けて拡張子を.vflで保存します。

そして子にするAttribute VOPでVex SourceをScriptにし、Scriptにファイルパスを指定します。(※環境変数を設定したりするともっと楽だったりとかいろいろあります)

私も詳しいわけではないので、細かく突き詰めたい場合はこの辺りとかのヘルプを読んでください。