AfterEffectsからNukeへ
2014/6/30
Tag: AfterEffects,nuke
皆さん、お久しぶりです開発部の山口です。
最近弊社でも徐々にではありますが、Nukeが広まりつつあるので
今回は合成の基礎的なお話でもしようかと思います。
自分がデザイナーの時、AfterEffectsからNukeへ移行したときに
理解するのに苦労した所をいくつか紹介します。
透明がない!
Nuke学習時の始めに感じたのが、「透明」という概念が無いということでした。
PhotoShop、AfterEffectsとAdobe製品には画像をアルファチャンネルでくりぬき
画像の外側をチェッカーで描画する、透明を表現する機能があります。
この機能があると、レイヤーを上に重ねることで2つの画像を合成できるというのが感覚で
理解できるので、初めて合成する人にとってはとても分かりやすく便利なものです。
しかし、Nukeにはそういうものがないので、カラーとアルファチャンネルの関係を
しっかりと理解して合成しないといけません。
合成方法を理解するにはどうしたら言いか。
Nukeで画像を合成するにはMergeノードを使用しますが、AfterEffectsのようにレイヤー
を積み重ねていく方法ではなく、2つの画像を指定した方法で計算するという感覚で合成していきます。
そこでNukeには全ての合成方法が確認できる簡易的なtooltipがあります。
MergeノードのOperationのプルダウンのところでマウスをしばらく待機していると
下記のような画像が確認できます。
簡単に計算式の読み方を説明したいと思います。
Mergeノードは入力画像を求めるinputA,inputBの2つがあります。
toolTipのアルファベットは以下を表しています。
A : inputA に入力された画像のカラーチャンネルとアルファチャンネル
B : inputB に入力された画像のカラーチャンネルとアルファチャンネル
a : inputA に入力された画像のアルファチャンネル
b : inputB に入力された画像のアルファチャンネル
over(AfterEffectsでの通常合成)を例にすると計算式はA+B×(1-a)となり、
各チャンネルごとに、inputBをinputAのアルファチャンネルを反転したもので
乗算し、その結果にinputAを加算する、と言う流れになります。
画像で説明するとこんな感じですね。
以上が通常合成の仕組みです。
Mergeのoverを使用せずにノードの組み合わせでも再現できるのでぜひやってみてください。
他にもたくさんの合成方法があるので1つ1つ探っていけば思わぬ発見があるかも知れません。
Mergeノードの注意点
ここで気をつけたいのが、上記でも少し書きましたがアルファチャンネルに対しても
同じ計算が適用される所です。
まずoverの場合、以下のようになり問題はありません。
ですがadd(加算合成)の場合はそうはいきません。
例えばディフューズ素材とスペキュラー素材を合成する場合は以下のようになります。
一見問題ないように見えますが、数値を見ると重なっている部分のアルファチャンネルの
値が2倍になってしまいます。
その他、multiply(乗算)なども、アンチの部分の値が落ち込んだりします。
AfterEffectsでの合成に慣れていると、どうしてもカラーチャンネルのみに意識がいってしまうため
いつの間にかアルファチャンネルがとんでもない値になっていたり、気付かないうちに少しずつ変化している
なんてことになりがちなのですが、MergeノードのtoolTipを見てもわかるとおり、アルファチャンネルは
いたるところで使用されてるので、どこかの計算でおかしくなってしまうと、その後の処理全てに
影響してきます。
これを回避するには、合成に使用するチャンネルを常に意識し、必用に応じてアルファチャンネルの
計算をMergeノードから除外する必要があります。
アルファの情報がおかしくなった場合は、以下のいずれかの方法でアルファチャンネルの計算を
除外してみてください。
■ InputAのアルファチャンネルを0として扱う。
■ 出力時にアルファの値を除外する 1
■ 出力時にアルファの値を除外する 2
場合によっては、これを行うだけでは対処できないかもしれませんが
Nukeでは合成するチャンネルを常に意識することは、エラーのないコンポジットを
行う上でとても大切なことです。
アルファチャンネルの無視、ストレートマット、合成マット
Nukeには素材の読み込み時に下図のAfterEffectsのようなアルファに対しての設定がありません。
AfterEffectsでは、同じアルファを持つ素材を合成する時に”ストレートマット”を使用すると
素材を重ねていく度に周囲のエッジが黒く落ち込み、背景と合成する際にうまくなじまなく
なることがあるので主に”合成マット”を使用しますが、これは素材のカラーチャンネルに
アルファチャンネルが乗算された状態で出力されている所に原因があります。
ちなみにMayaから素材を出力する際に、レンダリングの設定で下記のチェックボックスをはずすと
アルファチャンネルが乗算されていない素材を出力することができます。
※Premultiplyというオプション名は、レンダリング時にカラーチャンネルにアルファチャンネルを
事前に(Pre)乗算(multiply)しておくということを表しています。
ストレートマットで合成すると、この乗算されたアルファチャンネルをそのままに合成して
いくとになり、合成時にそのアルファ分が積み重り、エッジの周囲に黒い淵が現れます。
このアルファチャンネルのPremultiplyをキャンセルするのがAfterEffectsでの”合成マット”に
なります。
よく見ると素材のエッジ部分に違いがあるのが分かると思います。
※カラー情報を透明の機能無しで見るには以下のオプションでRGB ストレートを選択します。
この処理により、素材からアルファチャンネルの情報が除外され、周囲に
黒ずみが出るのを防いでいます。
NukeではAfterEffectsのような、素材の読み込み時にアルファの設定をする場所がないので
代わりに”Unpremult”ノードを使います。
よく見れば、Un pre multiply と字面からも分かりますね。
また”Premult”というノードもあり、Maya同様にカラーチャンネルにアルファチャンネルを
乗算するためのノードで、主にUnpremultした素材を戻すために使用します。
ちなみに”Unpremult”、合成マットの計算方法はというと、乗算の処理を打ち消すには同じ
情報で除算してあげればいいので、アルファチャンネルが乗算されているならば
同じアルファチャンネルで除算してあげれば良いということになります。
Mergeノードの”divide”と言う合成方法が除算に当たるので
試しにこのノードを使ってカラーチャンネルを除算してみてください。
“Unpremult”と同じ結果が得られると思います。
※ちなみにAfterEffectsには合成モードで除算はありません。
おまけ
ちょっと内容が基礎的過ぎたのでもう少し。
1. 背景色のキャンセル方法
NukeではAfterEffectsでの”合成チャンネル – カラーマット”のカラー指定に
該当するものが有りません。
3Dソフトでまれに下記のようなBGカラーを含んだ、アルファチャンネル付きの素材を
出力してしまうことがありますが、
それの背景色をキャンセルする方法です。
あまり使い道無いですが…とりあえずやってみたいと思います。
といっても計算式を理解していれば簡単にできます。
このような画像は背景色(B)に本来出力したかった素材(A)を通常合成し
できた画像(C)です。
これを式で表すとこうなります。
C = A + B × (1-a)
で、背景色をキャンセルしたいと言うことはAを求めたいので
Aの結果を求めるように式を変形させてあげます。
A = C – B × (1-a)
これをNukeのノードで表現すると下記のようになります。
2. AfterEffectsのUnmultプラグイン
AfterEffectsにはRed Giant社から無償提供されている”Knoll Unmult”というプラグインがあります。
画像の輝度でマスクを作るプラグインですが、光のエフェクトの輝度でマスクを作り
ステンシルアルファなどでマスクすると、半透明の部分のカラーが黒ずんでしまうのですが
これを使用すると半透明の部分のカラーを綺麗に保つことが出来ます。
もしかしたらすでにピンときてる方もいるかもしれませんが
これ”Un multiply”の略語で、NukeのUnpuremultに似ている挙動をします。
画像の輝度をアルファとして使用し、Unpremultのようにカラーチャンネルに
対し、除算することで半透明の部分のカラーを持ち上げ、黒くならないようにしています。
AfterEffectsでは除算する合成方法がないので重宝するプラグインですね。
最後に
以上のように、合成を単にレイヤーを重ねるものではなく、二つの画像を
計算するもとのして考えていくと、コンポジットのエラーを防げたり
今まで素通りしていた部分に思わぬ発見があったりと、コンポジットへの
新しいアプローチの道が開けるかもしれませんね。
コメント
コメントフォーム