On this page |
VOPまたはVEXコードによってカスタムCOPを作成することができます。VEXで作成したカスタムCOPは、他のジェネレータとフィルターに非常に似ていますが、さらにいくつかの機能が追加されています:
-
VEXベースのジェネレータすべてには、標準のジェネレータと同じ特性があります。
ジェネレータには入力がありません。ノードで画像サイズ、データフォーマット、フレーム範囲、平面を設定します。
-
VEXベースのフィルターは、1番目の入力からシーケンスの設定(画像サイズ、データフォーマット、フレーム範囲、平面)を引き継ぎます。
VEXベースのフィルターすべてに、ピクセル単位でフィルターのエフェクトを制御できるmask inputがあります。
VEXベースのコンポジットノードは以下のことができません:
-
シーケンスパラメータの変更。つまりシーケンスの長さや開始位置、解像度、または既存平面のデータフォーマット。
-
複数出力ピクセル位置への同時書き出し。
-
データに対して2つ以上のパスの実行(マルチパスアルゴリズム)。
-
全体的に計算されるデータ(画像の平均的な輝度など)の効率的な使用。ノードはピクセル毎にVEXスクリプトを実行するので、グローバルデータはピクセル毎に再計算する必要があります。
キーコンセプト ¶
-
VEX/VOP COPは
R
、G
、B
、A
またはCr
、Cg
、Cb
、C4
の変数セットのどれかに書き出さなければなりません。R
、G
、B
、A
は直接カラー平面のC.r
、C.g
、C.b
とAlpha
にマッピングします。Cr
、Cg
、Cb
、C4
は現在処理している平面の成分にマップします。 -
これらの変数はすべて読み込み、書き込み可能です。ジェネレータでは、これらの変数はブラックの設定になります。フィルターでは、これらの変数には、入力#1で該当する画像平面の値を含みます。
-
X,Yは現在のピクセルの位置を0-1の範囲の値で返します。IX,IYは現在のピクセルの位置を0~XRES-1, 0~YRES-1の範囲で値を返します。
-
別々の平面を別々に処理したいときがよくあります。(例えば、ColorとAlpha)。それをするには、処理したい平面(colorname、alphanameなど)に対して
PNAME
変数(現在の平面の名前)をテストすることで可能です。
他のピクセル位置、画像平面、フレーム、他の入力を読み込むには:
VOP
COP Input VOPは、読み込みたいピクセルの入力、平面、フレーム、ピクセル位置を拾うことができます。さらにフィルターの方法-フィルターなし(高速)、バイリニア(サブピクセルの精度用)、フルフィルター(遅いですが、途切れない変換・変形に最適)-を指定することもできます。
VOPからカスタムCOPを作成する ¶
-
TabメニューでVEXサブメニューからVOP COP2 Generator DefinitionまたはVOP COP2 Filter Definition( Managers サブメニューの中)を作成します。
-
そのノードの中に入って、VOPネットワークに移動します。
-
Global Variables VOPを作成します。おそらくこれらの変数のいくつかを使う必要がでてきます。
-
Color/Alphaのみに影響を与えたいならば、
R,G,B,A
出力を使います。通常は任意の平面や特定の平面に影響を与えたい場合、Cr,Cg,Cb,C4
を使います。R,G,B,A
またはCr,Cg,Cb,C4
(同時に両方書き込むことはできなくても、どちらかから読み込むことができます)からそれに該当する入力の値を読み込むことができます。 -
パラメータを作成するために、Parameter VOPを制御したい入力に接続します。
-
VOPネットワークをセットアップしたら、VOP COP2 Generator/Filterノードに戻ります。それらのノードの名前を、人が理解できる名前に変更します。新しいノードのパラメータエディタで表示されるパラメータの順番を並べ替えることもできます。
-
新しいオペレータのインスタンスを作成してテストします。
VEXコードからカスタムCOPを作成する ¶
-
拡張子が
.vfl
のテキストファイルを作成します。(例えば、myFunction.vfl)。ファイル名はVEX関数の名前に合わせることを推奨します。 -
VEX関数を書く時は、コンテキスト名
cop2
を使います。 -
関数の結果は
R,G,B,A
またはCr,Cg,Cb,C4
に書き出します。 -
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 Generator と VOP 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)で決まります。