Houdini 20.0 コンポジット

VOPによるカスタムCOPの作成

On this page

VOPまたはVEXコードによってカスタムCOPを作成することができます。VEXで作成したカスタムCOPは、他のジェネレータとフィルターに非常に似ていますが、さらにいくつかの機能が追加されています:

VEXベースのコンポジットノードは以下のことができません:

キーコンセプト

  • VEX/VOP COPはRGBAまたはCrCgCbC4の変数セットのどれかに書き出さなければなりません。 RGBAは直接カラー平面のC.rC.gC.bAlphaにマッピングします。CrCgCbC4は現在処理している平面の成分にマップします。

  • これらの変数はすべて読み込み、書き込み可能です。ジェネレータでは、これらの変数はブラックの設定になります。フィルターでは、これらの変数には、入力#1で該当する画像平面の値を含みます。

  • X,Yは現在のピクセルの位置を0-1の範囲の値で返します。IX,IYは現在のピクセルの位置を0~XRES-1, 0~YRES-1の範囲で値を返します。

  • 別々の平面を別々に処理したいときがよくあります。(例えば、ColorとAlpha)。それをするには、処理したい平面(colornamealphanameなど)に対してPNAME変数(現在の平面の名前)をテストすることで可能です。

他のピクセル位置、画像平面、フレーム、他の入力を読み込むには:

VOP

COP Input VOPは、読み込みたいピクセルの入力、平面、フレーム、ピクセル位置を拾うことができます。さらにフィルターの方法-フィルターなし(高速)、バイリニア(サブピクセルの精度用)、フルフィルター(遅いですが、途切れない変換・変形に最適)-を指定することもできます。

VEX

cinputbinputfinput関数は、それぞれフィルターなし、バイリニア、フルフィルターの入力関数に相当します。さらにVEXにはninput関数があります。これは、ピクセル中心部分3×3とその近隣をマトリックスで返します。この関数はコンポーネント毎に処理されるので、つまりカラーでは3回コールされる必要があります。

VOPからカスタムCOPを作成する

  1. TabメニューでVEXサブメニューからVOP COP2 Generator DefinitionまたはVOP COP2 Filter Definition( Managers サブメニューの中)を作成します。

  2. そのノードの中に入って、VOPネットワークに移動します。

  3. Global Variables VOPを作成します。おそらくこれらの変数のいくつかを使う必要がでてきます。

  4. Color/Alphaのみに影響を与えたいならば、R,G,B,A出力を使います。通常は任意の平面や特定の平面に影響を与えたい場合、Cr,Cg,Cb,C4を使います。R,G,B,AまたはCr,Cg,Cb,C4(同時に両方書き込むことはできなくても、どちらかから読み込むことができます)からそれに該当する入力の値を読み込むことができます。

  5. パラメータを作成するために、Parameter VOPを制御したい入力に接続します。

  6. VOPネットワークをセットアップしたら、VOP COP2 Generator/Filterノードに戻ります。それらのノードの名前を、人が理解できる名前に変更します。新しいノードのパラメータエディタで表示されるパラメータの順番を並べ替えることもできます。

  7. 新しいオペレータのインスタンスを作成してテストします。

VEXコードからカスタムCOPを作成する

  1. 拡張子が.vflのテキストファイルを作成します。(例えば、myFunction.vfl)。ファイル名はVEX関数の名前に合わせることを推奨します。

  2. VEX関数を書く時は、コンテキスト名cop2を使います。

  3. 関数の結果はR,G,B,AまたはCr,Cg,Cb,C4に書き出します。

  4. COPをHDA(Houdiniでコードを利用する一番簡単な方法)にコンパイルするには、次のコマンドラインを使います:

    vcc -l myfunction.hda myfunction.vfl 
    

    これは新しいCOP用のHoudini Digital Asset (HDA)を生成します。これは他のHDAライブラリ(例えば、OPlibCOP2.hda)と結合したり、またはHoudiniに直接インストールすることができます。

Note

関数の引数は、新しいノードタイプではパラメータとして表示されます。#pragmasを使うことで、タイプ、名前、範囲、メニューアイテムを設定して、パラメータの挙動を無効にすることができます。

COP vopnetで使用するカスタムビルディングブロックVOPを作成する

他のVOPコンテキストと同様に、COP vopnet内で使用するカスタムHDA VOPを定義することができます。 これらのHDAには、COP vopnetの親によって最終的に表現されるVEXプログラムに挿入されるVEXソースコードのスニペットを用意します。

コードのスニペットは、そのHDAがサブネットの場合なら子VOPによって定義したり、そのHDAがスクリプトベースの場合ならOperator Type Editorで明示的に定義することができます。

サブネットHDAを作成するには、選択したVOPノードをサブネットワークに格納してから、 > Create Digital Asset をクリックします。

スクリプトHDAを作成するには、 File > New Operator Type をクリックして、 VEX Builder Type を選択します。

Node タブには、そのHDAを VOP COP2 GeneratorVOP COP2 Filter の両方のvopnetで表示させたいのであれば、cop2*を指定します。 そのHDAを VOP COP2 Generator にのみ表示させたいのであれば、cop2genを、 VOP COP2 Filter にのみ表示させたいのであれば、cop2filterを指定します。

COP入力からデータをVEX/VOPに渡す

1番目の入力がVEXパラメータの名前に一致する平面を持っていれば、ノードはその入力平面をパラメータの値として使います(事実上、パラメータの上書き)。ノードは、ピクセル単位基準で平面から多重化されたパラメータを評価します。

例えば、COPが次の平面を持っていると仮定します:

  • C{r,g,b}

  • A

  • fogdens

これらがVEX Fog COPに伝わります。Fog Densigyパラメータのチャンネル名がfogdensなので、フォグの密度はfogdens平面によってピクセル毎に決まります。

エクスポートしたVEX変数から新しい平面を作成する

カスタムCOPのVEXスクリプトが変数をエクスポートしている場合、HoudiniはVEXパラメータと同じ名前の平面を新しく作成します。その平面が既に入力シーケンスに存在するなら、VEXバージョンの平面に置き換えられます。各VEXタイプはCOPデータタイプとマッピングします:

VEXタイプ COPタイプ
int 単一チャンネル32ビット整数
float 単一チャンネル32ビット浮動小数点
vector 3つのチャンネルの32ビット浮動小数点
vector4 4つのチャンネルの32ビット浮動小数点
matrix3 3行3列のチャンネルの32ビット浮動小数点
matrix4 4行4列のチャンネルの32ビット浮動小数点

新しい平面は、32ビット浮動小数点として作成されます(32ビット整数の整数平面を除く)。そしてベクトルサイズはエクスポートした変数のタイプ(float、vector、vector4)で決まります。

コンポジット

基本

レイヤ

カメラエフェクト

上級

導師レベル