Unity Shader Blend, как Ugui Outline - PullRequest
       60

Unity Shader Blend, как Ugui Outline

0 голосов
/ 30 октября 2019

Unity UGUI Обрисовать в общих чертах его создание четырехкратных вершин, поэтому я перейду к шейдеру для оптимизации (вершины создаются только один раз), и я хочу сохранить один проход. (один вызов)

enter image description here

Четыре символа, размер шрифта всех символов одинаковый. но этот символьный край выглядит немного маленьким.

Я пишу шейдер вот так

fixed4 frag(v2f IN) : SV_Target
        {
            fixed4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;

            float4 pClipRect = float4 (IN.uvOriginXY, IN.uvOriginZW);
            color.w *= IsInRect(IN.texcoord, pClipRect);
            half4 val = half4(_OutlineColor.x, _OutlineColor.y, _OutlineColor.z, 0);//(r,g,b,0)

            //black characters
            val.w += SampleAlpha(2, IN);
            val.w += SampleAlpha(5, IN);
            val.w += SampleAlpha(8, IN);
            val.w += SampleAlpha(11, IN);

            val.w = clamp(val.w, 0, 1);

            //blend
            color = (val * (1.0 - color.a)) + (color * color.a);

            return color;
        }

А нижняя правая картинка создается UGUI. Контур выглядит так, что белый цвет перекрывается черным цветом, Как можноМне это нравится?

Проблема, вероятно, отсюда: color = (val * (1.0 - color.a)) + (color * color.a);

Что я должен сделать, чтобы он выглядел как UGUIOutline? спасибо.

...