2013年7月24日水曜日

chromatic aberration その1

実写撮影素材のBGCGエレメントを合成する際に、
NukeでCG素材にのみ、実写素材に合わせた色収差を加えたい場合のcomposite…の提案です。
フルCGだと一番最後に全体でRGBを分離して、チャンネルをずらせばいいのですが、実写合成の場合は撮影された実写撮影素材にあわせた色収差をFG(CG素材)のみに適用して合成するのが理想だと思います。

FGBGを合成してから全体をRGB分解してずらした場合とFGBGを合成する前にFG(CG素材)をRGB分解してから合成した場合とでは結果が異なります。

例えば、、
今回はRチャンネルをx方向に10pixel移動させた色収差を考えてみます。

FGBGを合成してから全体をRGB分解してずらした場合 
FGBGを合成してから全体をRGB分解してずらした場合
FGBGを合成してから全体をRGB分解してずらした場合


FGBGを合成する前にFG(CG素材)をRGB分解してずらしてから合成した場合
FGBGを合成する前にFG(CG素材)をRGB分解してずらしてから合成した場合
FGBGを合成する前にFG(CG素材)をRGB分解してずらしてから合成した場合

FGBGを合成する前にFG(CG素材)をRGB分解してから合成した場合、
隣接するBGのピクセルがFG側にずれてこないため、望ましい結果が得られません。

その解決方法として、
 <FGBGを合成してから色収差を加えたもの>から、<BG単体で同じように色収差を加えたもの>を
MergeExpression nodeを使ってoverの逆算式を利用して分離します。

A = O - B * (1 - Aa) 

overの逆算式は山岸さんのyamagishi - 2bit -Blogを参考にさせてもらいました。

Nuke Overの逆算を使った画像処理テクニック 
http://yamagishi-2bit.blogspot.jp/2012/06/nukeover.html
 

MergeExpressionを使って分離
 
BG単体で同じように色収差を加えたもの
<FGBGを合成してから色収差を加えたもの>から、<BG単体で同じように色収差を加えたもの>を分離
合成画像

こうすることによって、隣接するBGのピクセルがFG側にずれたFGができます。
FGBGを合成してから色収差を加えたもの」のRGBチャンネルの扱いは、RGBAlphaを別々に扱うためにMergeExpressionで処理しています。

以上、他にも色収差を扱う方法がある気もしますが、提案として投稿してみました。
なにか他に良い方法などあれば、ご指摘ください。。