通常COPで2つの画像をPhotoshop的に重ねたい時はComposite COP
を使うようですが、オーバーレイが見当たらなかったので、VOP COP2 Filter
を使った方法を考えてみました。
(Houdiniにおける解決パターンの最多ケース「見つけられないだけ」な気もするのですが、COPでのVOPの例として良さそうだったので書いてみます)
そもそもオーバーレイとは
Wikipediaのブレンドモード一覧を見ると、式はこのような形になっています。一見分かりづらいですが、これは乗算とスクリーンの合せ技です。aが下のレイヤーの色、bが上のレイヤーの色だとして、もしaが0.5より低い(暗めの色)だった場合は乗算、逆の場合(明るめの色)はスクリーンで合成すると、オーバーレイで合成したことになります。冒頭の画像の暗い部分、明るい部分に対する変化を見てもらえると何となく分かると思います。ちなみにa>0.5と反転した場合はハードライトになります。
COPでの組み方
2枚の画像をFileノードで読み、VOP COP2 Filterに繋ぎます。COPノードはいずれも左側(Input0)が前面、右側(Input1)が背面になっているので、それにならいます。ダブルクリックでVOPの中に入ります。
VOPで再現する
-
COPで2つ目以降の入力を使うには
COP Input
ノードを使います。globalのX,Yは画像サイズに対する0.0 - 1.0のfloatなので、実質UVとして機能します。input indexをそれぞれ0と1に設定しておきます。(通常のピクセル座標が欲しい場合は下のIX, IYを使います) -
明るさ判定は一番上の段で行っています。
-
Vector to float
でRGBを分解 -
Average
で明るさを算出 -
Compare
で明るさを0.5と比較 -
switch
で乗算かスクリーンかを振り分け という流れです。
-
-
スクリーンの処理に頻出する反転処理(1-x)には
Complement
が便利です。どちらも途中で2倍するためにMultiply
が入っています。
まとめ
無事After Effectsでのオーバーレイ合成と同じ結果になりました。
応用すれば他のブレンドモードや独自の合成処理も作ることができそうです。