miepzerino
2023-12-15 8139cd89a52559cdd906cd5866dcc55dbd7003a7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// Simplified version of the SDF Surface shader :
// - No support for Bevel, Bump or envmap
// - Diffuse only lighting
// - Fully supports only 1 directional light. Other lights can affect it, but it will be per-vertex/SH.
 
Shader "TextMeshPro/Mobile/Distance Field (Surface)" {
 
Properties {
    _FaceTex            ("Fill Texture", 2D) = "white" {}
    [HDR]_FaceColor        ("Fill Color", Color) = (1,1,1,1)
    _FaceDilate            ("Face Dilate", Range(-1,1)) = 0
 
    [HDR]_OutlineColor    ("Outline Color", Color) = (0,0,0,1)
    _OutlineTex            ("Outline Texture", 2D) = "white" {}
    _OutlineWidth        ("Outline Thickness", Range(0, 1)) = 0
    _OutlineSoftness    ("Outline Softness", Range(0,1)) = 0
 
    [HDR]_GlowColor        ("Color", Color) = (0, 1, 0, 0.5)
    _GlowOffset            ("Offset", Range(-1,1)) = 0
    _GlowInner            ("Inner", Range(0,1)) = 0.05
    _GlowOuter            ("Outer", Range(0,1)) = 0.05
    _GlowPower            ("Falloff", Range(1, 0)) = 0.75
 
    _WeightNormal        ("Weight Normal", float) = 0
    _WeightBold            ("Weight Bold", float) = 0.5
 
    // Should not be directly exposed to the user
    _ShaderFlags        ("Flags", float) = 0
    _ScaleRatioA        ("Scale RatioA", float) = 1
    _ScaleRatioB        ("Scale RatioB", float) = 1
    _ScaleRatioC        ("Scale RatioC", float) = 1
 
    _MainTex            ("Font Atlas", 2D) = "white" {}
    _TextureWidth        ("Texture Width", float) = 512
    _TextureHeight        ("Texture Height", float) = 512
    _GradientScale        ("Gradient Scale", float) = 5.0
    _ScaleX                ("Scale X", float) = 1.0
    _ScaleY                ("Scale Y", float) = 1.0
    _PerspectiveFilter    ("Perspective Correction", Range(0, 1)) = 0.875
    _Sharpness            ("Sharpness", Range(-1,1)) = 0
 
    _VertexOffsetX        ("Vertex OffsetX", float) = 0
    _VertexOffsetY        ("Vertex OffsetY", float) = 0
 
    _CullMode            ("Cull Mode", Float) = 0
    //_MaskCoord        ("Mask Coords", vector) = (0,0,0,0)
    //_MaskSoftness        ("Mask Softness", float) = 0
}
 
SubShader {
 
    Tags {
        "Queue"="Transparent"
        "IgnoreProjector"="True"
        "RenderType"="Transparent"
    }
 
    LOD 300
    Cull [_CullMode]
 
    CGPROGRAM
    #pragma surface PixShader Lambert alpha:blend vertex:VertShader noforwardadd nolightmap nodirlightmap
    #pragma target 3.0
    #pragma shader_feature __ GLOW_ON
 
    #include "TMPro_Properties.cginc"
    #include "TMPro.cginc"
 
    half _FaceShininess;
    half _OutlineShininess;
 
    struct Input
    {
        fixed4    color        : COLOR;
        float2    uv_MainTex;
        float2    uv2_FaceTex;
        float2  uv2_OutlineTex;
        float2    param;                    // Weight, Scale
        float3    viewDirEnv;
    };
 
    #include "TMPro_Surface.cginc"
 
    ENDCG
 
    // Pass to render object as a shadow caster
    Pass
    {
        Name "Caster"
        Tags { "LightMode" = "ShadowCaster" }
        Offset 1, 1
 
        Fog {Mode Off}
        ZWrite On ZTest LEqual Cull Off
 
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #pragma multi_compile_shadowcaster
        #include "UnityCG.cginc"
 
        struct v2f {
            V2F_SHADOW_CASTER;
            float2    uv            : TEXCOORD1;
            float2    uv2            : TEXCOORD3;
            float    alphaClip    : TEXCOORD2;
        };
 
        uniform float4 _MainTex_ST;
        uniform float4 _OutlineTex_ST;
        float _OutlineWidth;
        float _FaceDilate;
        float _ScaleRatioA;
 
        v2f vert( appdata_base v )
        {
            v2f o;
            TRANSFER_SHADOW_CASTER(o)
            o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
            o.uv2 = TRANSFORM_TEX(v.texcoord, _OutlineTex);
            o.alphaClip = o.alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _FaceDilate * _ScaleRatioA) / 2;
            return o;
        }
 
        uniform sampler2D _MainTex;
 
        float4 frag(v2f i) : COLOR
        {
            fixed4 texcol = tex2D(_MainTex, i.uv).a;
            clip(texcol.a - i.alphaClip);
            SHADOW_CASTER_FRAGMENT(i)
        }
        ENDCG
    }
}
 
CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI"
}