
コンピュータグラフィックスでは、アルファ合成またはアルファブレンディングとは、1 つの画像を背景と合成して部分的または完全な透明に見えるようにするプロセスです。[ 1 ]画像の要素(ピクセル) を別々のパスまたはレイヤーでレンダリングし、結果として得られる 2D 画像を合成と呼ばれる単一の最終画像に結合することがよく有効です。合成は、コンピュータでレンダリングされた画像要素と実写映像を組み合わせる際に映画で広く使用されています。アルファブレンディングは、 2D コンピュータグラフィックスでラスタライズされた前景要素を背景の上に配置する場合にも使用されます。
画像内の画像要素を正しく組み合わせるためには、各要素の色に加えて、関連付けられたマットレイヤーを保持する必要があります。このマットレイヤーには、描画されるジオメトリの形状、つまりカバレッジ情報が含まれており、画像内で何かが描画された部分と空白の部分を区別することができます。
2つの画像を合成する最も基本的な操作は、一方をもう一方の上に重ねることですが、実際には多くの操作、つまりブレンドモードが用いられています。
アルファ チャネルの概念は、1970 年代後半にニューヨーク工科大学のコンピュータ グラフィックス ラボでAlvy Ray SmithとEd Catmullによって導入されました。Bruce A. Wallace は、1981 年に物理的な反射率/透過率モデルに基づいて同じストレート オーバーオペレーターを導出しました。 [ 2 ] Thomas PorterとTom Duffによる 1984 年の論文では、幾何学的アプローチを使用して乗算済みアルファが導入されました。[ 3 ]
アルファという用語の使用について、スミスは次のように説明している。「古典的な線形補間式に基づいて、私たちはそれをそう呼んだのです。」ギリシャ文字を使用する(alpha) は、この場合、2 つの画像 A と B の間の補間量を制御する。[ 4 ]つまり、画像 A を画像 B の上に合成する場合、この式では、Aのアルファチャンネルから直接取得されます。
2D画像では、各画素(ピクセル)ごとに色の組み合わせが格納されます。多くの場合、赤、緑、青(RGB)の組み合わせです。アルファ合成を使用する場合、各ピクセルにはアルファチャンネルに0から1までの数値が格納されます。値が0の場合は、ピクセルが完全に透明で、下のピクセルの色が透けて見えます。値が1の場合は、ピクセルが完全に不透明です。
アルファ チャネルが存在すると、合成代数を使用して合成画像操作を表現することができます。たとえば、2 つの画像AとBが与えられた場合、最も一般的な合成操作は、A が前景に、B が背景に表示されるように画像を合成することです。これは、 A over Bと表現できます。 overに加えて、Porter と Duff [ 3 ] は、概念的に直交して重ね合わされた 2 つのピクセルの色をブレンドする際の選択を考慮して、 、hold out by (このフレーズはホールドアウト マッティングを指し、通常はout と略されます)、atop、およびxor (およびその逆演算子rover、rin、rout、およびratop ) の合成演算子を定義しました。
![]()
例えば、オーバー演算子は、各ピクセルに次の式を適用することで実現できます。[ 2 ]
ここ、そしてはそれぞれ、各カラーチャネル(赤/緑/青)に個別に適用された「オーバー」の結果、画像A、および画像Bのピクセルの色成分を表します。、そしてこれらは、それぞれのピクセルのアルファ値です。
オーバー演算子は、実質的に通常のペイント操作です(ペインターのアルゴリズムを参照)。イン演算子とアウト演算子は、アルファ合成におけるクリッピングに相当します。この2つは、2番目の画像のアルファチャンネルのみを使用し、カラー成分を無視します。さらに、プラス演算子は加算ブレンドを定義します。[ 3 ]
画像でアルファチャンネルを使用する場合、一般的に利用できる表現方法は2つあります。ストレート(非関連)アルファとプリマルチプライド(関連)アルファです。
乗算済みアルファの最も重要な利点は、正しいブレンド、補間、フィルタリングが可能になることです。乗算済みアルファを使用しない通常の補間では、本来は見えないはずのRGB情報が完全に透明な(A=0)領域から漏れ出してしまいます。透明領域と不透明領域の境界が急な画像を補間またはフィルタリングすると、元の画像では見えなかった色の境界が生じる可能性があります。また、RGB成分の重みが正しく設定されていないため、半透明領域でもエラーが発生し、より透明な(アルファ値が低い)ピクセルの色に誤って高い重みが付けられてしまいます。[ 5 ]
乗算済みアルファは、通常のアルファブレンド領域(煙など)と加算ブレンドモードの領域(炎やグリッター効果など)を同じ画像内にエンコードするためにも使用できます。[ 6 ] [ 7 ]これは、遮蔽のない発光を表すRGBAトリプレット(0.4、0.3、0.2、0.0など)で表されます。
乗算済みアルファのもう 1 つの利点はパフォーマンスです。特定の状況では、乗算演算の数を減らすことができます (たとえば、後続の合成で画像が何度も使用される場合)。Porter – Duff 演算は、乗算済みアルファでのみ単純な形式になります。[ 3 ]一部のレンダリング パイプラインは「ストレート アルファ」 API サーフェスを公開しますが、パフォーマンスのために乗算済みアルファに変換します。[ 8 ]
乗算済みアルファの欠点の1つは、カラーコンポーネントに整数または固定小数点表現を使用する場合、RGB値の相対精度が低下する可能性があることです。これにより、後でカラー情報が明るくなったり、アルファチャンネルが削除されたりすると、画質が著しく低下する可能性があります。実際には、OVERなどの一般的な合成操作中に、低アルファ領域の低精度カラー情報が最終出力画像(合成後)に与える影響が相応に減少するため、通常は目立ちません。この精度の低下により、乗算済み画像は特定の圧縮方式で圧縮しやすくなります。これは、透明領域内に隠れた色の変化が記録されず、低アルファ領域のエンコードに割り当てるビット数が少なくなるためです。8ビット/チャンネルなどの低い量子化ビット深度による同様の「制限」は、アルファのない画像にも存在するため、この議論は問題があります。
ピクセルカラーがストレート(非乗算)RGBAタプルで表現されていると仮定すると、ピクセル値(0, 0.7, 0, 0.5)は、最大緑色強度の70%と50%の不透明度を持つピクセルを意味します。色が完全に緑色であれば、RGBAは(0, 1, 0, 0.5)になります。ただし、このピクセルが乗算アルファを使用している場合、すべてのRGB値(0, 0.7, 0)はアルファ値0.5で乗算(またはオクルージョン用にスケーリング)され、0.5が追加されて(0, 0.35, 0, 0.5)になります。この場合、Gチャネルの0.35の値は、実際には70%の緑色発光強度(50%のオクルージョン)を示しています。純粋な緑色発光は(0, 0.5, 0, 0.5)としてエンコードされます。ファイルがストレートアルファを使用しているか、乗算済みアルファを使用しているかを知ることは、正しく処理または合成するために不可欠です。なぜなら、それぞれ異なる計算が必要となるからです。
遮蔽物のない発光は、ストレートアルファでは表現できません。この場合、変換は利用できません。
アルファチャンネルをサポートする最も一般的な画像フォーマットはPNGとTIFFです。GIFは、パレットのエントリの1つを透明として指定することで、1ビットの透明度をサポートします。アルファチャンネルのサポートは、QuickTimeフォーマットのAnimationやApple ProRes 4444などの一部のビデオコーデック、またはTechsmithマルチフォーマットコーデックに搭載されています。
BMPファイル形式は 一般的にこのチャンネルをサポートしていませんが、32 ビット (888–8) や 16 ビット (444–4) などの異なる形式ではアルファチャンネルを保存することが可能です。ただし、すべてのシステムやプログラムがそれを読み取ることができるわけではありません。これは主に一部のビデオゲーム[ 9 ]や特定のアプリケーション[ 10 ]で利用されています。また、これらの BMP を作成するための専用プログラムも作成されています。


一般的なデジタル画像のRGB値は、物理的な光強度に直接対応するものではなく、ガンマ補正関数によって圧縮された値である。
この変換は、エンコードされた画像の限られたビット数をより有効に活用するために、これは、人間の非線形的な輝度知覚によりよく合致する。
したがって、このような画像を扱うコンピュータプログラムは、RGB 値を線形空間にデコードし (ガンマ圧縮を解除することによって)、線形光強度をブレンドし、結果にガンマ圧縮を再適用する必要があります。[ 20 ] [ 21 ]
アルファを前乗算する場合、ガンマ圧縮の前に線形空間で前乗算が行われます。[ 22 ]これにより、次の式が得られます。
カラーチャンネルがガンマ補正を受ける場合でも、アルファチャンネルはガンマ補正を受ける場合と受けない場合があることに注意してください。
同様の目的で使用されるものの、透明色や画像マスクでは、重ね合わせた画像ピクセルと背景ピクセルを滑らかにブレンドすることはできません(画像ピクセル全体または背景ピクセル全体のみが許可されます)。
同様の効果は、 Truevision TGAイメージファイル形式の16ビットRGBAハイカラーモードや、関連するTARGAおよびAT-Vista/NU-Vistaディスプレイアダプタのハイカラーグラフィックモードに見られるように、1ビットのアルファチャンネルでも実現できます。このモードでは、各RGB原色(15ビットRGB)に5ビットが割り当てられ、残りの1ビットが「アルファチャンネル」として使用されます。
ディザリングは、1ビットのアルファ値しか利用できない場合に、部分的な遮蔽をシミュレートするために使用できます。
アプリケーションによっては、単一のアルファチャンネルでは不十分な場合があります。例えば、ステンドグラスの窓では、赤、緑、青の透明度を個別にモデル化するために、各RGBチャンネルごとに個別の透明度チャンネルが必要です。より正確なスペクトルカラーフィルタリングを行うアプリケーションでは、アルファチャンネルをさらに追加することができます。
順序に依存しない透過性手法の中には、オーバー演算子を可換近似に置き換えるものがある。[ 23 ]
しかし、次のミップマップレベルを生成すると、興味深いことが起こります...
すべてのパーティクル効果のブレンドモードを事前乗算に切り替えることで、シーン全体を 1 つの描画呼び出しで処理できます (テクスチャのアトラス化/ 2D 配列を想定)... 事前乗算アルファのもう 1 つの便利なテクニックは、位置がわかっている重複するテクスチャがある場合、それらをすべて 1 つのテクスチャに事前処理できることです。
は API サーフェスではストレート アルファを使用しますが、内部レンダリング操作では乗算済みアルファを使用します。