たとえば演者がグリーンバック、ブルーバックで撮影された素材複数あるとして、それをキーアウトして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]チャンネルはというと・・・
となり、
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