情報は力ではない

UE4 とか Blender とか。

VEX でカスタム COP を作成してみる

VEX でカスタム COP 作れるということだったのでやってみた。自分用にまとめておきます。

※ 2020/4/25 追記 下記の「VEX」で記載している処理は自身の理解不足により誤った記載をしており、期待した結果になりませんでした。調査した後、訂正したいと思います。

基本

基本は VEX を .vfl ファイルに記述して vcc でコンパイルし HDA 化する。 今回は COP で使用できる HDA を作るので、メイン関数で指定するコンテキストは cop2 にしておく。演算の結果は RGBA 変数に格納する。

題材

今回練習として作成したのは、4つの画像からそれぞれ指定したチャンネル (RGBA) を取り出して、それぞれを異なるチャンネルに格納し、一つの画像にまとめるような HDA ファイルを作成してみました(一般にこういう処理がどういう名前で呼ばれているのか知りたい)

VEX

今回書いた VEX は以下です。

VEX でカスタム COP 作成

VEX の説明

そこまで難しいことは書いてないので簡単にしか説明は書かないですが Houdini の UI に見える部分はプラグマで設定して、処理は関数で実行という感じ。

ノードの名前とかパラメータとかはプラグマで設定しています。各プラグマの細かい説明は公式ドキュメントがそこそこ詳しいので今回は省きます。今回の題材は4つの画像が必要なので、opmaxinputs でインプットの数を4つに設定しています。choice を使用することで Houdini の UI でパラメータをリストから選択できるようにしています。

sample 関数はインプットの (IX、IY) から指定したチャンネルの値を取り出す関数です。useChannel の 0 ~ 3 がそれぞれ RGBA に対応しています。IX、IY はピクセルの位置を表すグローバル変数です。

sample_merge 関数がメイン関数でコンテキストに cop2 を指定しています。 インプットの4つの画像から指定したチャンネルの値を取り出して、それぞれ RGBA に値を格納しているだけです。

コンパイル

これをコンパイルして HDA にします。

vcc -l sample_merge.hda sample_merge.vfl

作成した HDA をインポートしたら HDA として使えます。下図は使用している図で、4つの画像の B チャンネルを1つの画像にまとめようとしているところです。

f:id:masahiro8080:20200418163605p:plain

今回は簡単ですが、これで終わり。

参考