フラグメントシェーダーの出力を 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 はこの入力値とソースアルファカラーの値を乗算します。 | |
SrcAlphaSaturate |
GPU は、この入力値に ソースアルファ の最小値と (1- デスティネーションアルファ) を乗算します。 |
|
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 を定義する残りのコードをここに記述
}
}
}
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.