Blending with Realtime Shaders(リアルタイム シェーダとブレンドする)

 
 
 

リアルタイム エフェクトを作成するときにパスを 1 回以上描画する必要があることがあります。これは、エフェクト全体にパスが影響を及ぼすためです。指定したブレンド モードで透明度が作成され、これにより、前景レイヤを通して背景レイヤがどのように表示されるかが決定します。

ブレンド機能の動作

ブレンド機能では、入力されるピクセル(ソース)とフレーム バッファのピクセル(ディスティネーション)が加算されます。ディスティネーション ピクセルは既にフレーム バッファに存在し、ソース ピクセルはフレーム バッファ ピクセルとブレンドされる新しいピクセルである点を覚えておいてください。

たとえば、RGBA 値が(0.7, 0.7, 0.5, 1.0)のピクセルがあり、フレーム バッファが既に(0.5, 0.2, 0.3, 1.0)の RGBA 値を持つ場合、ブレンド後のピクセルは(1.2, 0.9, 0.8, 2.0)となります。値は 1.0 にクランプされるため、最終的なピクセルは(1.0, 0.9, 0.8, 1.0)となります。

特定の文字列を使用すると、ソースおよびディスティネーションのピクセルを乗算できます(ONE、ZERO、ONE_MINUS_SOURCE _ALPHA など)。たとえばソースを ONE で乗算し、ディスティネーションを ZERO で乗算すると、ソースのピクセルのみが出力されます。

ブレンドの式は以下のようになります。

clamp ( (source * source multiplier) + (destination * destination multiplier))

たとえば、入力されるピクセルが、

(1.0, 0.0, 0.0, 0.8)

フレーム バッファのピクセル値が、

(0.2, 0.0, 1.0, 1.0)

である場合の式は、以下のようになります。

R = clamp ((1.0 * 0.8) + (0.2 * 0.2)) = 0.84

G = clamp ((0.0 * 0.8) + (0.2 * 0.0)) = 0.0

B = clamp ((0.0 * 0.8) + (0.2 * 1.0)) = 0.2

A = clamp ((0.8 * 0.8) + (0.2 * 1.0)) = 0.84

この式がテクスチャの各ピクセルに適用されると、ブレンドによる出力の外観が決まります。

ブレンドの例: 基本的な透明度

Render Tree の出力(この例ではグリッドに適用)は、下図の青色のテクスチャで、そのアルファ チャンネルで定義した領域が透明になっています。

   

テクスチャ(左)、アルファ チャンネル(右)

「描画」シェーダによりブレンド計算が実行されます。この計算では、ソース ピクセルはそのアルファ チャンネル値(SRC_ALPHA)で乗算され、ディスティネーション ピクセルは 1 からソース ピクセルのアルファ チャンネル値を引いた値(ONE_MINUS_SRC_ALPHA)で乗算されます。その後、ソースとディスティネーションの値が加算されます。

最終的なエフェクトは次の図のようになります。つまり、領域の透明度はそのままに、ソースおよびディスティネーションの両方からソースのアルファ チャンネルが削除されます。