premultiply = RGB scaled(multiplied) by alpha
unpremultiply = RGB not scaled(multiplied) by alpha無理矢理日本語に訳すと
premultiply = あらかじめ乗算する
unpremultiply = あらかじめ乗算されていない
具体的にはpremultipliedなイメージというのは、CGIやキーイングしてアルファ付きで出した素材などがこれにあたります。もちろんレンダリング時にpremultiplyしてなければなりませんが。
それでは前回のコンポジットをカラコレしてみましょう。
offsetはAddと同じでRGBの値を0.2加算するということです。左のツリーを見てわかるように前景の透明部分も加算がかかっています。 前回書いたようにoverの計算式はA+B(1-a)で表されます。A+0.2+B(1-a)となり画像全体が持ち上がった画になります。
AfterEffectsやPhotoshopの場合、アルファを持つイメージをカラコレしたとき、アルファが0の部分には影響されません。アルファが0の部分は透明でピクセルが存在しないとして扱われます。そのためAfterEffctsやPhotoshopではアルファを持つイメージをレイヤーで重ねるだけで合成できます。
これに対してNukeの場合はRGBとアルファは別のレイヤーとして扱います。
3Dソフトではデフォルトでpremultipliedした画像を出力します。premultipliedした画像のRGBは、RGBとアルファの値が乗算されています。アルファが0の部分は、CGの場合ソフトで設定した値(通常は黒)になります。エッジの部分はRGBに対して半透明なアルファをかけています。
アンチエイリアスされたアルファ
一旦Unpremultしてからカラコレします。UnpremultとはRGBをアルファで除算してやることです。そうすることでアンチエイリアスされていないRGBが得られます。
Unpremultiplyされた状態でカラコレを行います。
それからPremultします。そうすればアルファが0の部分は0になります。
これを合成すれば求める結果が得られます。
最終コンポジット
この辺りはShakeと同じです。Shakeの場合はUnpremultにあたるのがMDivで、PremultにあたるのがMMultです。
今回のカラコレはわかりやすくする為にoffsetだけでしたが、gammaはアルファが0の部分は変化しないのでわかりにくいですが半透明の部分が沈んだりします。
premulitipliedされたイメージをカラコレする場合にはUnpremultしてカラコレ、さらにPremultをかける。
No comments:
Post a Comment