Размытие краев альфа-канала - PullRequest
0 голосов
/ 15 января 2019

Я использую шейдер для эффекта хроматического ключа в единстве. Он делает свою работу, но мне нужны мягкие края вокруг таланта. Так что, если я могу размыть альфа-канал, как на рисунке ниже, я считаю, что края будут мягкими .

    SubShader{
    Tags {"Queue" = "Transparent""IgnoreProjector" = "True""RenderType" = "Transparent"}


    Lighting Off
    ZWrite Off
    AlphaTest Off
    Blend SrcAlpha OneMinusSrcAlpha

    Pass {
    CGPROGRAM
    #pragma vertex vert_img
    #pragma fragment frag



    sampler2D _MainTex;
    float _Sensitivity;
    float _Smooth;
    float _Top;
    float _Bottom;
    float _Left;
    float _Right;
    float _Brightness;
    float _Red;
    float _Green;
    float _Blue;
    float edge_color;
    uniform float4 _MaskCol;
    #include "UnityCG.cginc"

    float4 frag(v2f_img i) : COLOR{
    float3 input_color = tex2D(_MainTex,i.uv).rgb;
    float d = abs(length(abs((_MaskCol.rgb) - (input_color.rgb))));
    float edge0 = _Sensitivity * _Smooth;
    float alpha = smoothstep(edge0, _Sensitivity,d);

    if (edge_color == 1) {
        if (input_color.g > input_color.r && input_color.g > input_color.b) {
         input_color.g = input_color.b; input_color.r = input_color.b;
        }
    }
    if (i.uv.x<_Left || i.uv.x>(1 - _Right))
    {
        alpha = 0;
    };
    if (i.uv.y<_Bottom || i.uv.y>(1 - _Top))
    {
        alpha = 0;
    };
    return float4(input_color*_Brightness,alpha);

    }
    ENDCG
    }

}

    FallBack"Unlit/Texture"
}

нужно вот так

оригинальный альфа-канал

Какие-нибудь идеи для достижения этого или какие-либо другие предложения?

...