フラグメントシェーダーの出力を GPU がどのようにレンダーターゲットと組み合わせるかを決定します。
このコマンドの機能は、BlendOp コマンドで設定できるブレンディング操作に依存します。ブレンド自体はすべてのグラフィックス API とハードウェアでサポートされていますが、ブレンド操作にはサポートがより限定されているものがあることに注意してください。
ブレンドを有効にすると、GPU でのいくつかの最適化 (主に隠れたサーフェスの除去/Early-Z) が無効になるため、GPU のフレームタイムが長くなることがあります。
機能名 | ビルトインレンダーパイプライン | ユニバーサルレンダーパイプライン (URP) | HD レンダーパイプライン (HDRP) | カスタム SRP |
---|---|---|---|---|
Blend | はい | はい | はい | はい |
このコマンドは、レンダー状態の変更を行います。Pass
ブロックで使用すると、そのパスのレンダー状態を設定することができます。また、SubShader
ブロックで使用すると、そのサブシェーダー内のすべてのパスのレンダー状態を設定することができます。
ブレンドを有効にすると、以下のようになります。
Add
です。Add
、Sub
、RevSub
、Min
、Max
の場合、GPU はフラグメントシェーダーの出力値にソースファクターを掛けます。Add
、Sub
、RevSub
、Min
、Max
の場合、GPU はレンダーターゲットにすでにある値にデスティネーションファクターを掛けます。ブレンドの方程式は以下の通りです。
finalValue = sourceFactor * sourceValue operation destinationFactor * destinationValue
この方程式では
finalValue
は、GPU がデスティネーションバッファに書き込む値です。sourceFactor
は Blend コマンドで定義されます。sourceValue
は、フラグメントシェーダーが出力する値です。operation
はブレンド操作です。destinationFactor
は Blend コマンドで定義されます。destinationValue
は、デスティネーションバッファにすでにある値です。シグネチャ | 構文例 | 機能 |
---|---|---|
Blend <state> |
Blend Off |
デフォルトのレンダーターゲットのブレンドを無効にします。これはデフォルト値です。 |
Blend <render target> <state> |
Blend 1 Off |
上と同じ。しかし、指定したレンダーターゲットに対して。(1) |
Blend <source factor> <destination factor> |
Blend One Zero |
デフォルトのレンダーターゲットのブレンドを有効にします。RGBA 値のブレンド係数を設定します。 |
Blend <render target> <source factor> <destination factor> |
Blend 1 One Zero |
上と同じ。しかし、指定したレンダーターゲットに対して。(1) |
Blend <source factor RGB> <destination factor RGB>, <source factor alpha> <destination factor alpha> |
Blend One Zero, Zero One |
デフォルトのレンダーターゲットのブレンドを有効にします。RGBA 値とアルファ値のブレンド係数を分けて設定します。 (2) |
Blend <render target> <source factor RGB> <destination factor RGB>, <source factor alpha> <destination factor alpha> |
Blend 1 One Zero, Zero One |
上と同じ。しかし、指定したレンダーターゲットに対して。(1) (2) |
ノート:
GL_ARB_draw_buffers_blend
、または OpenGL ES 3.2 を必要とします。パラメーター | Value | 機能 |
---|---|---|
render target | 整数 (0 から 7 の範囲) | レンダーターゲットのインデックス |
state | Off |
ブレンドを無効にします。 |
factor | One |
この入力値は 1 です。ソースカラーまたはデスティネーションカラーの値を使う場合に使用します。 |
Zero |
この入力値は 0 です。ソースまたはデスティネーションの値を削除する場合に使用します。 | |
SrcColor |
GPU はこの入力値とソースカラーの値を乗算します。 | |
SrcAlpha |
GPU はこの入力値とソースアルファカラーの値を乗算します。 | |
DstColor |
GPU はこの入力値とフレームバッファのソースカラーの値を乗算します。 | |
DstAlpha |
GPU はこの入力値とフレームバッファのソースアルファ値を乗算します。 | |
OneMinusSrcColor |
GPU は、この入力値に (1 - ソースカラー) を乗算します。 | |
OneMinusSrcAlpha |
GPU は、この入力値に (1 - ソースアルファ) を乗算します。 | |
OneMinusDstColor |
GPU は、この入力値に (1 - デスティネーションカラー) を乗算します。 | |
OneMinusDstAlpha |
GPU は、この入力値に (1 - デスティネーションアルファ) を乗算します。 |
ここでは、最も一般的なブレンドタイプの構文を紹介します。
Blend SrcAlpha OneMinusSrcAlpha // 従来の透明度
Blend One OneMinusSrcAlpha // 事前に乗算された透明度
Blend One One // 追加
Blend OneMinusDstColor One // ソフトな追加
Blend DstColor Zero // 乗法
Blend DstColor SrcColor // 2x 乗法
Shader "Examples/CommandExample"
{
SubShader
{
// SubShader を定義する残りのコードをここに記述
Pass
{
// この Pass の通常のアルファブレンディングを有効にします
Blend SrcAlpha OneMinusSrcAlpha
// Pass を定義する残りのコードをここに記述
}
}
}
このサンプルコードでは、SubShader ブロックでこのコマンドを使用するための構文を示しています。
Shader "Examples/CommandExample"
{
SubShader
{
// Enable regular alpha blending for this SubShader
Blend SrcAlpha OneMinusSrcAlpha
// SubShader を定義する残りのコードをここに記述
Pass
{
// Pass を定義する残りのコードをここに記述
}
}
}