2011-11-15

3Dコンポジット時のチャンネルについて

3Dコンポジットはとても有効。
たとえば演者がグリーンバック、ブルーバックで撮影された素材複数あるとして、それをキーアウトしてcardノードを用いて立体的に配置してやれば、ある程度のカメラワークにも耐えることもでき群集シーンにはとても適している。

それだけであれば、AfterEffectsでも可能だが、nukeの利点はカメラプロジェクション、プリミティブ以外のジオメトリの追加などいろいろと利点もある。

通常のrgbaだけならそんなに問題はないのだが、その他のエキストラのチャンネルの扱いには少し癖があるので、ちょっとした説明を。


こんな感じでアルファチャンネルを持ったcardノードが3枚ある。これらはすべて、通常のrgba以外に、[test]というチャンネルをRGBAで別に持っている。
ざっくりと説明して・・・

nodeA

nodeB

nodeC

それぞれ、上が[rgba]チャンネル 下が[test]チャンネル、左がRGA 右がA である。
nodeABCそれぞれ[rgba]として白色のマスクされた形状を持っており、nodeAは[test]チャンネルとして、同じ形状で赤でアルファありのもの。nodeBは[test]チャンネルとして何も持ってない。nodeCは[test]チャンネルとして青のアルファなしである。

これらをScanlineRenderノードを通してみると・・・

(ScanlineRender)

[rgba]チャンネルは上のようになる。おそらく「over」の計算式が適応されているようである。
[test]チャンネルはというと・・・
(ScanlineRender)


となり、

nodeAの円がnodeBの円によってくりぬかれてるのが確認できる。

nodeBの[test]チャンネルをもう一度見てみると・・・


下段[test]チャンネルにはRGBAともに何もないはずなのに、結果として、Bの円より後ろにあるAの円がくりぬかれている。
これは実は、「3Dコンプの合成計算式に用いるA(アルファ)はrgbaのAである」ということに起因している。
なので、nodeBのrgba.Aは真っ黒ではなく、ちゃんと塗り形状が存在し、overの計算式

output = A + B*(1-Aa)

ややこしいが、この場合で前景であるnodeBがA、背景であるnodeAがBである。
よって「Aa」の部分で

A が (nodeB.test.RGB)   a が (nodeB.rgba.A)

となる。
そのため、黒がアルファ値1によって上から塗られている状態である。
また、この3Dコンプのアルファチャンネルを見てみると

(ScanlineRender)

となり、どうやら、アルファの部分を別でさらに計算しているようで、

A が (nodeB.test.A)   a が (nodeB.rgba.A)

で計算しているようだ。
なので、nodeBのアルファを0にすると

nodeB

nodeBの[rgba]のアルファを0にした結果(ScanlineRender)
上記のアルファ(ScanlineRender)

となる。


nodeCの円弧のラインがAの円の上に透けているのが確認できる。



気をつけたいのはアルファは常に[rgba]のアルファを参照しているということである。
これをうまく使えば、グリーン素材とその背景の煙素材なども、普通にcardで配置して、煙のチャンネルだけを別に[smoke]チャンネルとかに格納して取り出せば、煙だけmerge operation(over, plus, screen等)を変えて乗せることが可能だ。



(ScanlineRender)
(ScanlineRender)

となり、mergeで結合すると



mergeの結果

が得られる。

No comments:

Post a Comment