アルファブレンド

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

αブレンド(アルファブレンド)とは、2つの画像を係数(α値)により合成すること。特にゲームの開発に必須の技術で、別々に描かれた背景とキャラクターとを合成するのに使われる。文字などのアンチエイリアスにも使われている。

透過方法の指定

合成にはマスク画像と呼ばれる、透過したい部分を定義した画像を用意し、それを基に、透過したい画像の透過を行う。画素にその情報を持たせて行うこともあり、その情報のことをアルファチャンネルという。マスク画像を別に用意せず、透過したい画像の任意の1色を透過色とすることもある。

マスク画像

マスク画像は、白黒2値のみで構成される画像を始め、256階調までのモノクロ画像が使われる。このとき、白を透過色とするか黒を透過色とするかは画像の形式やプログラムによってまちまち。灰色の部分は半透明になる。さらに、灰色の明るさで透明度が変化する。画像の縁の部分は半透明にすることでジャギーを目立たないようにアンチエイリアス処理できる。

クロマキー

透過する際に画像で使用されている任意の1色を透過色として合成を行うこともある。この場合、アルファチャンネルが扱える画像やプログラムがなくても済むだけでなく、マスク画像を用意する必要もないため手間は掛からない。そのかわり、透過色が使用されている部分が透過されるため、その色を使うことができないという欠点がある。解決方法としては、その色にきわめて近い色に置き換えるか他の色を透過色にする以外に方法はない。

めったに使われることのない色の代表として、赤100%、緑0%、青100%の色テンプレート:Colorや赤0%、緑100%、青0%の色テンプレート:Colorが有名。この色は自然界で目にすることはなく、見た目にも悪く、光が強烈で目が疲れやすくなるためほとんど使われない。そのため、この手法での透過色として使用するには最適である。

この手法では半透明を表現することもできない。そのため、アンチエイリアスのかかった画像ではエッジ(縁)が背景と馴染まず、ジャギーが目立つ。半透明にしたい部分に、透過色と半透明にしたい色とを交互に置くことで擬似的に実現する方法がある。GIFの透過にはこの手法が用いられている。

計算方法

テンプレート:See also 画像の任意の点におけるアルファブレンドの結果の画素値は以下のようになる:

<math>

\left\{ \begin{array}{l} out_A = src_A + dst_A (1 - src_A) \\ out_{RGB} = \bigl( src_{RGB} src_A + dst_{RGB} dst_A \left( 1 - src_A \right) \bigr) \div out_A \\ out_A = 0 \Rightarrow out_{RGB} = 0 \end{array} \right. </math>

なお、背景が不透明な場合、つまり、<math>dst_A = 1</math>の場合は上記に代入すると以下の通りになる:

<math>

\left\{ \begin{array}{l} out_A = 1 \\ out_{RGB} = src_{RGB} src_A + dst_{RGB} (1 - src_A) \end{array} \right. </math>

dstが背景で srcが前景である。αはα値と呼ばれる0〜1の値を取る係数でどれくらい透過させるかを表す値である。αが、1のとき完全な不透過であり、0のとき完全な透明となる。このαがアルファチャンネルまたはマスク画像に相当する。

この演算は Thomas Porter 及び Tom Duff の論文の src-over の演算に相当する[1]

一部のグラフィックスシステムでは,画像のRGB値として実際のRGB値にα値を乗算したものを格納する場合がある(Premultiplied Alpha)。この方式を使用するとアルファブレンドにおいてα値を乗算する処理を省略することができるが,その反面α値が小さい場合にRGB値の精度が低下する等の欠点がある。

参照

  1. Compositing Digital Images

関連項目