ここでは、テクスチャコンバイナについて説明します。
テクスチャコンバイナとは、ライティング、テクスチャ、定数カラー、などの混ぜ合わせを行い、最終的なカラーとアルファを決定する仕組みです。ゲームキューブやWiiのTEVでのカラー・アルファ合成処理をイメージしていただければ理解しやすいと思います。テクスチャコンバイナはカラー(RGB)用の処理とアルファ(A)用の処理がそれぞれ独立して行われます。
ここでは、テクスチャコンバイナの構造について説明します。テクスチャコンバイナは後述する計算式を最大6回繰り返し処理することができます。この計算式の一回の処理を段と呼びます。最初の段を0段目と呼び、最大で6段まで処理できます。
以下の図は、テクスチャコンバイナの構造についてイメージしたものです。
ここでは、テクスチャコンバイナの設定項目について説明します。
テクスチャコンバイナでは、混ぜ合わせの処理を行う際に 3 つの入力ソースを使用します。
以下の表は、テクスチャコンバイナで使用する 10 種類の入力ソースについてまとめたものです。
| ソースの種類 | 説明 |
|---|---|
| テクスチャ 0 | テクスチャ 0 で設定したテクスチャ画像のカラーとアルファです。 |
| テクスチャ 1 | テクスチャ 1 で設定したテクスチャ画像のカラーとアルファです。 |
| テクスチャ 2 | テクスチャ 2 で設定したテクスチャ画像のカラーとアルファです。 |
| テクスチャ 3 | テクスチャ 3 で設定したテクスチャ画像のカラーとアルファです。 |
| コンスタントカラー | テクスチャコンバイナの各段に 1 つ選んで設定できるカラーやアルファです。 |
| 頂点シェーダーの出力結果 | 頂点シェーダーから出力されたカラーやアルファです。 |
| 前段の出力結果 | 前段から出力されたカラーやアルファです。最初の段では使用できません。 |
| 前段のバッファ | 前段からバッファへ出力されたカラーやアルファです。最初の段では使用できません。 |
| プライマリカラー | フラグメントライティングの出力結果です。 |
| セカンダリカラー | フラグメントライティングの出力結果です。 |
2 段目以降の入力ソースの内、少なくとも 1 つにはコンスタントカラー、前段の出力結果、前段のバッファのどれかを指定しなければなりません。
オペランドとは、入力ソースの RGBA 各チャンネルの中から混ぜ合わせの対象となる成分を指定するテクスチャコンバイナの機能です。デフォルト設定ではカラー側に RGB 、アルファ側に A が適用されます。
以下のテクスチャ画像をもとに、オペランドについて説明します。
| カラーチャンネル | アルファチャンネル |
|---|---|
![]() |
![]() |
以下の表は、テクスチャコンバイナのカラー側で選択できるオペランドの種類についてまとめたものです。
| 項目 | 結果 | 説明 |
|---|---|---|
| RGB | ![]() |
カラーチャンネルを R , G , B チャンネルへ適用します。 |
| 1 - RGB | ![]() |
カラーチャンネルを反転して R , G , B チャンネルへ適用します。 |
| A | ![]() |
アルファ チャンネルを R , G , B チャンネルへ適用します。 |
| 1 - A | ![]() |
アルファチャンネルを反転して R , G , B チャンネルへ適用します。 |
| R | ![]() |
カラーの R チャンネルを R , G , B チャンネルへ適用します。 |
| G | ![]() |
カラーの G チャンネルを R , G , B チャンネルへ適用します。 |
| B | ![]() |
カラーの B チャンネルを R , G , B チャンネルへ適用します。 |
| 1 - R | ![]() |
カラーの B チャンネルを反転して R , G , B チャンネルへ適用します。 |
| 1 - G | ![]() |
カラーの G チャンネルを反転して R , G , B チャンネルへ適用します。 |
| 1 - B | ![]() |
カラーの B チャンネルを反転して R , G , B チャンネルへ適用します。 |
以下の表は、テクスチャコンバイナのアルファ側で選択できるオペランドの種類についてまとめたものです。
| 項目 | 結果 | 説明 |
|---|---|---|
| A | ![]() |
アルファ チャンネルを A チャンネルへ適用します。 |
| 1 - A | ![]() |
アルファチャンネルを反転して A チャンネルへ適用します。 |
| R | ![]() |
カラーの R チャンネルを A チャンネルへ適用します。 |
| G | ![]() |
カラーの G チャンネルを A チャンネルへ適用します。 |
| B | ![]() |
カラーの B チャンネルを A チャンネルへ適用します。 |
| 1 - R | ![]() |
カラーの B チャンネルを反転して A チャンネルへ適用します。 |
| 1 - G | ![]() |
カラーの G チャンネルを反転して A チャンネルへ適用します。 |
| 1 - B | ![]() |
カラーの B チャンネルを反転して A チャンネルへ適用します。 |
テクスチャコンバイナの計算式とは、入力ソースのオペランド設定により決まったカラーとアルファの成分を混ぜ合わせる為に使用する計算式です。カラーとアルファそれぞれに 10 種類の計算式から選択することができます。
以下のテクスチャ画像 A 、B 、C はそれぞれ、オペランド適用後の入力ソース 0 、1 、2 の結果です。
この画像をもとに、テクスチャコンバイナの計算式による混ぜ合わせについて説明します。
| A | B | C |
|---|---|---|
![]() |
![]() |
![]() |
以下の表は、 CreativeStudio で選択できるテクスチャコンバイナの計算式についてまとめたものです。
| 項目 | 関数名 | 結果 | 説明 |
|---|---|---|---|
| A | REPLACE | ![]() |
A をそのまま出力します。 |
| A × B | MODULATE | ![]() |
A と B を乗算します。 |
| A + B | ADD | ![]() |
A と B を加算します。 |
| A + B - 0.5 | ADD_SIGNED | ![]() |
A と B を加算して、 0.5 を減算します。 |
| A × C + B × ( 1 - C ) | INTERPOLATE | ![]() |
A と B を C の割合でブレンドします。 例えば C のカラーをアニメーションさせることで、A から B へとなめらかに変化させることができます。 |
| A - B | SUBTRACT | ![]() |
A から B を減算します。 |
| RGB ← Dot ( A , B ) | DOT3_RGB | ![]() |
A と B の RGB をベクトルとして扱うことから、リソースの種類に法線マップのテクスチャを指定し、カラーチャンネル単位で操作することに向きます。出力結果は各チャンネル成分に同じ値が入る為グレーとなります。 |
| RGBA ← Dot ( A , B ) | DOT3_RGBA | ![]() |
RGB ← Dot ( A , B )と同様の計算式を使用しますが、カラー成分と同じ値がアルファ成分にも入ります。 CreativeStudio の設定において、カラーとアルファ側とも入力ソースに RGBA←Dot ( A , B ) を指定しなければなりません。 |
| ( A + B ) × C | ADD_MULT | ![]() |
A と B を 加算してから C を乗算します。 計算中、A と B を加算した時点での値は 1.0 より上がりません。 |
| ( A × B ) + C | MULT_ADD | ![]() |
A と B を 乗算してから C を加算します。 |
RGB ← Dot ( A , B ) および RGBA ← Dot ( A , B )の計算式は、 0 ~ 1 の範囲でテクスチャメモリに格納されるテクスチャ画像に対し、テクセル生成処理のベクトル計算のさいに -1 ~ 1 の範囲に変換されていることを考慮しています。
計算式は次のとおりです。
4 × ((Ar – 0.5) × (Br – 0.5) + (Ag – 0.5) × (Bg – 0.5) + (Ab – 0.5) × (Bb – 0.5))
ベクトルとは、大きさと方向の情報を持ち、矢印の長さと向きで表されます。 CreativeStudio では、ライト計算やパーティクルの速度の制御等さまざまな場面で使用されています。テクスチャ画像の色成分をベクトル XYZ の値に変換して使うこともできます。
スケールの設定により、テクスチャコンバイナの計算結果に対して乗算することができます。混ぜ合わされたカラーとアルファにそれぞれにスケールを設定できます。× 1、× 2、× 4 の 3 種類から選択できます。