見出し画像

【Unity】シェーダーブレンドモード一覧

はじめに

視覚的に把握できるようにシェーダーのブレンドモード一覧を作成しました。ブレンド要素は11種類あることから組み合わせとしては121種類あります。

環境

Unity 2019.4.15f1 Windows 10

条件

  • 左側テクスチャ:Unlitの草のテクスチャ

  • 右側テクスチャ:UnlitでRGB(255, 0, 0, 255) [赤]でここで使用しているシェーダーのブレンドモードをそれぞれの組み合わせで変更
    (使用シェーダーは最後にあります)

  • スクショ画像はGameView

Blend Mode

シェーダー内にBlend Modeを記述することで既に描画されている色とシェーダーで計算した色とのブレンド方法を指定することが可能になっています。

一般的な記述方法としては以下のようになります。(デフォルトは加算)

Blend SrcFactor DstFactor

考え方としては

最終的にブレンドされた色 = SrcFactor * シェーダーで計算した色 + DstFactor * 既に描画されている色

Unityドキュメントにも記述があります。

Blend Modeの考え方

Blend Mode 組み合わせ一覧

DstAlpha DstAlpha

DstAlpha DstColor

DstAlpha One

DstAlpha OneMinusDstAlpha

DstAlpha OneMinusDstColor

DstAlpha OneMinusSrcAlpha

DstAlpha OneMinusSrcColor

DstAlpha SrcAlpha

DstAlpha SrcAlphaSaturate

DstAlpha SrcColor

DstAlpha Zero

DstColor OneMinusDstColor

DstColor DstAlpha

DstColor DstColor

DstColor One

DstColor OneMinusDstAlpha

DstColor OneMinusSrcAlpha

DstColor OneMinusSrcColor

DstColor SrcAlpha

DstColor SrcAlphaSaturate

DstColor SrcColor

DstColor Zero

One DstAlpha

One DstColor

One One

One OneMinusDstAlpha

One OneMinusDstColor

One OneMinusSrcAlpha

One OneMinusSrcColor

One SrcAlpha

One SrcAlphaSaturate

One SrcColor

One Zero

OneMinusDstAlpha DstAlpha

OneMinusDstAlpha DstColor

OneMinusDstAlpha One

OneMinusDstAlpha OneMinusDstAlpha

OneMinusDstAlpha OneMinusDstColor

OneMinusDstAlpha OneMinusSrcAlpha

OneMinusDstAlpha OneMinusSrcColor

OneMinusDstAlpha SrcAlpha

OneMinusDstAlpha SrcAlphaSaturate

OneMinusDstAlpha SrcColor

OneMinusDstAlpha Zero

OneMinusDstColor DstAlpha

OneMinusDstColor DstColor

OneMinusDstColor One

OneMinusDstColor OneMinusDstAlpha

OneMinusDstColor OneMinusDstColor

OneMinusDstColor OneMinusSrcAlpha

OneMinusDstColor OneMinusSrcColor

OneMinusDstColor SrcAlpha

OneMinusDstColor SrcAlphaSaturate

OneMinusDstColor SrcColor

OneMinusDstColor Zero

OneMinusSrcAlpha DstAlpha

OneMinusSrcAlpha DstColor

OneMinusSrcAlpha One

OneMinusSrcAlpha OneMinusDstAlpha

OneMinusSrcAlpha OneMinusDstColor

OneMinusSrcAlpha OneMinusSrcAlpha

OneMinusSrcAlpha OneMinusSrcColor

OneMinusSrcAlpha SrcAlpha

OneMinusSrcAlpha SrcAlphaSaturate

OneMinusSrcAlpha SrcColor

OneMinusSrcAlpha Zero

OneMinusSrcColor DstAlpha

OneMinusSrcColor DstColor

OneMinusSrcColor One

OneMinusSrcColor OneMinusDstAlpha

OneMinusSrcColor OneMinusDstColor

OneMinusSrcColor OneMinusSrcAlpha

OneMinusSrcColor OneMinusSrcColor

OneMinusSrcColor SrcAlpha

OneMinusSrcColor SrcAlphaSaturate

OneMinusSrcColor SrcColor

OneMinusSrcColor Zero

SrcAlpha DstAlpha

SrcAlpha DstColor

SrcAlpha One

SrcAlpha OneMinusDstAlpha

SrcAlpha OneMinusDstColor

SrcAlpha OneMinusSrcAlpha

SrcAlpha OneMinusSrcColor

SrcAlpha SrcAlpha

SrcAlpha SrcAlphaSaturate

SrcAlpha SrcColor

SrcAlpha Zero

SrcAlphaSaturate DstAlpha

SrcAlphaSaturate DstColor

SrcAlphaSaturate One

SrcAlphaSaturate OneMinusDstAlpha

SrcAlphaSaturate OneMinusDstColor

SrcAlphaSaturate OneMinusSrcAlpha

SrcAlphaSaturate OneMinusSrcColor

SrcAlphaSaturate SrcAlpha

SrcAlphaSaturate SrcAlphaSaturate

SrcAlphaSaturate SrcColor

SrcAlphaSaturate Zero

SrcColor DstAlpha

SrcColor DstColor

SrcColor One

SrcColor OneMinusDstAlpha

SrcColor OneMinusDstColor

SrcColor OneMinusSrcAlpha

SrcColor OneMinusSrcColor

SrcColor SrcAlpha

SrcColor SrcAlphaSaturate

SrcColor SrcColor

SrcColor Zero

Zero DstAlpha

Zero DstColor

Zero One

Zero OneMinusDstAlpha

Zero OneMinusDstColor

Zero OneMinusSrcAlpha

Zero OneMinusSrcColor

Zero SrcAlpha

Zero SrcAlphaSaturate

Zero SrcColor

Zero Zero


使用シェーダー

Shader "Unlit/BlendTest"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Color("Color", Color) = (1, 1, 1, 1)
        [Enum(UnityEngine.Rendering.BlendMode)]_BlendSrc("Blend Src", Float) = 0
        [Enum(UnityEngine.Rendering.BlendMode)]_BlendDst("Blend Dst", Float) = 0
    }
    SubShader
    {
        Tags{ "Queue" = "Transparent" "RenderType" = "Transparent" }
        Blend [_BlendSrc] [_BlendDst]

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            fixed4 _Color;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                return _Color;
            }
            ENDCG
        }
    }
}

おわりに

全てブレンドモードの組み合わせを画像付きで見られたらいいなぁという思いで作りました。色に関する内容なので、やはり画像付きの方が直感的に把握しやすいと思います。

「シェーダーのブレンドモード何も分からない」の手助けになれば幸いです。🌱


参考


この記事が気に入ったらサポートをしてみませんか?