2010-09-14

乗算済みアルファ

画像の合成処理において、乗算済みアルファ(premultiplied alpha)はとても有用な考え方です。単純な例では Fa*Fc+(1-Fa)*Bc が Fm+(1-Fa)*Bc で計算でき、乗算が一つ減ります(FはForegroundのF、BはBackgroundのB、aはAlpha、cはColor、mはMultiplied colorの意)。しかしこの式の場合は乗算済みアルファを使わなくても Bc+(Fc-Bc)*Fa と変形できるので、それほどメリットにはならないかもしれません。有用なのは共にアルファ(不透明度)を含む二つのピクセル同士を合成または補間するような場合です。このようなときの合成処理は不透明度付きピクセルのブレンドモード付き合成方法に書きましたが、不透明度を含むピクセル同士を合成してストレートアルファで結果を得ようとすると、どうしても最後に不透明度でカラー値を割る必要が出てきます。ピクセルごとに除算を行うのは処理速度上大変不利なので、できれば回避したいところです。乗算済みアルファでの合成結果は「カラー値×不透明度」が得られればよいので、最後に不透明度で割る必要がありません。また、不透明度を含めた双線形補間サンプリングにおいても乗算済みアルファは同様に力を発揮します。

このように色々とメリットのある乗算済みアルファですが、残念ながら私は普段使っていません。理由は二つ。一つはただでさえテンプレートで組み合わせ爆発気味の既存の合成処理ライブラリにもう一つピクセルフォーマットを追加してメンテナンスしきる自信がないこと。もう一つはピクセルごとに除算してもぎりぎり許容範囲内の速度が出てしまう昨今のPC事情。つまり、労多くして功少なしな感じがして、とてもやる気が起きないといったところでしょうか。

しかし時々猛烈に乗算済みアルファが使いたくなるときがあるのです。う゛ー。