フレームバッファへの書き込み

ここでは、書き込みテストの判定で使用が決まったフラグメントをフレームバッファへ書き込むまでの処理のしくみについて説明します。

CreativeStudio では、フレームバッファへ書き込むさいの処理、ブレンドモードの項目には 4 種類あります。
以下の表はブレンドモードの選択項目をまとめたものです。

項目 説明
未使用 ブレンド処理を行いません。不透明の表現になります。
ブレンド処理 フラグメントのカラーやアルファとフレームバッファのカラーやアルファに対してスケールをかけた後、ブレンディング方程式を用いて混ぜ合わせます。
セパレート
ブレンド処理
フラグメントのカラーやアルファとフレームバッファのカラーやアルファとを、各色成分とアルファ値ごとにスケールをかけた後、ブレンディング方程式を用いて混ぜ合わせます。
論理演算 フラグメントのカラーやアルファとフレームバッファのカラーやアルファとを論理演算を用いて混ぜ合わせます。

ブレンド処理

ここでは、フラグメントごとの混ぜ合わせ、ブレンド処理について説明します。

ブレンド処理とは、書き込みテストの判定により、使用が決まったフラグメントのカラーやアルファ ( これをソースカラー、ソースアルファと呼びます ) と書き込み先のフレームバッファ上で同じ位置に存在するカラーやアルファ ( これをデスティネーションカラー、デスティネーションアルファと呼びます ) に対して行う処理のことです。ソースとデスティネーションに対して係数を乗算 ( スケール ) し、ブレンディング方程式で混ぜ合わせた結果をフレームバッファへ書き戻します。

以下の図は、ブレンド処理の流れを説明したものです。

ブレンド処理の流れ

ブレンド元係数とブレンド先係数

ブレンド元係数とは、ソースカラーやソースアルファに対して乗算する係数のことです。その結果はソースの要素として使用されます。
ブレンド先係数とはデスティネーションカラーやデスティネーションアルファに対して乗算する係数のことです。その結果はデスティネーションの要素として使用されます。
CreativeStudio において、係数はカラーとアルファでそれぞれ個別に設定できます。

ブレンドカラー

ブレンドカラーとは、ブレンド元係数とブレンド先係数で使用できる、固定のカラーとアルファです。

テクスチャコンバイナのコンスタントカラーとは設定箇所が異なります。

以下の図は、係数の種類をまとめたものです。

ブレンド処理の係数

係数において、 1 から引かれたカラーやアルファは反転します。

ブレンディング方程式

ブレンディング方程式とは、ソース の要素( ブレンド元係数を乗算した結果 ) とデスティネーションの要素( ブレンド先係数を乗算した結果 )を混ぜ合わせる為の計算式です。
CreativeStudio において、ブレンディング方程式はカラーとアルファでそれぞれ個別に設定できます。

以下の図はブレンディング方程式について、カラーのブレンドを例に説明したものです。

ブレンディング方程式

以下のブレンド元係数とブレンド先の係数のカラーイメージを入力値としてブレンディング方程式による混ぜ合わせについて説明します。

ブレンド元係数 ブレンド先係数
ブレンド元係数 ブレンド先係数

以下の表は、ブレンディング方程式の種類をまとめたものです。

項目 演算子名 結果 説明
ソースとデスティネーションを加算 ADD ブレンディング式ADD ブレンド元係数 + ブレンド先係数
ソースからデスティネーションを減算 SUBTRACT ブレンディング式SUB ブレンド元係数 - ブレンド先係数
デスティネーションからソースを減算 REVERSE_SUBTRACT ブレンディング式REVERCE_SUB ブレンド先係数 - ブレンド元係数
ソースとデスティネーションのより小さい方 MIN ブレンディング式MIN ブレンド元係数とブレンド先係数を比較して、値の小さい方を使用。
ソースとデスティネーションのより大きい方 MAX ブレンディング式MAX ブレンド元係数とブレンド先係数を比較して、値の大きい方を使用。

セパレートブレンド処理

セパレートブレンド処理とは、書き込みテストの判定により、使用が決まったフラグメントのカラーやアルファ (「ソースカラー」「ソースアルファ」) と書き込み先のフレームバッファ上で同じ位置に存在するカラーやアルファ (「デスティネーションカラー」「デスティネーションアルファ」) に対して行う処理のことです。

ソースとデスティネーションの各色成分とアルファ値に対して係数を乗算して、ブレンディング方程式で混ぜ合わせた結果をフレームバッファへ書き戻します。

論理演算

論理演算とは書き込みテストの判定により、使用が決まったフラグメントのカラー ( ソースカラー ) と書き込み先のフレームバッファ上で同じ位置に存在するカラー ( デスティネーションカラー ) に対して行う処理です。

ソースカラーとデスティネーションカラーに対して 1( 真 )か 0( 偽 )かの 2 通りの入力値に対して 1 つの値を出力する計算方法論理演算を行い、その結果をフレームバッファへ書き戻します。

以下の図は、論理演算の流れを説明したものです。

論理演算の流れ

以下のソースカラー ( A ) とデスティネーションカラー ( B ) のイメージを入力値として論理演算による混ぜ合わせについて説明します。
ここでは説明を簡略化する為に白黒のイメージを使用します。白の領域を 1 、黒の領域を 0 とします。

 

ソースカラー デスティネーションカラー
ブレンド元係数 ブレンド先係数

以下の表は、論理演算の種類をまとめたものです。 CreativeStudio では演算方法から選択できます。

項目 演算子名 結果 説明
すべてのビット値を 0 CLEAR 論理演算CLEAR RGBA に 0 を書き込みます。
ソースカラーの
ビット値
COPY 論理演算COPY ソースをそのまま書き込みます。
デスティネーションカラーの
ビット値
NOOP 論理演算NOOP 何も書き込みません。フレームバッファの値が使用されます。
すべてのビット値を 1 SET 論理演算SET RGBA に 1 を書き込みます。
ソースカラーの
反転ビット値
COPY_INVERTED 論理演算INVERTED ソースを反転します。
デスティネーションカラーの
反転ビット値
INVERT 論理演算INVERT デスティネーションを反転します。
ソースとデスティネーションカラーの反転ビット値の論理積 AND_REVERSE 論理演算AND_REVERSE ソースと、反転したデスティネーションの論理積です。
A と B の両方が 1 の部分を出力します。
ソースとデスティネーションカラーの反転ビット値の論理和 OR_REVERSE 論理演算OR_REVERSE ソースと、反転したデスティネーションの論理和です。
論理和は、A と B のいずれかに 1 が在る場合は 1 を出力し、それ以外の場合には 0 を出力します。
ソースとデスティネーションカラーの
論理積
AND 論理演算AND ソースとデスティネーションの論理積です。
論理積は、A と B の両方が 1 の部分を出力します。
ソースとデスティネーションカラーの
論理和
OR 論理演算OR ソースとデスティネーションの論理和です。
ソースとデスティネーションカラーの論理積の反転ビット値 NAND 論理演算NAND ソースとデスティネーションの論理積を反転します。
否定論理積( Not_And )とも呼びます。すべての入力値が 1 の場合に 0 を出力し、それ以外の場合には 1 を出力します。
ソースとデスティネーションカラーの論理和の反転ビット値 NOR 論理演算NOR ソースとデスティネーションの論理和を反転します。
否定論理和( Not_Or )とも呼びます。すべての入力値が 0 の場合に 1 を出力し、それ以外の場合には 0 を出力します。
ソースとデスティネーションカラーの
排他的論理和
XOR 論理演算XOR ソースとデスティネーションの排他的論理和です。
排他的論理和は、入力値が異なる場合に 1 を出力し、同じときには 0 を出力します。
ソースとデスティネーションカラーの
排他的論理和の反転ビット値
EQUTV 論理演算EQUTV ソースとデスティネーションの排他的論理和を反転します。
ソースカラーの
反転ビット値と、
デスティネーションカラーの論理積
AND_INVERTED 論理演算AND_INVERTED 反転したソースとデスティネーションの論理積です。
ソースカラーの
反転ビット値と、
デスティネーションカラーの論理和
OR_INVERTED 論理演算OR_INVERTED 反転したソースとデスティネーションの論理和です。