2011-12-19

Expressionノードに関して

RGBマスク(って呼ぶのでしょうか?)を出したときに、そのマスクを組み合わせたい場合、Shuffleノードなどでほしいチャンネルだけ分離してきて、それをmergeする なんてことをすればできますが、Expressionノードを用いれば複数のノードを用いなくても出来る場合があります。


たとえばこの画像が以下の3つのマスクのチャンネルを持っているとする。

チャンネル名:MultiMatteElementA

チャンネル名:MultiMatteElementB

チャンネル名:MultiMatteElementC
 たとえば、これらのマスクを組み合わせて、縦(?)一列ずつをRGBでそれぞれ区切りたい、つまり


というようにしたいとする。
Mergeノードを使うならば、MultiMatteElementA,B,Cとすべてplusで合わせてやればいい。

位置がわかりにくいのでハーフで乗っけました。左からMultiMatteElementA,B
こんな感じのMultiMatteElementAとBを


MergeノードのAコネクトとしてMultiMatteElementAを、BコネクトとしてMultiMatteElementBをplusで合わせる。でoutputとして今回は別に「maskA」というチャンネルを設けました。outputを指定することで、Mergeノードでの計算結果がそのoutputで指定されたチャンネルに格納されます。また、MultiMatteElementA,B,Cにはアルファチャネルがないので plus オペレーションで計算してます。
すると、ここまでで


maskAチャンネルとしてこんな結果を得ることが出来ます。
あとは、MultiMatteElementCに対しても同様にしてやると・・・


として、


を得る。
でも、Expressionノードを使うと・・・


channelsでmaskAを指定して、さらにredチャンネル固定で、式として

MultiMatteElementA.red + MultiMatteElementB.red + MultiMatteElementC.red

とする。同様にgreen、blueってやるとExpressionノード一つで得ることが出来る。要するに、Mergeノード2つでやっていた3つのチャンネルの足し算をExpressionノード一つでできる。
たとえば、ShufflleノードMultiMatteElementCをMultiMatteElementBなどに変換してやればShuffleとMergeの組み合わせでもできるが、Expressionノードを用いて一つで出来るほうがすっきりとはする。

次に、


というようなものを作ろうとすると・・・


こんな感じで、RGBを変換してやる必要があるのでShuffleノードなどで調整が必要だ。しかも、これだけやっても、得ることの出来る画像は


と一列分であと2回同様の工程が必要だ。
でもExpressionノードを使えば、


って感じで、一気に


を得ることが出来る。
また、


こんな感じでも、


として一つのExpressionノードで作成が可能だ。

さらに、計算式を少し工夫してやると、


これで、


って感じのものを作ることも出来る。

Expressionノードはコネクトが一つしかないが、MergeExpressionノードというものもあり、それは2つをソースに出来る。
なので、


とすると、このカラフルなグラデーションを動かすことができる。左右はループしている。



No comments:

Post a Comment