VFX実践講座 第8回 クロマキー合成 合成演算

クロマキーとはCHROMA KEYのことです。

CHROMAとは色相のことで特定の色相をキーとして抜くことによってその色を透明にすることができます。そうするとBG(背景)に別の画像や映像を置くことによって合成をすることができます。マスクが自動的に生成されたことになります。

合成は、

複数のレイヤーを演算処理によって重ね合わせることです。

重ね方にはルールがあります。

主な重ね方

加算(ADMIXアドミックス)
スクリーン

乗算
明るく
暗く

加算モード

Photoshop 覆い焼き(リニア)- 加算 英語版ではLinear Dodge (Add)
After Effects 加算(Add)
Nuke Mergeノード plusオペレーション

加算の計算式: A + B
RGBカラーは加法混色のため、値を足せば足すほど「光が重なったように」明るい色になる仕組みです。
しかも100%以上はこれ以上白くはなりません。そこが注意ポイントです。

乗算(Multiply)モード
乗算(Multiply)ブレンドモードの仕組みを知る必要があります。乗算は、「暗くする」ブレンドとして有名です。乗算とは「掛け算」のことです。

乗算の計算式: A × B

なぜ掛け算すると暗くなるかというと、A, Bが(通常)0~1の数字だからです。多くの場合、RGB値は小さくなり、暗くなるのです。もっとも、1を掛けた場合は、結果は変わりません。それから、0を掛けると0になります。そう、「黒を掛けると黒になる」わけです。

スクリーン(Screen)ブレンドモード

それでは、ようやくスクリーン(Screen)ブレンドモードの説明に入ります。乗算を理解すれば、スクリーンは簡単です。スクリーンは、ちょうど乗算の逆の効果と言えます。乗算では画像の濃度によって暗くなりますが、スクリーンでは逆に画像の濃度によって明るくなります。

Add_Screen_006_v002.png

なぜ乗算の逆の効果になるかというと、スクリーンはそのように設計されたからです。スクリーンの計算式を見てみましょう。

スクリーンの計算式: 1 – ( (1-A) × (1-B) )

(※A+B-AB という式で説明されることもありますが結果は同じです)

複雑な計算式に見えますが、よく見てみると「乗算の兄弟ぶん」のようなものです。式の中に3回ほど「1-x」が登場しますが、この部分は値を「反転」する処理を意味しています。つまりスクリーンの計算とは、「前景と背景をそれぞれ反転してから乗算して、最後に反転する」というものです。

Add_Screen_007_v002.png

またPhotoshopで実験してみましょう。Photoshopで「同じ画像」を2レイヤーつくってスクリーンで重ねてみます。結果は当然、明るくなります。

Add_Screen_008_v003.png

そしてこの処理は、「トーンカーブで中間調を上げる」というカラコレと同じ効果です(カーブの真ん中の値を1.5倍の高さまで上げると、そっくりの結果になります)。白のピクセルと黒のピクセルは変わらず、中間調だけを明るくします。

Add_Screen_009_v002.png

乗算とは逆に、白に近い部分のカーブが徐々に緩やかになっています。スクリーンは、白をブレンドすると白になりますが、白をブレンドしない限り白になりません。これがスクリーンの重要な特徴です!加算とはまったく違いますね。また、スクリーンはRGB値の足し算を行っていないので、光の計算としては正しくありません。はっきり言ってスクリーンは「加算のまがいもの」です。

ノンリニア・カラースペースで活躍するスクリーン

では「加算を使うべきか?スクリーンを使うべきか?」という重要な疑問に答えましょう!その答えは「場合による」です。

ここで、カラースペース(色空間)とガンマの問題について、少し理解しておく必要があります。駆け足で説明するため正確性は非常に欠けますが、なるべく分かりやすく説明してみたいと思います。

まず、おそらく専門家でなければ知らないことだと思いますが、私たちが見ているモニターには「ガンマ関数に基づいて画像を暗くするという性質」があります(1)。これをモニターのガンマ特性などと呼びます。その一方で画像データの方は、モニターの特性を打ち消すように明るくして保存されています。こちらは多くの場合、ガンマ補正(Gamma correction)と呼ばれています(ガンマについて詳しく知りたい方は別記事[ガンマについて]を参考にしてください)。

Add_Screen_010_v003.png

デジカメで写真を撮影するときなど、私たちが画像を保存するとき、一般的に(規格に基づいて)明るいデータで保存されているのです。このような画像はまっすぐな直線ではなく曲がったカーブで表されるので、「ノンリニア・カラースペース(Nonlinear Color Space, 非線形色空間)」の画像と呼ばれます。場合によってはビデオ・カラースペースとかsRGBカラースペースなどと呼ばれることもあります。

そして、ここからが重要なのですが、こういったノンリニアの画像はグラフィックソフトで加工するのに適していない場合があるのです。たとえばロン・ブリンクマン氏は著書の中で、「線形空間ではわずかな色補正が、非線形に符号化された画像に適用されるとかなり重大なものになります」と指摘した上で、「色補正または合成に用いる画像が非線形色空間にて保存されている場合は、予期しない結果を生じることが容易に起こりえます。常に画像を操作したり結合したりする前に線形化しましょう」と述べています(2)。ノンリニア画像では、ちょっとしたカラコレやブレンドでも、正しく計算されていないと言うのです。

しかし現実問題として、Photoshopをはじめ多くのソフトで、私たちは一般的にノンリニアで合成を行ってきました。そのため、実は加算は正常には働いていなかったのです。内部データが明るいため、異常に明るくなってしまいます。ノンリニアで使う加算は、非常に「白飛び」しやすく、扱いづらいブレンドモードとして有名です。

Add_Screen_011_v002.png

加算が白飛びしやすいことは、大きな問題を呼び寄せます。8bitや16bit色深度、つまり整数(Integer)計算では、一度白飛びさせてしまうと階調が失われてしまい、後から暗くする処理をしたときに汚くなってしまいます。この問題については別記事[After Effectsのレイヤー合成の仕組み]で触れていますが、なにもAfter Effectsだけの問題ではなく、Photoshop等の多くのソフトで起こり得る問題です。

このようにノンリニアでの加算はちょっとした問題児です。そこで生み出されたのがスクリーンです。マーク・クリスティアンセン氏によると「[スクリーン]はオーバーブライトをなくして、ビデオスペースで作業を行う際の生産性を高めるという目的のために開発された」とのことです(3)。スクリーンは白飛びしにくいので、ノンリニアではずっと扱いやすいのです。ただし、スクリーンだけではソフトすぎて発光感が出ないので、必要に応じて加算も使われます。

したがって、ノンリニア・カラースペースの作業で光を描くのが上手な人は、一般的に「スクリーンを多用した上で、必要に応じて加算を少し使う」といったバランス感覚を持ち合わせているように思います。

リニア・カラースペースで活躍する加算

しかし、加算の代用品としてスクリーンを使うというのは、その場しのぎの解決法とも言えます。ブリンクマン氏が言う通り、本来は「リニア・カラースペース(Linear Color Space, 線形色空間)」で加算する、というのが光の計算として正しい解決法です。そのためにはノンリニア画像をまっすぐな状態のリニア画像に変換する「リニアライズ(Linearization, 線形化)」という処理が必要です。これは、ソフトによっては機能が用意されているかもしれません。

たとえば、After Effectsにはリニアで作業するための機能がいくつかあります。最も簡単にトライできる方法は、After Effectsのプロジェクト設定を開き、[ガンマ値1.0でカラーをブレンド]のチェックを入れるというものです(4)。

Add_Screen_012.png

こうすると、レイヤーがブレンドされるときだけ、リニアで計算されるようになります。つまり、加算などのブレンドが「正常に」働くようになります。After Effectsでは他のやり方もありますが、Helpに詳しく記載されているため、ここでは割愛します(※なお、このカラー設定を使用するなら、必ず作業前に行うべきです。また、複数人による共同作業の場合、この設定を一致させなければ大変な混乱の元になりかねないので注意が必要です)。

Add_Screen_013_v002.png

一方、Nukeはデフォルトでリニア・カラースペースで、なおかつ1以上の値も扱う浮動小数(Float)計算を行うソフトです。ノンリニア画像を読み込むと、まずReadノードがリニアライズを行い、それ以降のコンポジットはすべてリニアで行われます。そのためNukeで光を描写する際は、plusオペレーションを使うべきです。逆に、1付近で効果を弱めるscreenオペレーションは、光の計算として正しくないため使うべきではありません。

ちなみに、Nukeのスクリーン計算式はもう少し複雑です。

Nukeのスクリーンの計算式 :
A+B-AB if A and B between 0-1, else A if A>B else B

NukeではAやBが1を超えるケースが想定されるため、AとBが0~1なら一般的なスクリーン計算を行い、AかBが1を超えていた場合は大きい方の値をそのまま結果として採用します。

総じて、リニア・カラースペースの作業で光を描くときは、「加算を使うべきで、スクリーンは使うべきではない」と言うことができると思います。

まとめ

いかがだったでしょうか。今回のポイントをまとめておきます!

◆加算は足し算。RGBカラーは加法混色なので、加算は本来光の計算として正しい。

◆乗算には、黒をブレンドしない限り黒にはならないという特徴がある。

◆スクリーンは乗算の逆。白をブレンドしない限り白にはならないという特徴がある。スクリーンは光の計算としては正しくない。

◆ノンリニア・カラースペースでは、加算は正しく働かず、異常に明るくなってしまう。そのためスクリーンが開発された。スクリーンを多用し、加算は必要に応じて少し使うと画づくりしやすい。

◆リニア・カラースペースでは、加算が正しく働く。光を描くときには積極的に加算を使用すべき。スクリーンは使うべきではない。

加算とスクリーンの仕組みや特徴がよく分かったのではないでしょうか?もちろん、ここに書いたのはあくまで理屈に過ぎません。実際に画づくりする際には、もっと柔軟に考えるべき場面もあるでしょう。大切なのは、いかに光を丁寧に描写して、魅力的な画をつくるか、ということです。魅力的な画づくりをする上で、加算とスクリーンの知識が役に立てば良いと思います!

http://compojigoku.blog.fc2.com/blog-entry-7.html

http://compojigoku.blog.fc2.com/blog-entry-4.html

http://www.cg-ya.net/2dcg/aboutimage/composite-is-math/

http://yamagishi-2bit.blogspot.jp/2012/06/aftereffectspremultiplyunpremultiply.html

http://shizukalog.blogspot.jp/2014/02/nukemerge.html

 


PDF