ShaderLab文法: AlphaTest
ShaderLab文法:Passタグ

ShaderLab構文:Blending

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

Blendingは透過のカラー作成に使用します。

グラフィックスがレンダリングされて,さらに全てのシェーダが実行されて,全てのテクスチャが適用されると,画面にピクセルが描画されます。すでに存在しているピクセルに対して,どのように合成するかはブレンディングで制御されます。

構文

Blend Off : ブレンディングを無効にします。

Blend SrcFactor DstFactor : ブレンディングを有効にして,設定をします。生成されたカラーは SrcFactor に乗算されます。画面にすでにあるカラーは DstFactor を乗算して,2つを合成します。

Blend SrcFactor DstFactor, SrcFactorA DstFactorA : 上記と同様ですが,アルファチャネルをブレンディングするのに,異なる要素を使用します。

BlendOp BlendOp: ブレンディングされたカラーを使用する代わりに別の処理を行います。

Blend操作

次のブレンド操作を使用することが出来ます:

Add 同時にソースとデスティネーションを追加します。
Sub デスティネーションからソースを減算します
RevSub ソースからデスティネーションを減算します
Min このステージの値はSource Alphaの値を乗算します。
Max ソースとデスティネーションの大きい方を使用してください。
LogicalClear Logical operation: Clear (0) DX11.1 only.
LogicalSet Logical operation: Set (1) DX11.1 only.
LogicalCopy Logical operation: Copy (s) DX11.1 only.
LogicalCopyInverted Logical operation: Copy inverted (!s) DX11.1 only.
LogicalNoop Logical operation: Noop (d) DX11.1 only.
LogicalInvert Logical operation: Invert (!d) DX11.1 only.
LogicalAnd Logical operation: And (s & d) DX11.1 only.
LogicalNand Logical operation: Nand !(s & d) DX11.1 only.
LogicalOr Logical operation: Or (s |d) DX11.1 only.
LogicalNor Logical operation: Nor !(s |d) DX11.1 only.
LogicalXor Logical operation: Xor (s ^ d) DX11.1 only.
LogicalEquiv Logical operation: Equivalence !(s ^ d) DX11.1 only.
LogicalAndReverse Logical operation: Reverse And (s & !d) DX11.1 only.
LogicalAndInverted Logical operation: Inverted And (!s & d) DX11.1 only.
LogicalOrReverse Logical operation: Reverse Or (s |!d) DX11.1 only.
LogicalOrInverted Logical operation: Inverted Or (!s |d) DX11.1 only.

Blend係数

全てのプロパティは Blend コマンドの SrcFactorとDstFactorの両方で有効です。 __Source__ は計算された色を指し, Destination は既に設定されたスクリーン上の色となります。もし__BlendOp__がlogical演算を使用している場合ブレンド係数は無視されます。

One The value of one - use this to let either the source or the destination color come through fully.
Zero The value zero - use this to remove either the source or the destination values.
SrcColor The value of this stage is multiplied by the source color value.
SrcAlpha The value of this stage is multiplied by the source alpha value.
DstColor このステージの値はフレームバッファのSource Color
DstAlpha このステージの値はフレームバッファのSource Alphaの値を乗算します。
OneMinusSrcColor このステージの値はフレームバッファの(1 - Source Color)を乗算します。
OneMinusSrcAlpha このステージの値はフレームバッファの(1 - Source Alpha)を乗算します。
OneMinusDstColor このステージの値はフレームバッファの(1 - Destination Color)を乗算します。
OneMinusDstAlpha このステージの値はフレームバッファの(1 - Destination Alpha)を乗算します。

詳細

次がもっとも一般的なプレンディングのタイプです:

Blend SrcAlpha OneMinusSrcAlpha // Alpha blending
Blend One One // Additive
Blend OneMinusDstColor One // Soft Additive
Blend DstColor Zero // Multiplicative
Blend DstColor SrcColor // 2x Multiplicative

次は簡潔な例のシェーダで,画面にすでにあるものに,テクスチャを加えます。

Shader "Simple Additive" {
    Properties {
        _MainTex ("Texture to blend", 2D) = "black" {}
    }
    SubShader {
        Tags { "Queue" = "Transparent" }
        Pass {
            Blend One One
            SetTexture [_MainTex] { combine texture }
        }
    }
}

さらに複雑な例,グラスです。これは2パスのシェーダとなります:

  1. 最初のパスで,照らされてアルファブレンディングされたテクスチャを画面にレンダリングします。アルファチャネルで透過性を決定します。
  2. 2つめのパスで,アルファブレンディングされたウィンドウの上に,Additiveの透過性を使用して,反射キューブマップをレンダリングします。
Shader "Glass" {
    Properties {
        _Color ("Main Color", Color) = (1,1,1,1)
        _MainTex ("Base (RGB) Transparency (A)", 2D) = "white" {}
        _Reflections ("Base (RGB) Gloss (A)", Cube) = "skybox" { TexGen CubeReflect }
    }
    SubShader {
        Tags { "Queue" = "Transparent" }
        Pass {
            Blend SrcAlpha OneMinusSrcAlpha
            Material {
                Diffuse [_Color]
            }
            Lighting On
            SetTexture [_MainTex] {
                combine texture * primary double, texture * primary
            }
        }
        Pass {
            Blend One One
            Material {
                Diffuse [_Color]
            }
            Lighting On
            SetTexture [_Reflections] {
                combine texture
                Matrix [_Reflection]
            }
        }
    }
}
ShaderLab文法: AlphaTest
ShaderLab文法:Passタグ