Version: Unity 6.0 (6000.0)
言語 : 日本語
ShaderLab での AlphaToMask コマンドのリファレンス
ShaderLab の BlendOp コマンドリファレンス

ShaderLab の Blend コマンドリファレンス

フラグメントシェーダーの出力を GPU がどのようにレンダーターゲットと組み合わせるかを決定します。

このコマンドの機能は、BlendOp コマンドで設定できるブレンド操作に依存します。ブレンド自体はすべてのグラフィックス API とハードウェアでサポートされていますが、ブレンド操作にはサポートがより制限されているものがあることに注意してください。

ブレンドを有効にすると、GPU でのいくつかの最適化 (主に隠れたサーフェスの除去/Early-Z) が無効になるため、GPU のフレームタイムが長くなることがあります。

このコマンドは、レンダー状態の変更を行います。Pass ブロックで使用すると、そのパスのレンダー状態を設定できます。また、SubShader ブロックで使用すると、その SubShader 内のすべてのパスのレンダー状態を設定できます。

レンダーパイプラインの互換性

機能名 ユニバーサルレンダーパイプライン (URP) HD レンダーパイプライン (HDRP) カスタム SRP ビルトインレンダーパイプライン
Blend はい はい はい はい

構文

シグネチャ 構文例 機能
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 デフォルトのレンダーターゲットのブレンドを有効にします。RGB 値とアルファ値のブレンド係数を分けて設定します。(2)
Blend <render target> <source factor RGB> <destination factor RGB>, <source factor alpha> <destination factor alpha> Blend 1 One Zero, Zero One 上と同様ですが、指定されたレンダーターゲットに対して実行されます。(1) (2)

ブレンドを有効にすると、以下のようになります。

  • BlendOp コマンドが使用されている場合は、ブレンド操作がその値に設定されます。そうでない場合は、ブレンド操作のデフォルトは Add です。
  • ブレンド操作が AddSubRevSubMinMax の場合、GPU はフラグメントシェーダーの出力値にソースファクターを掛けます。
  • ブレンド操作が AddSubRevSubMinMax の場合、GPU はレンダーターゲットにすでにある値にデスティネーションファクターを掛けます。
  • その結果得られた値に対して、GPU がブレンド処理を行います。

注:

  1. レンダーターゲットを指定する署名は、OpenGL 4.0+、GL_ARB_draw_buffers_blend、または OpenGL ES 3.2 を必要とします。
  2. RGB とアルファを分けたブレンドは、高度な OpenGL のブレンド操作 とは互換性がありません。

パラメーター

パラメーター 機能
render target 整数 (0 から 7 の範囲) レンダーターゲットのインデックス
状態 Off ブレンドを無効にします。
factor One この入力値は 1 です。ソースカラーまたはデスティネーションカラーの値を使う場合に使用します。
Zero この入力値は 0 です。ソースまたはデスティネーションの値を削除する場合に使用します。
SrcColor GPU はこの入力値とソースカラーの値を乗算します。
SrcAlpha GPU はこの入力値とソースアルファカラーの値を乗算します。
SrcAlphaSaturate GPU はこの入力値に source alpha(1 - destination alpha) の最低値を乗算します。
DstColor GPU はこの入力値とフレームバッファのソースカラーの値を乗算します。
DstAlpha GPU はこの入力値とフレームバッファのソースアルファ値を乗算します。
OneMinusSrcColor GPU は、この入力値に (1 - ソースカラー) を乗算します。
OneMinusSrcAlpha GPU は、この入力値に (1 - ソースアルファ) を乗算します。
OneMinusDstColor GPU は、この入力値に (1 - デスティネーションカラー) を乗算します。
OneMinusDstAlpha GPU は、この入力値に (1 - デスティネーションアルファ) を乗算します。

ブレンドの方程式は以下の通りです。

finalValue = sourceFactor * sourceValue operation destinationFactor * destinationValue

この方程式では

  • finalValue は、GPU がデスティネーションバッファに書き込む値です。
  • sourceFactor は Blend コマンドで定義されます。
  • sourceValue は、フラグメントシェーダーが出力する値です。
  • operation はブレンド操作です。
  • destinationFactor は Blend コマンドで定義されます。
  • destinationValue は、デスティネーションバッファにすでにある値です。

追加リソース

ShaderLab での AlphaToMask コマンドのリファレンス
ShaderLab の BlendOp コマンドリファレンス