書き込みテストは、フラグメントの情報を参照値として、実際にフレームバッファへ書き込むかどうかの判定を、フラグメントごとに行う処理のことです。
判定基準を指定することで、条件に満たない不要なフラグメントは描画の対象からとり除かれます。
表 1 書き込みテストの種類
| 種類 | 説明 |
|---|---|
| アルファテスト | フラグメントのアルファ値とアルファテスト用にここで設定する値を比較します。 |
| ステンシルテスト | フラグメントのステンシルテスト用にここで設定する値と書き込み先「ステンシルバッファ」の値を比較します。 比較結果に応じて書き込み先の値を上書きします。 |
| デプステスト | フラグメント単位のカメラからの奥行き情報「デプス値」と書き込み先「デプスバッファ」上の値を比較します。 判定により、使用が決まったフラグメントのデプス値で書き込み先を上書きします。 |
補足:
書き込みテストは、「アルファテスト」 →「 ステンシルテスト」→「 デプステスト」の順番で処理されます。
注意:
各書き込みテストを使用すると処理負荷が増加します。デフォルトでは、すべてのフラグメントテストと操作は無効になっています。
アルファテストは、フラグメントの「アルファ値」と「アルファテスト用の参照値」を比較した結果で、使用するフラグメントを決める処理のことです。
用途:
テクスチャ画像等のアルファ値を用いた半透明表現等に使用されます。
アルファテストで、「アルファ値」と「参照値」を比較する為に使用する計算式です。
CreativeStudio では、 8 種類の比較関数から選択することができます。
表 2 アルファテストの比較関数の種類
| 比較関数 | 関数名 | 説明 |
|---|---|---|
| アルファ値 < 参照値 | LESS | フラグメントのアルファ値が参照値より小さければテストを通過します。 |
| アルファ値 ≦ 参照値 | L_EQUAL | フラグメントのアルファ値が参照値と等しい、もしくは小さければテストを通過します。 |
| アルファ値 = 参照値 | EQUAL | フラグメントのアルファ値が参照値と等しければテストを通過します。 |
| アルファ値 ≧ 参照値 | G_EQUAL | フラグメントのアルファ値が参照値と等しい、もしくは大きければテストを通過します。 |
| アルファ値 > 参照値 | GREATER | フラグメントのアルファ値が参照値より大きければテストを通過します。 |
| アルファ値 ≠ 参照値 | NOT_EQUAL | フラグメントのアルファ値が参照値と等しくなければテストを通過します。 |
| すべて通過させる | ALWAYS | 常にテストを通過します。 |
| すべて通過させない | NEVER | 常にテストを通過しません。 |
図 1 アルファテストの処理
ステンシルテストは、「ステンシル用の参照値」と「ステンシルバッファの値」を比較した結果で、使用するフラグメントを決める処理のことです。
注意:
CreativeStudio の「ステンシルテストの設定」は、マテリアルパネルの「詳細モード」で設定します。
通過したフラグメントの値でステンシルバッファを更新することができます。
用途:
ステンシルテストは主に描画する領域を限定する「マスク処理」に使用されます。
ステンシルテストで、「ステンシルバッファの値」と「参照値」を比較する為に使用する計算式です。
CreativeStudio では、 8 種類の比較関数から選択することができます。
表 3 ステンシルテストの比較関数の種類
| 比較関数 | 関数名 | 説明 |
|---|---|---|
| すべて不通過 | NEVER | 常に通過しません。 |
| すべて通過 | ALWAYS | 常に通過します。 |
| ステンシルバッファの値より小さければ通過 | LESS | 参照値がステンシルバッファの値より小さければ通過します。 |
| ステンシルバッファの値以下であれば通過 | L_EQUAL | 参照値がステンシルバッファの値と等しい、もしくは小さければ通過します。 |
| ステンシルバッファの値と等しければ通過 | EQUAL | 参照値がステンシルバッファの値と等しければ通過します。 |
| ステンシルバッファの値以上であれば通過 | G_EQUAL | 参照値がステンシルバッファの値と等しい、もしくは大きければ通過します。 |
| ステンシルバッファの値より大きければ通過 | GREATER | 参照値がステンシルバッファの値より大きければ通過します。 |
| ステンシルバッファの値と等しくなければ通過 | NOT_EQUAL | 参照値がステンシルバッファの値と等しくなければ通過します。 |
図 2 ステンシルテストの処理
ステンシルテストでは、「テストマスク」で設定した値を利用して、ステンシルテスト値の範囲を指定できます。
デフォルトの値は 255 で、全範囲が指定されています。
ステンシルテストとデプステストの結果に対する処理を設定できます。
表 4 「ステンシルテスト」と「デプステスト」の結果
| 項目 | 説明 |
|---|---|
| ステンシルテスト失敗時の処理 | フラグメントが、ステンシルテストに失敗したときです。それ以降の処理デプステストは行われません。 |
| デプステスト失敗時の処理 | フラグメントが、ステンシルテストの判定により使用が決まり、デプステストに失敗したときです。 |
| デプステスト成功時の処理 | フラグメントが、ステンシルテストとデプステストの両判定により使用が決まったときです。 |
テストの結果が上記に当てはまる場合、CreativeStudio は、ステンシル値の操作を次の 8 種類の関数から選ぶことができます。
表 5 ステンシル値に対して操作可能な関数
| 項目 | 関数名 | 説明 |
|---|---|---|
| 現在の値を保持 | KEEP | デフォルト設定です。現在のステンシル値を保ちます。ステンシルバッファの値は更新されません。 |
| 0 に置き換え | ZERO | ステンシルバッファの値を 、0 で更新します。 |
| 参照値に置き換え | REPLACE | ステンシルバッファの値を、ステンシルテスト参照値で指定した値で更新します。 |
| 増加 ( 極値処理 : クランプ ) | INCR | ステンシルバッファの値を 1 増やします。 ステンシル値は 0 または 2 の n 乗 -1 にクランプ処理されます。 n はステンシルバッファのビット数です。 |
| 増加 ( 極値処理 : 回り込み ) | INCR_WRAP | ステンシルバッファの値を 1 増やします。 ただし、ステンシルバッファの値が 1 を超えて増加した場合、値はラップ ( 回り込み ) されます。 |
| 減少 ( 極値処理 : クランプ ) | DECR | ステンシルバッファの値を 1 減らします。 ステンシル値は 0 または 2 の n 乗 -1 にクランプ処理されます。 n はステンシルバッファのビット数です。 |
| 減少 ( 極値処理 : 回り込み ) | DECR_WRAP | ステンシルバッファの値を 1 減らします。 ただし、ステンシルバッファの値が 0 を超えて減少した場合、値はラップ ( 回り込み ) されます。 |
| ビット単位での反転 | INVERT | ステンシルバッファの値をビット単位で反転させます。 |
デプステストは、フラグメントの「デプス値」と「デプスバッファのデプス値」を比較した結果で、使用するフラグメントを決める処理のことです。
デプステストを通過したフラグメントは、ブレンダの処理を経てフレームバッファへ書き込まれます。
「デプスマスク」を有効にすると、通過したフラグメントのデプス値でデプスバッファを更新できます。
用途:
通常、視点から見えない隠れたポリゴン面を処理対象からとり除く「陰面除去」に使用されます。
デプステストで、「デプス値」と「デプスバッファの値」を比較する為に使用する計算式です。
CreativeStudio では、 8 種類の比較関数から選択することができます。
表 6 デプステストの比較関数の種類
| 比較関数 | 関数名 | 説明 |
|---|---|---|
| デプス値 < デプスバッファの値 | LESS | フラグメントのデプス値がデプスバッファのデプス値より小さければ、テストを通過します。 |
| デプス値 ≦ デプスバッファの値 | L_EQUAL | フラグメントのデプス値がデプスバッファのデプス値と等しい、もしくは小さければテストを通過します。 |
| デプス値 = デプスバッファの値 | EQUAL | フラグメントのデプス値がデプスバッファのデプス値と等しければテストを通過します。 |
| デプス値 ≧ デプスバッファの値 | G_EQUAL | フラグメントのデプス値がデプスバッファのデプス値と等しい、もしくは大きければテストを通過します。 |
| デプス値 > デプスバッファの値 | GREATER | フラグメントのデプス値がデプスバッファのデプス値より大きければテストを通過します。 |
| デプス値 ≠ デプスバッファの値 | NOT_EQUAL | フラグメントのデプス値がデプスバッファのデプス値と等しくなければテストを通過します。 |
| すべて通過させる | ALWAYS | 常にテストを通過します。 |
| すべて通過させない | NEVER | 常にテストを通過しません。 |
図 3 デプステストの処理