aboutsummaryrefslogtreecommitdiffstats
path: root/Assets/TextMesh Pro/Shaders
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/TextMesh Pro/Shaders')
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader143
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader145
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader143
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader317
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader310
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader247
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader240
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader106
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader240
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader138
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader158
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF.shader317
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_SDF.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_Sprite.shader116
-rw-r--r--Assets/TextMesh Pro/Shaders/TMP_Sprite.shader.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMPro.cginc84
-rw-r--r--Assets/TextMesh Pro/Shaders/TMPro.cginc.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc157
-rw-r--r--Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc85
-rw-r--r--Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta9
-rw-r--r--Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc101
-rw-r--r--Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta9
34 files changed, 3200 insertions, 0 deletions
diff --git a/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader b/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader
new file mode 100644
index 0000000..bab2b2c
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader
@@ -0,0 +1,143 @@
+Shader "TextMeshPro/Bitmap Custom Atlas" {
+
+Properties {
+ _MainTex ("Font Atlas", 2D) = "white" {}
+ _FaceTex ("Font Texture", 2D) = "white" {}
+ [HDR]_FaceColor ("Text Color", Color) = (1,1,1,1)
+
+ _VertexOffsetX ("Vertex OffsetX", float) = 0
+ _VertexOffsetY ("Vertex OffsetY", float) = 0
+ _MaskSoftnessX ("Mask SoftnessX", float) = 0
+ _MaskSoftnessY ("Mask SoftnessY", float) = 0
+
+ _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+ _Padding ("Padding", float) = 0
+
+ _StencilComp("Stencil Comparison", Float) = 8
+ _Stencil("Stencil ID", Float) = 0
+ _StencilOp("Stencil Operation", Float) = 0
+ _StencilWriteMask("Stencil Write Mask", Float) = 255
+ _StencilReadMask("Stencil Read Mask", Float) = 255
+
+ _CullMode("Cull Mode", Float) = 0
+ _ColorMask("Color Mask", Float) = 15
+}
+
+SubShader{
+
+ Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
+
+ Stencil
+ {
+ Ref[_Stencil]
+ Comp[_StencilComp]
+ Pass[_StencilOp]
+ ReadMask[_StencilReadMask]
+ WriteMask[_StencilWriteMask]
+ }
+
+
+ Lighting Off
+ Cull [_CullMode]
+ ZTest [unity_GUIZTestMode]
+ ZWrite Off
+ Fog { Mode Off }
+ Blend SrcAlpha OneMinusSrcAlpha
+ ColorMask[_ColorMask]
+
+ Pass {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
+
+
+ #include "UnityCG.cginc"
+
+ struct appdata_t {
+ float4 vertex : POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+ };
+
+ struct v2f {
+ float4 vertex : SV_POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+ float4 mask : TEXCOORD2;
+ };
+
+ uniform sampler2D _MainTex;
+ uniform sampler2D _FaceTex;
+ uniform float4 _FaceTex_ST;
+ uniform fixed4 _FaceColor;
+
+ uniform float _VertexOffsetX;
+ uniform float _VertexOffsetY;
+ uniform float4 _ClipRect;
+ uniform float _MaskSoftnessX;
+ uniform float _MaskSoftnessY;
+
+ float2 UnpackUV(float uv)
+ {
+ float2 output;
+ output.x = floor(uv / 4096);
+ output.y = uv - 4096 * output.x;
+
+ return output * 0.001953125;
+ }
+
+ v2f vert (appdata_t v)
+ {
+ float4 vert = v.vertex;
+ vert.x += _VertexOffsetX;
+ vert.y += _VertexOffsetY;
+
+ vert.xy += (vert.w * 0.5) / _ScreenParams.xy;
+
+ float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert));
+
+ fixed4 faceColor = v.color;
+ faceColor *= _FaceColor;
+
+ v2f OUT;
+ OUT.vertex = vPosition;
+ OUT.color = faceColor;
+ OUT.texcoord0 = v.texcoord0;
+ OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex);
+ float2 pixelSize = vPosition.w;
+ pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1]));
+
+ // Clamp _ClipRect to 16bit.
+ float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
+ OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy));
+
+ return OUT;
+ }
+
+ fixed4 frag (v2f IN) : SV_Target
+ {
+ fixed4 color = tex2D(_MainTex, IN.texcoord0) * tex2D(_FaceTex, IN.texcoord1) * IN.color;
+
+ // Alternative implementation to UnityGet2DClipping with support for softness.
+ #if UNITY_UI_CLIP_RECT
+ half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw);
+ color *= m.x * m.y;
+ #endif
+
+ #if UNITY_UI_ALPHACLIP
+ clip(color.a - 0.001);
+ #endif
+
+ return color;
+ }
+ ENDCG
+ }
+}
+
+ CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI"
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta
new file mode 100644
index 0000000..0a416c8
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Custom-Atlas.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 48bb5f55d8670e349b6e614913f9d910
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader b/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader
new file mode 100644
index 0000000..006a271
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader
@@ -0,0 +1,145 @@
+Shader "TextMeshPro/Mobile/Bitmap" {
+
+Properties {
+ _MainTex ("Font Atlas", 2D) = "white" {}
+ [HDR]_Color ("Text Color", Color) = (1,1,1,1)
+ _DiffusePower ("Diffuse Power", Range(1.0,4.0)) = 1.0
+
+ _VertexOffsetX("Vertex OffsetX", float) = 0
+ _VertexOffsetY("Vertex OffsetY", float) = 0
+ _MaskSoftnessX("Mask SoftnessX", float) = 0
+ _MaskSoftnessY("Mask SoftnessY", float) = 0
+
+ _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+
+ _StencilComp("Stencil Comparison", Float) = 8
+ _Stencil("Stencil ID", Float) = 0
+ _StencilOp("Stencil Operation", Float) = 0
+ _StencilWriteMask("Stencil Write Mask", Float) = 255
+ _StencilReadMask("Stencil Read Mask", Float) = 255
+
+ _CullMode("Cull Mode", Float) = 0
+ _ColorMask("Color Mask", Float) = 15
+}
+
+SubShader {
+
+ Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
+
+ Stencil
+ {
+ Ref[_Stencil]
+ Comp[_StencilComp]
+ Pass[_StencilOp]
+ ReadMask[_StencilReadMask]
+ WriteMask[_StencilWriteMask]
+ }
+
+
+ Lighting Off
+ Cull [_CullMode]
+ ZTest [unity_GUIZTestMode]
+ ZWrite Off
+ Fog { Mode Off }
+ Blend SrcAlpha OneMinusSrcAlpha
+ ColorMask[_ColorMask]
+
+ Pass {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma fragmentoption ARB_precision_hint_fastest
+
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
+
+
+ #include "UnityCG.cginc"
+
+ struct appdata_t {
+ float4 vertex : POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+ };
+
+ struct v2f {
+ float4 vertex : POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float4 mask : TEXCOORD2;
+ };
+
+ sampler2D _MainTex;
+ fixed4 _Color;
+ float _DiffusePower;
+
+ uniform float _VertexOffsetX;
+ uniform float _VertexOffsetY;
+ uniform float4 _ClipRect;
+ uniform float _MaskSoftnessX;
+ uniform float _MaskSoftnessY;
+
+ v2f vert (appdata_t v)
+ {
+ v2f OUT;
+ float4 vert = v.vertex;
+ vert.x += _VertexOffsetX;
+ vert.y += _VertexOffsetY;
+
+ vert.xy += (vert.w * 0.5) / _ScreenParams.xy;
+
+ OUT.vertex = UnityPixelSnap(UnityObjectToClipPos(vert));
+ OUT.color = v.color;
+ OUT.color *= _Color;
+ OUT.color.rgb *= _DiffusePower;
+ OUT.texcoord0 = v.texcoord0;
+
+ float2 pixelSize = OUT.vertex.w;
+ //pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1]));
+
+ // Clamp _ClipRect to 16bit.
+ float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
+ OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy));
+
+ return OUT;
+ }
+
+ fixed4 frag (v2f IN) : COLOR
+ {
+ fixed4 color = fixed4(IN.color.rgb, IN.color.a * tex2D(_MainTex, IN.texcoord0).a);
+
+ // Alternative implementation to UnityGet2DClipping with support for softness.
+ #if UNITY_UI_CLIP_RECT
+ half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw);
+ color *= m.x * m.y;
+ #endif
+
+ #if UNITY_UI_ALPHACLIP
+ clip(color.a - 0.001);
+ #endif
+
+ return color;
+ }
+ ENDCG
+ }
+}
+
+SubShader {
+ Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
+ Lighting Off Cull Off ZTest Always ZWrite Off Fog { Mode Off }
+ Blend SrcAlpha OneMinusSrcAlpha
+ BindChannels {
+ Bind "Color", color
+ Bind "Vertex", vertex
+ Bind "TexCoord", texcoord0
+ }
+ Pass {
+ SetTexture [_MainTex] {
+ constantColor [_Color] combine constant * primary, constant * texture
+ }
+ }
+}
+
+CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI"
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta
new file mode 100644
index 0000000..d5fb125
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_Bitmap-Mobile.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 1e3b057af24249748ff873be7fafee47
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader b/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader
new file mode 100644
index 0000000..8ce4937
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader
@@ -0,0 +1,143 @@
+Shader "TextMeshPro/Bitmap" {
+
+Properties {
+ _MainTex ("Font Atlas", 2D) = "white" {}
+ _FaceTex ("Font Texture", 2D) = "white" {}
+ [HDR]_FaceColor ("Text Color", Color) = (1,1,1,1)
+
+ _VertexOffsetX ("Vertex OffsetX", float) = 0
+ _VertexOffsetY ("Vertex OffsetY", float) = 0
+ _MaskSoftnessX ("Mask SoftnessX", float) = 0
+ _MaskSoftnessY ("Mask SoftnessY", float) = 0
+
+ _ClipRect("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+
+ _StencilComp("Stencil Comparison", Float) = 8
+ _Stencil("Stencil ID", Float) = 0
+ _StencilOp("Stencil Operation", Float) = 0
+ _StencilWriteMask("Stencil Write Mask", Float) = 255
+ _StencilReadMask("Stencil Read Mask", Float) = 255
+
+ _CullMode("Cull Mode", Float) = 0
+ _ColorMask("Color Mask", Float) = 15
+}
+
+SubShader{
+
+ Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
+
+ Stencil
+ {
+ Ref[_Stencil]
+ Comp[_StencilComp]
+ Pass[_StencilOp]
+ ReadMask[_StencilReadMask]
+ WriteMask[_StencilWriteMask]
+ }
+
+
+ Lighting Off
+ Cull [_CullMode]
+ ZTest [unity_GUIZTestMode]
+ ZWrite Off
+ Fog { Mode Off }
+ Blend SrcAlpha OneMinusSrcAlpha
+ ColorMask[_ColorMask]
+
+ Pass {
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
+
+
+ #include "UnityCG.cginc"
+
+ struct appdata_t {
+ float4 vertex : POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+ };
+
+ struct v2f {
+ float4 vertex : SV_POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+ float4 mask : TEXCOORD2;
+ };
+
+ uniform sampler2D _MainTex;
+ uniform sampler2D _FaceTex;
+ uniform float4 _FaceTex_ST;
+ uniform fixed4 _FaceColor;
+
+ uniform float _VertexOffsetX;
+ uniform float _VertexOffsetY;
+ uniform float4 _ClipRect;
+ uniform float _MaskSoftnessX;
+ uniform float _MaskSoftnessY;
+
+ float2 UnpackUV(float uv)
+ {
+ float2 output;
+ output.x = floor(uv / 4096);
+ output.y = uv - 4096 * output.x;
+
+ return output * 0.001953125;
+ }
+
+ v2f vert (appdata_t v)
+ {
+ float4 vert = v.vertex;
+ vert.x += _VertexOffsetX;
+ vert.y += _VertexOffsetY;
+
+ vert.xy += (vert.w * 0.5) / _ScreenParams.xy;
+
+ float4 vPosition = UnityPixelSnap(UnityObjectToClipPos(vert));
+
+ fixed4 faceColor = v.color;
+ faceColor *= _FaceColor;
+
+ v2f OUT;
+ OUT.vertex = vPosition;
+ OUT.color = faceColor;
+ OUT.texcoord0 = v.texcoord0;
+ OUT.texcoord1 = TRANSFORM_TEX(UnpackUV(v.texcoord1), _FaceTex);
+ float2 pixelSize = vPosition.w;
+ pixelSize /= abs(float2(_ScreenParams.x * UNITY_MATRIX_P[0][0], _ScreenParams.y * UNITY_MATRIX_P[1][1]));
+
+ // Clamp _ClipRect to 16bit.
+ float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
+ OUT.mask = float4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy));
+
+ return OUT;
+ }
+
+ fixed4 frag (v2f IN) : SV_Target
+ {
+ fixed4 color = tex2D(_MainTex, IN.texcoord0);
+ color = fixed4 (tex2D(_FaceTex, IN.texcoord1).rgb * IN.color.rgb, IN.color.a * color.a);
+
+ // Alternative implementation to UnityGet2DClipping with support for softness.
+ #if UNITY_UI_CLIP_RECT
+ half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(IN.mask.xy)) * IN.mask.zw);
+ color *= m.x * m.y;
+ #endif
+
+ #if UNITY_UI_ALPHACLIP
+ clip(color.a - 0.001);
+ #endif
+
+ return color;
+ }
+ ENDCG
+ }
+}
+
+ CustomEditor "TMPro.EditorUtilities.TMP_BitmapShaderGUI"
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta
new file mode 100644
index 0000000..7eb1870
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 128e987d567d4e2c824d754223b3f3b0
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader b/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader
new file mode 100644
index 0000000..c50c593
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader
@@ -0,0 +1,317 @@
+Shader "TextMeshPro/Distance Field Overlay" {
+
+Properties {
+ _FaceTex ("Face Texture", 2D) = "white" {}
+ _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0
+ _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0
+ [HDR]_FaceColor ("Face 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" {}
+ _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0
+ _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0
+ _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0
+ _OutlineSoftness ("Outline Softness", Range(0,1)) = 0
+
+ _Bevel ("Bevel", Range(0,1)) = 0.5
+ _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0
+ _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0
+ _BevelClamp ("Bevel Clamp", Range(0,1)) = 0
+ _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0
+
+ _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416
+ [HDR]_SpecularColor ("Specular", Color) = (1,1,1,1)
+ _SpecularPower ("Specular", Range(0,4)) = 2.0
+ _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10
+ _Diffuse ("Diffuse", Range(0,1)) = 0.5
+ _Ambient ("Ambient", Range(1,0)) = 0.5
+
+ _BumpMap ("Normal map", 2D) = "bump" {}
+ _BumpOutline ("Bump Outline", Range(0,1)) = 0
+ _BumpFace ("Bump Face", Range(0,1)) = 0
+
+ _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1)
+ _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1)
+ _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ }
+ _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0)
+
+
+ [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5)
+ _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
+ _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
+ _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
+ _UnderlaySoftness ("Border 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
+
+ _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
+
+ _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767)
+ _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+ _MaskSoftnessX ("Mask SoftnessX", float) = 0
+ _MaskSoftnessY ("Mask SoftnessY", float) = 0
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _CullMode ("Cull Mode", Float) = 0
+ _ColorMask ("Color Mask", Float) = 15
+}
+
+SubShader {
+
+ Tags
+ {
+ "Queue"="Overlay"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ }
+
+ Stencil
+ {
+ Ref [_Stencil]
+ Comp [_StencilComp]
+ Pass [_StencilOp]
+ ReadMask [_StencilReadMask]
+ WriteMask [_StencilWriteMask]
+ }
+
+ Cull [_CullMode]
+ ZWrite Off
+ Lighting Off
+ Fog { Mode Off }
+ ZTest Always
+ Blend One OneMinusSrcAlpha
+ ColorMask [_ColorMask]
+
+ Pass {
+ CGPROGRAM
+ #pragma target 3.0
+ #pragma vertex VertShader
+ #pragma fragment PixShader
+ #pragma shader_feature __ BEVEL_ON
+ #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER
+ #pragma shader_feature __ GLOW_ON
+
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
+
+ #include "UnityCG.cginc"
+ #include "UnityUI.cginc"
+ #include "TMPro_Properties.cginc"
+ #include "TMPro.cginc"
+
+ struct vertex_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ float4 position : POSITION;
+ float3 normal : NORMAL;
+ fixed4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+ };
+
+
+ struct pixel_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ UNITY_VERTEX_OUTPUT_STEREO
+ float4 position : SV_POSITION;
+ fixed4 color : COLOR;
+ float2 atlas : TEXCOORD0; // Atlas
+ float4 param : TEXCOORD1; // alphaClip, scale, bias, weight
+ float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw)
+ float3 viewDir : TEXCOORD3;
+
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ float4 texcoord2 : TEXCOORD4; // u,v, scale, bias
+ fixed4 underlayColor : COLOR1;
+ #endif
+ float4 textures : TEXCOORD5;
+ };
+
+ // Used by Unity internally to handle Texture Tiling and Offset.
+ float4 _FaceTex_ST;
+ float4 _OutlineTex_ST;
+
+ pixel_t VertShader(vertex_t input)
+ {
+ pixel_t output;
+
+ UNITY_INITIALIZE_OUTPUT(pixel_t, output);
+ UNITY_SETUP_INSTANCE_ID(input);
+ UNITY_TRANSFER_INSTANCE_ID(input,output);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
+
+ float bold = step(input.texcoord1.y, 0);
+
+ float4 vert = input.position;
+ vert.x += _VertexOffsetX;
+ vert.y += _VertexOffsetY;
+
+ float4 vPosition = UnityObjectToClipPos(vert);
+
+ float2 pixelSize = vPosition.w;
+ pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy));
+ float scale = rsqrt(dot(pixelSize, pixelSize));
+ scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1);
+ if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert)))));
+
+ float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0;
+ weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5;
+
+ float bias =(.5 - weight) + (.5 / scale);
+
+ float alphaClip = (1.0 - _OutlineWidth*_ScaleRatioA - _OutlineSoftness*_ScaleRatioA);
+
+ #if GLOW_ON
+ alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB);
+ #endif
+
+ alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight;
+
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ float4 underlayColor = _UnderlayColor;
+ underlayColor.rgb *= underlayColor.a;
+
+ float bScale = scale;
+ bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale);
+ float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale);
+
+ float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth;
+ float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight;
+ float2 bOffset = float2(x, y);
+ #endif
+
+ // Generate UV for the Masking Texture
+ float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
+ float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy);
+
+ // Support for texture tiling and offset
+ float2 textureUV = UnpackUV(input.texcoord1.x);
+ float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex);
+ float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex);
+
+
+ output.position = vPosition;
+ output.color = input.color;
+ output.atlas = input.texcoord0;
+ output.param = float4(alphaClip, scale, bias, weight);
+ output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy));
+ output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz);
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ output.texcoord2 = float4(input.texcoord0 + bOffset, bScale, bBias);
+ output.underlayColor = underlayColor;
+ #endif
+ output.textures = float4(faceUV, outlineUV);
+
+ return output;
+ }
+
+
+ fixed4 PixShader(pixel_t input) : SV_Target
+ {
+ UNITY_SETUP_INSTANCE_ID(input);
+
+ float c = tex2D(_MainTex, input.atlas).a;
+
+ #ifndef UNDERLAY_ON
+ clip(c - input.param.x);
+ #endif
+
+ float scale = input.param.y;
+ float bias = input.param.z;
+ float weight = input.param.w;
+ float sd = (bias - c) * scale;
+
+ float outline = (_OutlineWidth * _ScaleRatioA) * scale;
+ float softness = (_OutlineSoftness * _ScaleRatioA) * scale;
+
+ half4 faceColor = _FaceColor;
+ half4 outlineColor = _OutlineColor;
+
+ faceColor.rgb *= input.color.rgb;
+
+ faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y);
+ outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y);
+
+ faceColor = GetColor(sd, faceColor, outlineColor, outline, softness);
+
+ #if BEVEL_ON
+ float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0);
+ float3 n = GetSurfaceNormal(input.atlas, weight, dxy);
+
+ float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz;
+ bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5));
+ n = normalize(n- bump);
+
+ float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0));
+
+ float3 col = GetSpecular(n, light);
+ faceColor.rgb += col*faceColor.a;
+ faceColor.rgb *= 1-(dot(n, light)*_Diffuse);
+ faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z);
+
+ fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n));
+ faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a;
+ #endif
+
+ #if UNDERLAY_ON
+ float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z;
+ faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a);
+ #endif
+
+ #if UNDERLAY_INNER
+ float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z;
+ faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a);
+ #endif
+
+ #if GLOW_ON
+ float4 glowColor = GetGlowColor(sd, scale);
+ faceColor.rgb += glowColor.rgb * glowColor.a;
+ #endif
+
+ // Alternative implementation to UnityGet2DClipping with support for softness.
+ #if UNITY_UI_CLIP_RECT
+ half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw);
+ faceColor *= m.x * m.y;
+ #endif
+
+ #if UNITY_UI_ALPHACLIP
+ clip(faceColor.a - 0.001);
+ #endif
+
+ return faceColor * input.color.a;
+ }
+
+ ENDCG
+ }
+}
+
+Fallback "TextMeshPro/Mobile/Distance Field"
+CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI"
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta
new file mode 100644
index 0000000..56284e9
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF Overlay.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: dd89cf5b9246416f84610a006f916af7
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader b/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader
new file mode 100644
index 0000000..ed48574
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader
@@ -0,0 +1,310 @@
+Shader "TextMeshPro/Distance Field SSD" {
+
+Properties {
+ _FaceTex ("Face Texture", 2D) = "white" {}
+ _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0
+ _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0
+ [HDR]_FaceColor ("Face 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" {}
+ _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0
+ _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0
+ _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0
+ _OutlineSoftness ("Outline Softness", Range(0,1)) = 0
+
+ _Bevel ("Bevel", Range(0,1)) = 0.5
+ _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0
+ _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0
+ _BevelClamp ("Bevel Clamp", Range(0,1)) = 0
+ _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0
+
+ _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416
+ [HDR]_SpecularColor ("Specular", Color) = (1,1,1,1)
+ _SpecularPower ("Specular", Range(0,4)) = 2.0
+ _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10
+ _Diffuse ("Diffuse", Range(0,1)) = 0.5
+ _Ambient ("Ambient", Range(1,0)) = 0.5
+
+ _BumpMap ("Normal map", 2D) = "bump" {}
+ _BumpOutline ("Bump Outline", Range(0,1)) = 0
+ _BumpFace ("Bump Face", Range(0,1)) = 0
+
+ _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1)
+ _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1)
+ _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ }
+ _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0)
+
+
+ [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5)
+ _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
+ _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
+ _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
+ _UnderlaySoftness ("Border 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
+
+ _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
+
+ _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767)
+ _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+ _MaskSoftnessX ("Mask SoftnessX", float) = 0
+ _MaskSoftnessY ("Mask SoftnessY", float) = 0
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _CullMode ("Cull Mode", Float) = 0
+ _ColorMask ("Color Mask", Float) = 15
+}
+
+SubShader {
+ Tags
+ {
+ "Queue" = "Transparent"
+ "IgnoreProjector" = "True"
+ "RenderType" = "Transparent"
+ }
+
+ Stencil
+ {
+ Ref[_Stencil]
+ Comp[_StencilComp]
+ Pass[_StencilOp]
+ ReadMask[_StencilReadMask]
+ WriteMask[_StencilWriteMask]
+ }
+
+ Cull[_CullMode]
+ ZWrite Off
+ Lighting Off
+ Fog { Mode Off }
+ ZTest[unity_GUIZTestMode]
+ Blend One OneMinusSrcAlpha
+ ColorMask[_ColorMask]
+
+ Pass {
+ CGPROGRAM
+ #pragma target 3.0
+ #pragma vertex VertShader
+ #pragma fragment PixShader
+ #pragma shader_feature __ BEVEL_ON
+ #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER
+ #pragma shader_feature __ GLOW_ON
+ #pragma shader_feature __ FORCE_LINEAR
+
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
+
+ #include "UnityCG.cginc"
+ #include "UnityUI.cginc"
+ #include "TMPro_Properties.cginc"
+ #include "TMPro.cginc"
+
+ struct vertex_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ float4 position : POSITION;
+ float3 normal : NORMAL;
+ float4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+ };
+
+
+ struct pixel_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ UNITY_VERTEX_OUTPUT_STEREO
+ float4 position : SV_POSITION;
+ float4 color : COLOR;
+ float2 atlas : TEXCOORD0;
+ float weight : TEXCOORD1;
+ float2 mask : TEXCOORD2; // Position in object space(xy)
+ float3 viewDir : TEXCOORD3;
+
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ float2 texcoord2 : TEXCOORD4;
+ float4 underlayColor : COLOR1;
+ #endif
+ float4 textures : TEXCOORD5;
+ };
+
+ // Used by Unity internally to handle Texture Tiling and Offset.
+ float4 _FaceTex_ST;
+ float4 _OutlineTex_ST;
+
+ float4 SRGBToLinear(float4 rgba) {
+ return float4(lerp(rgba.rgb / 12.92f, pow((rgba.rgb + 0.055f) / 1.055f, 2.4f), step(0.04045f, rgba.rgb)), rgba.a);
+ }
+
+ pixel_t VertShader(vertex_t input)
+ {
+ pixel_t output;
+
+ UNITY_INITIALIZE_OUTPUT(pixel_t, output);
+ UNITY_SETUP_INSTANCE_ID(input);
+ UNITY_TRANSFER_INSTANCE_ID(input,output);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
+
+ float bold = step(input.texcoord1.y, 0);
+
+ float4 vert = input.position;
+ vert.x += _VertexOffsetX;
+ vert.y += _VertexOffsetY;
+
+ float4 vPosition = UnityObjectToClipPos(vert);
+
+ float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0;
+ weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5;
+
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ float4 underlayColor = _UnderlayColor;
+ underlayColor.rgb *= underlayColor.a;
+
+ float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth;
+ float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight;
+ float2 bOffset = float2(x, y);
+ #endif
+
+ // Generate UV for the Masking Texture
+ float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
+
+ // Support for texture tiling and offset
+ float2 textureUV = UnpackUV(input.texcoord1.x);
+ float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex);
+ float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex);
+
+ float4 color = input.color;
+ #if (FORCE_LINEAR && !UNITY_COLORSPACE_GAMMA)
+ color = SRGBToLinear(input.color);
+ #endif
+
+ output.position = vPosition;
+ output.color = color;
+ output.atlas = input.texcoord0;
+ output.weight = weight;
+ output.mask = half2(vert.xy * 2 - clampedRect.xy - clampedRect.zw);
+ output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz);
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ output.texcoord2 = input.texcoord0 + bOffset;
+ output.underlayColor = underlayColor;
+ #endif
+ output.textures = float4(faceUV, outlineUV);
+
+ return output;
+ }
+
+
+ fixed4 PixShader(pixel_t input) : SV_Target
+ {
+ UNITY_SETUP_INSTANCE_ID(input);
+
+ float c = tex2D(_MainTex, input.atlas).a;
+
+ float2 pixelSize = float2(ddx(input.atlas.y), ddy(input.atlas.y));
+ pixelSize *= _TextureWidth * .75;
+ float scale = rsqrt(dot(pixelSize, pixelSize)) * _GradientScale * (_Sharpness + 1);
+
+ float weight = input.weight;
+ float bias = (.5 - weight) + (.5 / scale);
+ float sd = (bias - c) * scale;
+
+ float outline = (_OutlineWidth * _ScaleRatioA) * scale;
+ float softness = (_OutlineSoftness * _ScaleRatioA) * scale;
+
+ half4 faceColor = _FaceColor;
+ half4 outlineColor = _OutlineColor;
+
+ faceColor.rgb *= input.color.rgb;
+
+ faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y);
+ outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y);
+
+ faceColor = GetColor(sd, faceColor, outlineColor, outline, softness);
+
+ #if BEVEL_ON
+ float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0);
+ float3 n = GetSurfaceNormal(input.atlas, weight, dxy);
+
+ float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz;
+ bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5));
+ n = normalize(n - bump);
+
+ float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0));
+
+ float3 col = GetSpecular(n, light);
+ faceColor.rgb += col * faceColor.a;
+ faceColor.rgb *= 1 - (dot(n, light) * _Diffuse);
+ faceColor.rgb *= lerp(_Ambient, 1, n.z * n.z);
+
+ fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n));
+ faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a;
+ #endif
+
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ float bScale = scale;
+ bScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * bScale);
+ float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale);
+ #endif
+
+ #if UNDERLAY_ON
+ float d = tex2D(_MainTex, input.texcoord2.xy).a * bScale;
+ faceColor += input.underlayColor * saturate(d - bBias) * (1 - faceColor.a);
+ #endif
+
+ #if UNDERLAY_INNER
+ float d = tex2D(_MainTex, input.texcoord2.xy).a * bScale;
+ faceColor += input.underlayColor * (1 - saturate(d - bBias)) * saturate(1 - sd) * (1 - faceColor.a);
+ #endif
+
+ #if GLOW_ON
+ float4 glowColor = GetGlowColor(sd, scale);
+ faceColor.rgb += glowColor.rgb * glowColor.a;
+ #endif
+
+ // Alternative implementation to UnityGet2DClipping with support for softness.
+ #if UNITY_UI_CLIP_RECT
+ float2 maskZW = 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + (1 / scale));
+ half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * maskZW);
+ faceColor *= m.x * m.y;
+ #endif
+
+ #if UNITY_UI_ALPHACLIP
+ clip(faceColor.a - 0.001);
+ #endif
+
+ return faceColor * input.color.a;
+ }
+
+ ENDCG
+ }
+}
+
+Fallback "TextMeshPro/Mobile/Distance Field"
+CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI"
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta
new file mode 100644
index 0000000..08cd8ae
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF SSD.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 14eb328de4b8eb245bb7cea29e4ac00b
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader
new file mode 100644
index 0000000..7019aaf
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader
@@ -0,0 +1,247 @@
+// Simplified SDF shader:
+// - No Shading Option (bevel / bump / env map)
+// - No Glow Option
+// - Softness is applied on both side of the outline
+
+Shader "TextMeshPro/Mobile/Distance Field - Masking" {
+
+Properties {
+ [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1)
+ _FaceDilate ("Face Dilate", Range(-1,1)) = 0
+
+ [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1)
+ _OutlineWidth ("Outline Thickness", Range(0,1)) = 0
+ _OutlineSoftness ("Outline Softness", Range(0,1)) = 0
+
+ [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5)
+ _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
+ _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
+ _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
+ _UnderlaySoftness ("Border Softness", Range(0,1)) = 0
+
+ _WeightNormal ("Weight Normal", float) = 0
+ _WeightBold ("Weight Bold", float) = .5
+
+ _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
+ _ScaleX ("Scale X", float) = 1
+ _ScaleY ("Scale Y", float) = 1
+ _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875
+ _Sharpness ("Sharpness", Range(-1,1)) = 0
+
+ _VertexOffsetX ("Vertex OffsetX", float) = 0
+ _VertexOffsetY ("Vertex OffsetY", float) = 0
+
+ _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+ _MaskSoftnessX ("Mask SoftnessX", float) = 0
+ _MaskSoftnessY ("Mask SoftnessY", float) = 0
+ _MaskTex ("Mask Texture", 2D) = "white" {}
+ _MaskInverse ("Inverse", float) = 0
+ _MaskEdgeColor ("Edge Color", Color) = (1,1,1,1)
+ _MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01
+ _MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _CullMode ("Cull Mode", Float) = 0
+ _ColorMask ("Color Mask", Float) = 15
+}
+
+SubShader {
+ Tags
+ {
+ "Queue"="Transparent"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ }
+
+
+ Stencil
+ {
+ Ref [_Stencil]
+ Comp [_StencilComp]
+ Pass [_StencilOp]
+ ReadMask [_StencilReadMask]
+ WriteMask [_StencilWriteMask]
+ }
+
+ Cull [_CullMode]
+ ZWrite Off
+ Lighting Off
+ Fog { Mode Off }
+ ZTest [unity_GUIZTestMode]
+ Blend One OneMinusSrcAlpha
+ ColorMask [_ColorMask]
+
+ Pass {
+ CGPROGRAM
+ #pragma vertex VertShader
+ #pragma fragment PixShader
+ #pragma shader_feature __ OUTLINE_ON
+ #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER
+
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
+
+
+ #include "UnityCG.cginc"
+ #include "UnityUI.cginc"
+ #include "TMPro_Properties.cginc"
+
+ struct vertex_t {
+ float4 vertex : POSITION;
+ float3 normal : NORMAL;
+ fixed4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+ };
+
+ struct pixel_t {
+ float4 vertex : SV_POSITION;
+ fixed4 faceColor : COLOR;
+ fixed4 outlineColor : COLOR1;
+ float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV
+ half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w)
+ half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw)
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved
+ half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y)
+ #endif
+ };
+
+ float _MaskWipeControl;
+ float _MaskEdgeSoftness;
+ fixed4 _MaskEdgeColor;
+ bool _MaskInverse;
+
+ pixel_t VertShader(vertex_t input)
+ {
+ float bold = step(input.texcoord1.y, 0);
+
+ float4 vert = input.vertex;
+ vert.x += _VertexOffsetX;
+ vert.y += _VertexOffsetY;
+ float4 vPosition = UnityObjectToClipPos(vert);
+
+ float2 pixelSize = vPosition.w;
+ pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy));
+
+ float scale = rsqrt(dot(pixelSize, pixelSize));
+ scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1);
+ if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert)))));
+
+ float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0;
+ weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5;
+
+ float layerScale = scale;
+
+ scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale);
+ float bias = (0.5 - weight) * scale - 0.5;
+ float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale;
+
+ float opacity = input.color.a;
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ opacity = 1.0;
+ #endif
+
+ fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor;
+ faceColor.rgb *= faceColor.a;
+
+ fixed4 outlineColor = _OutlineColor;
+ outlineColor.a *= opacity;
+ outlineColor.rgb *= outlineColor.a;
+ outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2))));
+
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+
+ layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale);
+ float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale);
+
+ float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth;
+ float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight;
+ float2 layerOffset = float2(x, y);
+ #endif
+
+ // Generate UV for the Masking Texture
+ float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
+ float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy);
+
+ // Structure for pixel shader
+ pixel_t output = {
+ vPosition,
+ faceColor,
+ outlineColor,
+ float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y),
+ half4(scale, bias - outline, bias + outline, bias),
+ half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy)),
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ float4(input.texcoord0 + layerOffset, input.color.a, 0),
+ half2(layerScale, layerBias),
+ #endif
+ };
+
+ return output;
+ }
+
+
+ // PIXEL SHADER
+ fixed4 PixShader(pixel_t input) : SV_Target
+ {
+ half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x;
+ half4 c = input.faceColor * saturate(d - input.param.w);
+
+ #ifdef OUTLINE_ON
+ c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z));
+ c *= saturate(d - input.param.y);
+ #endif
+
+ #if UNDERLAY_ON
+ d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x;
+ c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a);
+ #endif
+
+ #if UNDERLAY_INNER
+ half sd = saturate(d - input.param.z);
+ d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x;
+ c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a);
+ #endif
+
+ // Alternative implementation to UnityGet2DClipping with support for softness.
+ //#if UNITY_UI_CLIP_RECT
+ half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw);
+ c *= m.x * m.y;
+ //#endif
+
+ float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a);
+ float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl;
+ a = saturate(t / _MaskEdgeSoftness);
+ c.rgb = lerp(_MaskEdgeColor.rgb*c.a, c.rgb, a);
+ c *= a;
+
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ c *= input.texcoord1.z;
+ #endif
+
+ #if UNITY_UI_ALPHACLIP
+ clip(c.a - 0.001);
+ #endif
+
+ return c;
+ }
+ ENDCG
+ }
+}
+
+CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI"
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta
new file mode 100644
index 0000000..3cbdbbb
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Masking.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: bc1ede39bf3643ee8e493720e4259791
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader
new file mode 100644
index 0000000..ce82bed
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader
@@ -0,0 +1,240 @@
+// Simplified SDF shader:
+// - No Shading Option (bevel / bump / env map)
+// - No Glow Option
+// - Softness is applied on both side of the outline
+
+Shader "TextMeshPro/Mobile/Distance Field Overlay" {
+
+Properties {
+ [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1)
+ _FaceDilate ("Face Dilate", Range(-1,1)) = 0
+
+ [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1)
+ _OutlineWidth ("Outline Thickness", Range(0,1)) = 0
+ _OutlineSoftness ("Outline Softness", Range(0,1)) = 0
+
+ [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5)
+ _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
+ _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
+ _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
+ _UnderlaySoftness ("Border Softness", Range(0,1)) = 0
+
+ _WeightNormal ("Weight Normal", float) = 0
+ _WeightBold ("Weight Bold", float) = .5
+
+ _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
+ _ScaleX ("Scale X", float) = 1
+ _ScaleY ("Scale Y", float) = 1
+ _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875
+ _Sharpness ("Sharpness", Range(-1,1)) = 0
+
+ _VertexOffsetX ("Vertex OffsetX", float) = 0
+ _VertexOffsetY ("Vertex OffsetY", float) = 0
+
+ _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+ _MaskSoftnessX ("Mask SoftnessX", float) = 0
+ _MaskSoftnessY ("Mask SoftnessY", float) = 0
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _CullMode ("Cull Mode", Float) = 0
+ _ColorMask ("Color Mask", Float) = 15
+}
+
+SubShader {
+ Tags
+ {
+ "Queue"="Overlay"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ }
+
+
+ Stencil
+ {
+ Ref [_Stencil]
+ Comp [_StencilComp]
+ Pass [_StencilOp]
+ ReadMask [_StencilReadMask]
+ WriteMask [_StencilWriteMask]
+ }
+
+ Cull [_CullMode]
+ ZWrite Off
+ Lighting Off
+ Fog { Mode Off }
+ ZTest Always
+ Blend One OneMinusSrcAlpha
+ ColorMask [_ColorMask]
+
+ Pass {
+ CGPROGRAM
+ #pragma vertex VertShader
+ #pragma fragment PixShader
+ #pragma shader_feature __ OUTLINE_ON
+ #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER
+
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
+
+ #include "UnityCG.cginc"
+ #include "UnityUI.cginc"
+ #include "TMPro_Properties.cginc"
+
+ struct vertex_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ float4 vertex : POSITION;
+ float3 normal : NORMAL;
+ fixed4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+ };
+
+ struct pixel_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ UNITY_VERTEX_OUTPUT_STEREO
+ float4 vertex : SV_POSITION;
+ fixed4 faceColor : COLOR;
+ fixed4 outlineColor : COLOR1;
+ float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV
+ half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w)
+ half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw)
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved
+ half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y)
+ #endif
+ };
+
+
+ pixel_t VertShader(vertex_t input)
+ {
+ pixel_t output;
+
+ UNITY_INITIALIZE_OUTPUT(pixel_t, output);
+ UNITY_SETUP_INSTANCE_ID(input);
+ UNITY_TRANSFER_INSTANCE_ID(input, output);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
+
+ float bold = step(input.texcoord1.y, 0);
+
+ float4 vert = input.vertex;
+ vert.x += _VertexOffsetX;
+ vert.y += _VertexOffsetY;
+ float4 vPosition = UnityObjectToClipPos(vert);
+
+ float2 pixelSize = vPosition.w;
+ pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy));
+
+ float scale = rsqrt(dot(pixelSize, pixelSize));
+ scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1);
+ if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert)))));
+
+ float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0;
+ weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5;
+
+ float layerScale = scale;
+
+ scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale);
+ float bias = (0.5 - weight) * scale - 0.5;
+ float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale;
+
+ float opacity = input.color.a;
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ opacity = 1.0;
+ #endif
+
+ fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor;
+ faceColor.rgb *= faceColor.a;
+
+ fixed4 outlineColor = _OutlineColor;
+ outlineColor.a *= opacity;
+ outlineColor.rgb *= outlineColor.a;
+ outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2))));
+
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale);
+ float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale);
+
+ float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth;
+ float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight;
+ float2 layerOffset = float2(x, y);
+ #endif
+
+ // Generate UV for the Masking Texture
+ float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
+ float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy);
+
+ // Populate structure for pixel shader
+ output.vertex = vPosition;
+ output.faceColor = faceColor;
+ output.outlineColor = outlineColor;
+ output.texcoord0 = float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y);
+ output.param = half4(scale, bias - outline, bias + outline, bias);
+ output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy));
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ output.texcoord1 = float4(input.texcoord0 + layerOffset, input.color.a, 0);
+ output.underlayParam = half2(layerScale, layerBias);
+ #endif
+
+ return output;
+ }
+
+
+ // PIXEL SHADER
+ fixed4 PixShader(pixel_t input) : SV_Target
+ {
+ UNITY_SETUP_INSTANCE_ID(input);
+
+ half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x;
+ half4 c = input.faceColor * saturate(d - input.param.w);
+
+ #ifdef OUTLINE_ON
+ c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z));
+ c *= saturate(d - input.param.y);
+ #endif
+
+ #if UNDERLAY_ON
+ d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x;
+ c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a);
+ #endif
+
+ #if UNDERLAY_INNER
+ half sd = saturate(d - input.param.z);
+ d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x;
+ c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a);
+ #endif
+
+ // Alternative implementation to UnityGet2DClipping with support for softness.
+ #if UNITY_UI_CLIP_RECT
+ half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw);
+ c *= m.x * m.y;
+ #endif
+
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ c *= input.texcoord1.z;
+ #endif
+
+ #if UNITY_UI_ALPHACLIP
+ clip(c.a - 0.001);
+ #endif
+
+ return c;
+ }
+ ENDCG
+ }
+}
+
+CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI"
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta
new file mode 100644
index 0000000..e6b149e
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile Overlay.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: a02a7d8c237544f1962732b55a9aebf1
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader
new file mode 100644
index 0000000..df4d5b0
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader
@@ -0,0 +1,106 @@
+// Simplified SDF shader:
+// - No Shading Option (bevel / bump / env map)
+// - No Glow Option
+// - Softness is applied on both side of the outline
+
+Shader "TextMeshPro/Mobile/Distance Field SSD" {
+
+Properties {
+ [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1)
+ _FaceDilate ("Face Dilate", Range(-1,1)) = 0
+
+ [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1)
+ _OutlineWidth ("Outline Thickness", Range(0,1)) = 0
+ _OutlineSoftness ("Outline Softness", Range(0,1)) = 0
+
+ [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5)
+ _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
+ _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
+ _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
+ _UnderlaySoftness ("Border Softness", Range(0,1)) = 0
+
+ _WeightNormal ("Weight Normal", float) = 0
+ _WeightBold ("Weight Bold", float) = .5
+
+ _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
+ _ScaleX ("Scale X", float) = 1
+ _ScaleY ("Scale Y", float) = 1
+ _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875
+ _Sharpness ("Sharpness", Range(-1,1)) = 0
+
+ _VertexOffsetX ("Vertex OffsetX", float) = 0
+ _VertexOffsetY ("Vertex OffsetY", float) = 0
+
+ _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+ _MaskSoftnessX ("Mask SoftnessX", float) = 0
+ _MaskSoftnessY ("Mask SoftnessY", float) = 0
+ _MaskTex ("Mask Texture", 2D) = "white" {}
+ _MaskInverse ("Inverse", float) = 0
+ _MaskEdgeColor ("Edge Color", Color) = (1,1,1,1)
+ _MaskEdgeSoftness ("Edge Softness", Range(0, 1)) = 0.01
+ _MaskWipeControl ("Wipe Position", Range(0, 1)) = 0.5
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _CullMode ("Cull Mode", Float) = 0
+ _ColorMask ("Color Mask", Float) = 15
+}
+
+SubShader {
+ Tags {
+ "Queue"="Transparent"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ }
+
+ Stencil
+ {
+ Ref [_Stencil]
+ Comp [_StencilComp]
+ Pass [_StencilOp]
+ ReadMask [_StencilReadMask]
+ WriteMask [_StencilWriteMask]
+ }
+
+ Cull [_CullMode]
+ ZWrite Off
+ Lighting Off
+ Fog { Mode Off }
+ ZTest [unity_GUIZTestMode]
+ Blend One OneMinusSrcAlpha
+ ColorMask [_ColorMask]
+
+ Pass {
+ CGPROGRAM
+ #pragma vertex VertShader
+ #pragma fragment PixShader
+ #pragma shader_feature __ OUTLINE_ON
+ #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER
+
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
+
+ #include "UnityCG.cginc"
+ #include "UnityUI.cginc"
+ #include "TMPro_Properties.cginc"
+
+ #include "TMPro_Mobile.cginc"
+
+ ENDCG
+ }
+}
+
+CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI"
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta
new file mode 100644
index 0000000..9b84c13
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile SSD.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: c8d12adcee749c344b8117cf7c7eb912
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader
new file mode 100644
index 0000000..d3f5866
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader
@@ -0,0 +1,240 @@
+// Simplified SDF shader:
+// - No Shading Option (bevel / bump / env map)
+// - No Glow Option
+// - Softness is applied on both side of the outline
+
+Shader "TextMeshPro/Mobile/Distance Field" {
+
+Properties {
+ [HDR]_FaceColor ("Face Color", Color) = (1,1,1,1)
+ _FaceDilate ("Face Dilate", Range(-1,1)) = 0
+
+ [HDR]_OutlineColor ("Outline Color", Color) = (0,0,0,1)
+ _OutlineWidth ("Outline Thickness", Range(0,1)) = 0
+ _OutlineSoftness ("Outline Softness", Range(0,1)) = 0
+
+ [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0,.5)
+ _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
+ _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
+ _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
+ _UnderlaySoftness ("Border Softness", Range(0,1)) = 0
+
+ _WeightNormal ("Weight Normal", float) = 0
+ _WeightBold ("Weight Bold", float) = .5
+
+ _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
+ _ScaleX ("Scale X", float) = 1
+ _ScaleY ("Scale Y", float) = 1
+ _PerspectiveFilter ("Perspective Correction", Range(0, 1)) = 0.875
+ _Sharpness ("Sharpness", Range(-1,1)) = 0
+
+ _VertexOffsetX ("Vertex OffsetX", float) = 0
+ _VertexOffsetY ("Vertex OffsetY", float) = 0
+
+ _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+ _MaskSoftnessX ("Mask SoftnessX", float) = 0
+ _MaskSoftnessY ("Mask SoftnessY", float) = 0
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _CullMode ("Cull Mode", Float) = 0
+ _ColorMask ("Color Mask", Float) = 15
+}
+
+SubShader {
+ Tags
+ {
+ "Queue"="Transparent"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ }
+
+
+ Stencil
+ {
+ Ref [_Stencil]
+ Comp [_StencilComp]
+ Pass [_StencilOp]
+ ReadMask [_StencilReadMask]
+ WriteMask [_StencilWriteMask]
+ }
+
+ Cull [_CullMode]
+ ZWrite Off
+ Lighting Off
+ Fog { Mode Off }
+ ZTest [unity_GUIZTestMode]
+ Blend One OneMinusSrcAlpha
+ ColorMask [_ColorMask]
+
+ Pass {
+ CGPROGRAM
+ #pragma vertex VertShader
+ #pragma fragment PixShader
+ #pragma shader_feature __ OUTLINE_ON
+ #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER
+
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
+
+ #include "UnityCG.cginc"
+ #include "UnityUI.cginc"
+ #include "TMPro_Properties.cginc"
+
+ struct vertex_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ float4 vertex : POSITION;
+ float3 normal : NORMAL;
+ fixed4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+ };
+
+ struct pixel_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ UNITY_VERTEX_OUTPUT_STEREO
+ float4 vertex : SV_POSITION;
+ fixed4 faceColor : COLOR;
+ fixed4 outlineColor : COLOR1;
+ float4 texcoord0 : TEXCOORD0; // Texture UV, Mask UV
+ half4 param : TEXCOORD1; // Scale(x), BiasIn(y), BiasOut(z), Bias(w)
+ half4 mask : TEXCOORD2; // Position in clip space(xy), Softness(zw)
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ float4 texcoord1 : TEXCOORD3; // Texture UV, alpha, reserved
+ half2 underlayParam : TEXCOORD4; // Scale(x), Bias(y)
+ #endif
+ };
+
+
+ pixel_t VertShader(vertex_t input)
+ {
+ pixel_t output;
+
+ UNITY_INITIALIZE_OUTPUT(pixel_t, output);
+ UNITY_SETUP_INSTANCE_ID(input);
+ UNITY_TRANSFER_INSTANCE_ID(input, output);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
+
+ float bold = step(input.texcoord1.y, 0);
+
+ float4 vert = input.vertex;
+ vert.x += _VertexOffsetX;
+ vert.y += _VertexOffsetY;
+ float4 vPosition = UnityObjectToClipPos(vert);
+
+ float2 pixelSize = vPosition.w;
+ pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy));
+
+ float scale = rsqrt(dot(pixelSize, pixelSize));
+ scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1);
+ if(UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert)))));
+
+ float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0;
+ weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5;
+
+ float layerScale = scale;
+
+ scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale);
+ float bias = (0.5 - weight) * scale - 0.5;
+ float outline = _OutlineWidth * _ScaleRatioA * 0.5 * scale;
+
+ float opacity = input.color.a;
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ opacity = 1.0;
+ #endif
+
+ fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor;
+ faceColor.rgb *= faceColor.a;
+
+ fixed4 outlineColor = _OutlineColor;
+ outlineColor.a *= opacity;
+ outlineColor.rgb *= outlineColor.a;
+ outlineColor = lerp(faceColor, outlineColor, sqrt(min(1.0, (outline * 2))));
+
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale);
+ float layerBias = (.5 - weight) * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale);
+
+ float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth;
+ float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight;
+ float2 layerOffset = float2(x, y);
+ #endif
+
+ // Generate UV for the Masking Texture
+ float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
+ float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy);
+
+ // Populate structure for pixel shader
+ output.vertex = vPosition;
+ output.faceColor = faceColor;
+ output.outlineColor = outlineColor;
+ output.texcoord0 = float4(input.texcoord0.x, input.texcoord0.y, maskUV.x, maskUV.y);
+ output.param = half4(scale, bias - outline, bias + outline, bias);
+ output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy));
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ output.texcoord1 = float4(input.texcoord0 + layerOffset, input.color.a, 0);
+ output.underlayParam = half2(layerScale, layerBias);
+ #endif
+
+ return output;
+ }
+
+
+ // PIXEL SHADER
+ fixed4 PixShader(pixel_t input) : SV_Target
+ {
+ UNITY_SETUP_INSTANCE_ID(input);
+
+ half d = tex2D(_MainTex, input.texcoord0.xy).a * input.param.x;
+ half4 c = input.faceColor * saturate(d - input.param.w);
+
+ #ifdef OUTLINE_ON
+ c = lerp(input.outlineColor, input.faceColor, saturate(d - input.param.z));
+ c *= saturate(d - input.param.y);
+ #endif
+
+ #if UNDERLAY_ON
+ d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x;
+ c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - input.underlayParam.y) * (1 - c.a);
+ #endif
+
+ #if UNDERLAY_INNER
+ half sd = saturate(d - input.param.z);
+ d = tex2D(_MainTex, input.texcoord1.xy).a * input.underlayParam.x;
+ c += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - input.underlayParam.y)) * sd * (1 - c.a);
+ #endif
+
+ // Alternative implementation to UnityGet2DClipping with support for softness.
+ #if UNITY_UI_CLIP_RECT
+ half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw);
+ c *= m.x * m.y;
+ #endif
+
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ c *= input.texcoord1.z;
+ #endif
+
+ #if UNITY_UI_ALPHACLIP
+ clip(c.a - 0.001);
+ #endif
+
+ return c;
+ }
+ ENDCG
+ }
+}
+
+CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI"
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta
new file mode 100644
index 0000000..2ac6e76
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: fe393ace9b354375a9cb14cdbbc28be4
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader b/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader
new file mode 100644
index 0000000..be764ae
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader
@@ -0,0 +1,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"
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta
new file mode 100644
index 0000000..bff8b7a
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface-Mobile.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 85187c2149c549c5b33f0cdb02836b17
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader b/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader
new file mode 100644
index 0000000..bcb2bb2
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader
@@ -0,0 +1,158 @@
+Shader "TextMeshPro/Distance Field (Surface)" {
+
+Properties {
+ _FaceTex ("Fill Texture", 2D) = "white" {}
+ _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0
+ _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0
+ [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" {}
+ _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0
+ _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0
+ _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0
+ _OutlineSoftness ("Outline Softness", Range(0,1)) = 0
+
+ _Bevel ("Bevel", Range(0,1)) = 0.5
+ _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0
+ _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0
+ _BevelClamp ("Bevel Clamp", Range(0,1)) = 0
+ _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0
+
+ _BumpMap ("Normalmap", 2D) = "bump" {}
+ _BumpOutline ("Bump Outline", Range(0,1)) = 0.5
+ _BumpFace ("Bump Face", Range(0,1)) = 0.5
+
+ _ReflectFaceColor ("Face Color", Color) = (0,0,0,1)
+ _ReflectOutlineColor ("Outline Color", Color) = (0,0,0,1)
+ _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ }
+ _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0)
+ [HDR]_SpecColor ("Specular Color", Color) = (0,0,0,1)
+
+ _FaceShininess ("Face Shininess", Range(0,1)) = 0
+ _OutlineShininess ("Outline Shininess", 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 BlinnPhong alpha:blend vertex:VertShader nolightmap nodirlightmap
+ #pragma target 3.0
+ #pragma shader_feature __ GLOW_ON
+ #pragma glsl
+
+ #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;
+ };
+
+
+ #define BEVEL_ON 1
+ #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 = (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"
+}
+
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta
new file mode 100644
index 0000000..26e814c
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF-Surface.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: f7ada0af4f174f0694ca6a487b8f543d
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF.shader b/Assets/TextMesh Pro/Shaders/TMP_SDF.shader
new file mode 100644
index 0000000..011ee19
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF.shader
@@ -0,0 +1,317 @@
+Shader "TextMeshPro/Distance Field" {
+
+Properties {
+ _FaceTex ("Face Texture", 2D) = "white" {}
+ _FaceUVSpeedX ("Face UV Speed X", Range(-5, 5)) = 0.0
+ _FaceUVSpeedY ("Face UV Speed Y", Range(-5, 5)) = 0.0
+ [HDR]_FaceColor ("Face 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" {}
+ _OutlineUVSpeedX ("Outline UV Speed X", Range(-5, 5)) = 0.0
+ _OutlineUVSpeedY ("Outline UV Speed Y", Range(-5, 5)) = 0.0
+ _OutlineWidth ("Outline Thickness", Range(0, 1)) = 0
+ _OutlineSoftness ("Outline Softness", Range(0,1)) = 0
+
+ _Bevel ("Bevel", Range(0,1)) = 0.5
+ _BevelOffset ("Bevel Offset", Range(-0.5,0.5)) = 0
+ _BevelWidth ("Bevel Width", Range(-.5,0.5)) = 0
+ _BevelClamp ("Bevel Clamp", Range(0,1)) = 0
+ _BevelRoundness ("Bevel Roundness", Range(0,1)) = 0
+
+ _LightAngle ("Light Angle", Range(0.0, 6.2831853)) = 3.1416
+ [HDR]_SpecularColor ("Specular", Color) = (1,1,1,1)
+ _SpecularPower ("Specular", Range(0,4)) = 2.0
+ _Reflectivity ("Reflectivity", Range(5.0,15.0)) = 10
+ _Diffuse ("Diffuse", Range(0,1)) = 0.5
+ _Ambient ("Ambient", Range(1,0)) = 0.5
+
+ _BumpMap ("Normal map", 2D) = "bump" {}
+ _BumpOutline ("Bump Outline", Range(0,1)) = 0
+ _BumpFace ("Bump Face", Range(0,1)) = 0
+
+ _ReflectFaceColor ("Reflection Color", Color) = (0,0,0,1)
+ _ReflectOutlineColor("Reflection Color", Color) = (0,0,0,1)
+ _Cube ("Reflection Cubemap", Cube) = "black" { /* TexGen CubeReflect */ }
+ _EnvMatrixRotation ("Texture Rotation", vector) = (0, 0, 0, 0)
+
+
+ [HDR]_UnderlayColor ("Border Color", Color) = (0,0,0, 0.5)
+ _UnderlayOffsetX ("Border OffsetX", Range(-1,1)) = 0
+ _UnderlayOffsetY ("Border OffsetY", Range(-1,1)) = 0
+ _UnderlayDilate ("Border Dilate", Range(-1,1)) = 0
+ _UnderlaySoftness ("Border 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
+
+ _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
+
+ _MaskCoord ("Mask Coordinates", vector) = (0, 0, 32767, 32767)
+ _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+ _MaskSoftnessX ("Mask SoftnessX", float) = 0
+ _MaskSoftnessY ("Mask SoftnessY", float) = 0
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _CullMode ("Cull Mode", Float) = 0
+ _ColorMask ("Color Mask", Float) = 15
+}
+
+SubShader {
+
+ Tags
+ {
+ "Queue"="Transparent"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ }
+
+ Stencil
+ {
+ Ref [_Stencil]
+ Comp [_StencilComp]
+ Pass [_StencilOp]
+ ReadMask [_StencilReadMask]
+ WriteMask [_StencilWriteMask]
+ }
+
+ Cull [_CullMode]
+ ZWrite Off
+ Lighting Off
+ Fog { Mode Off }
+ ZTest [unity_GUIZTestMode]
+ Blend One OneMinusSrcAlpha
+ ColorMask [_ColorMask]
+
+ Pass {
+ CGPROGRAM
+ #pragma target 3.0
+ #pragma vertex VertShader
+ #pragma fragment PixShader
+ #pragma shader_feature __ BEVEL_ON
+ #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER
+ #pragma shader_feature __ GLOW_ON
+
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
+
+ #include "UnityCG.cginc"
+ #include "UnityUI.cginc"
+ #include "TMPro_Properties.cginc"
+ #include "TMPro.cginc"
+
+ struct vertex_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ float4 position : POSITION;
+ float3 normal : NORMAL;
+ fixed4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+ };
+
+
+ struct pixel_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ UNITY_VERTEX_OUTPUT_STEREO
+ float4 position : SV_POSITION;
+ fixed4 color : COLOR;
+ float2 atlas : TEXCOORD0; // Atlas
+ float4 param : TEXCOORD1; // alphaClip, scale, bias, weight
+ float4 mask : TEXCOORD2; // Position in object space(xy), pixel Size(zw)
+ float3 viewDir : TEXCOORD3;
+
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ float4 texcoord2 : TEXCOORD4; // u,v, scale, bias
+ fixed4 underlayColor : COLOR1;
+ #endif
+ float4 textures : TEXCOORD5;
+ };
+
+ // Used by Unity internally to handle Texture Tiling and Offset.
+ float4 _FaceTex_ST;
+ float4 _OutlineTex_ST;
+
+ pixel_t VertShader(vertex_t input)
+ {
+ pixel_t output;
+
+ UNITY_INITIALIZE_OUTPUT(pixel_t, output);
+ UNITY_SETUP_INSTANCE_ID(input);
+ UNITY_TRANSFER_INSTANCE_ID(input,output);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
+
+ float bold = step(input.texcoord1.y, 0);
+
+ float4 vert = input.position;
+ vert.x += _VertexOffsetX;
+ vert.y += _VertexOffsetY;
+
+ float4 vPosition = UnityObjectToClipPos(vert);
+
+ float2 pixelSize = vPosition.w;
+ pixelSize /= float2(_ScaleX, _ScaleY) * abs(mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy));
+ float scale = rsqrt(dot(pixelSize, pixelSize));
+ scale *= abs(input.texcoord1.y) * _GradientScale * (_Sharpness + 1);
+ if (UNITY_MATRIX_P[3][3] == 0) scale = lerp(abs(scale) * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(input.normal.xyz), normalize(WorldSpaceViewDir(vert)))));
+
+ float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0;
+ weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5;
+
+ float bias =(.5 - weight) + (.5 / scale);
+
+ float alphaClip = (1.0 - _OutlineWidth * _ScaleRatioA - _OutlineSoftness * _ScaleRatioA);
+
+ #if GLOW_ON
+ alphaClip = min(alphaClip, 1.0 - _GlowOffset * _ScaleRatioB - _GlowOuter * _ScaleRatioB);
+ #endif
+
+ alphaClip = alphaClip / 2.0 - ( .5 / scale) - weight;
+
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ float4 underlayColor = _UnderlayColor;
+ underlayColor.rgb *= underlayColor.a;
+
+ float bScale = scale;
+ bScale /= 1 + ((_UnderlaySoftness*_ScaleRatioC) * bScale);
+ float bBias = (0.5 - weight) * bScale - 0.5 - ((_UnderlayDilate * _ScaleRatioC) * 0.5 * bScale);
+
+ float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth;
+ float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight;
+ float2 bOffset = float2(x, y);
+ #endif
+
+ // Generate UV for the Masking Texture
+ float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
+ float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy);
+
+ // Support for texture tiling and offset
+ float2 textureUV = UnpackUV(input.texcoord1.x);
+ float2 faceUV = TRANSFORM_TEX(textureUV, _FaceTex);
+ float2 outlineUV = TRANSFORM_TEX(textureUV, _OutlineTex);
+
+
+ output.position = vPosition;
+ output.color = input.color;
+ output.atlas = input.texcoord0;
+ output.param = float4(alphaClip, scale, bias, weight);
+ output.mask = half4(vert.xy * 2 - clampedRect.xy - clampedRect.zw, 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + pixelSize.xy));
+ output.viewDir = mul((float3x3)_EnvMatrix, _WorldSpaceCameraPos.xyz - mul(unity_ObjectToWorld, vert).xyz);
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ output.texcoord2 = float4(input.texcoord0 + bOffset, bScale, bBias);
+ output.underlayColor = underlayColor;
+ #endif
+ output.textures = float4(faceUV, outlineUV);
+
+ return output;
+ }
+
+
+ fixed4 PixShader(pixel_t input) : SV_Target
+ {
+ UNITY_SETUP_INSTANCE_ID(input);
+
+ float c = tex2D(_MainTex, input.atlas).a;
+
+ #ifndef UNDERLAY_ON
+ clip(c - input.param.x);
+ #endif
+
+ float scale = input.param.y;
+ float bias = input.param.z;
+ float weight = input.param.w;
+ float sd = (bias - c) * scale;
+
+ float outline = (_OutlineWidth * _ScaleRatioA) * scale;
+ float softness = (_OutlineSoftness * _ScaleRatioA) * scale;
+
+ half4 faceColor = _FaceColor;
+ half4 outlineColor = _OutlineColor;
+
+ faceColor.rgb *= input.color.rgb;
+
+ faceColor *= tex2D(_FaceTex, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y);
+ outlineColor *= tex2D(_OutlineTex, input.textures.zw + float2(_OutlineUVSpeedX, _OutlineUVSpeedY) * _Time.y);
+
+ faceColor = GetColor(sd, faceColor, outlineColor, outline, softness);
+
+ #if BEVEL_ON
+ float3 dxy = float3(0.5 / _TextureWidth, 0.5 / _TextureHeight, 0);
+ float3 n = GetSurfaceNormal(input.atlas, weight, dxy);
+
+ float3 bump = UnpackNormal(tex2D(_BumpMap, input.textures.xy + float2(_FaceUVSpeedX, _FaceUVSpeedY) * _Time.y)).xyz;
+ bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5));
+ n = normalize(n- bump);
+
+ float3 light = normalize(float3(sin(_LightAngle), cos(_LightAngle), -1.0));
+
+ float3 col = GetSpecular(n, light);
+ faceColor.rgb += col*faceColor.a;
+ faceColor.rgb *= 1-(dot(n, light)*_Diffuse);
+ faceColor.rgb *= lerp(_Ambient, 1, n.z*n.z);
+
+ fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDir, -n));
+ faceColor.rgb += reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a;
+ #endif
+
+ #if UNDERLAY_ON
+ float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z;
+ faceColor += input.underlayColor * saturate(d - input.texcoord2.w) * (1 - faceColor.a);
+ #endif
+
+ #if UNDERLAY_INNER
+ float d = tex2D(_MainTex, input.texcoord2.xy).a * input.texcoord2.z;
+ faceColor += input.underlayColor * (1 - saturate(d - input.texcoord2.w)) * saturate(1 - sd) * (1 - faceColor.a);
+ #endif
+
+ #if GLOW_ON
+ float4 glowColor = GetGlowColor(sd, scale);
+ faceColor.rgb += glowColor.rgb * glowColor.a;
+ #endif
+
+ // Alternative implementation to UnityGet2DClipping with support for softness.
+ #if UNITY_UI_CLIP_RECT
+ half2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * input.mask.zw);
+ faceColor *= m.x * m.y;
+ #endif
+
+ #if UNITY_UI_ALPHACLIP
+ clip(faceColor.a - 0.001);
+ #endif
+
+ return faceColor * input.color.a;
+ }
+
+ ENDCG
+ }
+}
+
+Fallback "TextMeshPro/Mobile/Distance Field"
+CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI"
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_SDF.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_SDF.shader.meta
new file mode 100644
index 0000000..e1cf3f3
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_SDF.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 68e6db2ebdc24f95958faec2be5558d6
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader b/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader
new file mode 100644
index 0000000..e8283a7
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader
@@ -0,0 +1,116 @@
+Shader "TextMeshPro/Sprite"
+{
+ Properties
+ {
+ [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
+ _Color ("Tint", Color) = (1,1,1,1)
+
+ _StencilComp ("Stencil Comparison", Float) = 8
+ _Stencil ("Stencil ID", Float) = 0
+ _StencilOp ("Stencil Operation", Float) = 0
+ _StencilWriteMask ("Stencil Write Mask", Float) = 255
+ _StencilReadMask ("Stencil Read Mask", Float) = 255
+
+ _CullMode ("Cull Mode", Float) = 0
+ _ColorMask ("Color Mask", Float) = 15
+ _ClipRect ("Clip Rect", vector) = (-32767, -32767, 32767, 32767)
+
+ [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0
+ }
+
+ SubShader
+ {
+ Tags
+ {
+ "Queue"="Transparent"
+ "IgnoreProjector"="True"
+ "RenderType"="Transparent"
+ "PreviewType"="Plane"
+ "CanUseSpriteAtlas"="True"
+ }
+
+ Stencil
+ {
+ Ref [_Stencil]
+ Comp [_StencilComp]
+ Pass [_StencilOp]
+ ReadMask [_StencilReadMask]
+ WriteMask [_StencilWriteMask]
+ }
+
+ Cull [_CullMode]
+ Lighting Off
+ ZWrite Off
+ ZTest [unity_GUIZTestMode]
+ Blend SrcAlpha OneMinusSrcAlpha
+ ColorMask [_ColorMask]
+
+ Pass
+ {
+ Name "Default"
+ CGPROGRAM
+ #pragma vertex vert
+ #pragma fragment frag
+ #pragma target 2.0
+
+ #include "UnityCG.cginc"
+ #include "UnityUI.cginc"
+
+ #pragma multi_compile __ UNITY_UI_CLIP_RECT
+ #pragma multi_compile __ UNITY_UI_ALPHACLIP
+
+ struct appdata_t
+ {
+ float4 vertex : POSITION;
+ float4 color : COLOR;
+ float2 texcoord : TEXCOORD0;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ };
+
+ struct v2f
+ {
+ float4 vertex : SV_POSITION;
+ fixed4 color : COLOR;
+ float2 texcoord : TEXCOORD0;
+ float4 worldPosition : TEXCOORD1;
+ UNITY_VERTEX_OUTPUT_STEREO
+ };
+
+ sampler2D _MainTex;
+ fixed4 _Color;
+ fixed4 _TextureSampleAdd;
+ float4 _ClipRect;
+ float4 _MainTex_ST;
+
+ v2f vert(appdata_t v)
+ {
+ v2f OUT;
+ UNITY_SETUP_INSTANCE_ID(v);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
+ OUT.worldPosition = v.vertex;
+ OUT.vertex = UnityObjectToClipPos(OUT.worldPosition);
+
+ OUT.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
+
+ OUT.color = v.color * _Color;
+ return OUT;
+ }
+
+ fixed4 frag(v2f IN) : SV_Target
+ {
+ half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color;
+
+ #ifdef UNITY_UI_CLIP_RECT
+ color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);
+ #endif
+
+ #ifdef UNITY_UI_ALPHACLIP
+ clip (color.a - 0.001);
+ #endif
+
+ return color;
+ }
+ ENDCG
+ }
+ }
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader.meta b/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader.meta
new file mode 100644
index 0000000..50ba195
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMP_Sprite.shader.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: cf81c85f95fe47e1a27f6ae460cf182c
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMPro.cginc b/Assets/TextMesh Pro/Shaders/TMPro.cginc
new file mode 100644
index 0000000..5898130
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMPro.cginc
@@ -0,0 +1,84 @@
+float2 UnpackUV(float uv)
+{
+ float2 output;
+ output.x = floor(uv / 4096);
+ output.y = uv - 4096 * output.x;
+
+ return output * 0.001953125;
+}
+
+fixed4 GetColor(half d, fixed4 faceColor, fixed4 outlineColor, half outline, half softness)
+{
+ half faceAlpha = 1-saturate((d - outline * 0.5 + softness * 0.5) / (1.0 + softness));
+ half outlineAlpha = saturate((d + outline * 0.5)) * sqrt(min(1.0, outline));
+
+ faceColor.rgb *= faceColor.a;
+ outlineColor.rgb *= outlineColor.a;
+
+ faceColor = lerp(faceColor, outlineColor, outlineAlpha);
+
+ faceColor *= faceAlpha;
+
+ return faceColor;
+}
+
+float3 GetSurfaceNormal(float4 h, float bias)
+{
+ bool raisedBevel = step(1, fmod(_ShaderFlags, 2));
+
+ h += bias+_BevelOffset;
+
+ float bevelWidth = max(.01, _OutlineWidth+_BevelWidth);
+
+ // Track outline
+ h -= .5;
+ h /= bevelWidth;
+ h = saturate(h+.5);
+
+ if(raisedBevel) h = 1 - abs(h*2.0 - 1.0);
+ h = lerp(h, sin(h*3.141592/2.0), _BevelRoundness);
+ h = min(h, 1.0-_BevelClamp);
+ h *= _Bevel * bevelWidth * _GradientScale * -2.0;
+
+ float3 va = normalize(float3(1.0, 0.0, h.y - h.x));
+ float3 vb = normalize(float3(0.0, -1.0, h.w - h.z));
+
+ return cross(va, vb);
+}
+
+float3 GetSurfaceNormal(float2 uv, float bias, float3 delta)
+{
+ // Read "height field"
+ float4 h = {tex2D(_MainTex, uv - delta.xz).a,
+ tex2D(_MainTex, uv + delta.xz).a,
+ tex2D(_MainTex, uv - delta.zy).a,
+ tex2D(_MainTex, uv + delta.zy).a};
+
+ return GetSurfaceNormal(h, bias);
+}
+
+float3 GetSpecular(float3 n, float3 l)
+{
+ float spec = pow(max(0.0, dot(n, l)), _Reflectivity);
+ return _SpecularColor.rgb * spec * _SpecularPower;
+}
+
+float4 GetGlowColor(float d, float scale)
+{
+ float glow = d - (_GlowOffset*_ScaleRatioB) * 0.5 * scale;
+ float t = lerp(_GlowInner, (_GlowOuter * _ScaleRatioB), step(0.0, glow)) * 0.5 * scale;
+ glow = saturate(abs(glow/(1.0 + t)));
+ glow = 1.0-pow(glow, _GlowPower);
+ glow *= sqrt(min(1.0, t)); // Fade off glow thinner than 1 screen pixel
+ return float4(_GlowColor.rgb, saturate(_GlowColor.a * glow * 2));
+}
+
+float4 BlendARGB(float4 overlying, float4 underlying)
+{
+ overlying.rgb *= overlying.a;
+ underlying.rgb *= underlying.a;
+ float3 blended = overlying.rgb + ((1-overlying.a)*underlying.rgb);
+ float alpha = underlying.a + (1-underlying.a)*overlying.a;
+ return float4(blended, alpha);
+}
+
diff --git a/Assets/TextMesh Pro/Shaders/TMPro.cginc.meta b/Assets/TextMesh Pro/Shaders/TMPro.cginc.meta
new file mode 100644
index 0000000..0d6eb56
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMPro.cginc.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 407bc68d299748449bbf7f48ee690f8d
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc b/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc
new file mode 100644
index 0000000..5969fec
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc
@@ -0,0 +1,157 @@
+struct vertex_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ float4 position : POSITION;
+ float3 normal : NORMAL;
+ float4 color : COLOR;
+ float2 texcoord0 : TEXCOORD0;
+ float2 texcoord1 : TEXCOORD1;
+};
+
+struct pixel_t {
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+ UNITY_VERTEX_OUTPUT_STEREO
+ float4 position : SV_POSITION;
+ float4 faceColor : COLOR;
+ float4 outlineColor : COLOR1;
+ float4 texcoord0 : TEXCOORD0;
+ float4 param : TEXCOORD1; // weight, scaleRatio
+ float2 mask : TEXCOORD2;
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ float4 texcoord2 : TEXCOORD3;
+ float4 underlayColor : COLOR2;
+ #endif
+};
+
+float4 SRGBToLinear(float4 rgba) {
+ return float4(lerp(rgba.rgb / 12.92f, pow((rgba.rgb + 0.055f) / 1.055f, 2.4f), step(0.04045f, rgba.rgb)), rgba.a);
+}
+
+pixel_t VertShader(vertex_t input)
+{
+ pixel_t output;
+
+ UNITY_INITIALIZE_OUTPUT(pixel_t, output);
+ UNITY_SETUP_INSTANCE_ID(input);
+ UNITY_TRANSFER_INSTANCE_ID(input, output);
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
+
+ float bold = step(input.texcoord1.y, 0);
+
+ float4 vert = input.position;
+ vert.x += _VertexOffsetX;
+ vert.y += _VertexOffsetY;
+
+ float4 vPosition = UnityObjectToClipPos(vert);
+
+ float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0;
+ weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5;
+
+ // Generate UV for the Masking Texture
+ float4 clampedRect = clamp(_ClipRect, -2e10, 2e10);
+ float2 maskUV = (vert.xy - clampedRect.xy) / (clampedRect.zw - clampedRect.xy);
+
+ float4 color = input.color;
+ #if (FORCE_LINEAR && !UNITY_COLORSPACE_GAMMA)
+ color = SRGBToLinear(input.color);
+ #endif
+
+ float opacity = color.a;
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ opacity = 1.0;
+ #endif
+
+ float4 faceColor = float4(color.rgb, opacity) * _FaceColor;
+ faceColor.rgb *= faceColor.a;
+
+ float4 outlineColor = _OutlineColor;
+ outlineColor.a *= opacity;
+ outlineColor.rgb *= outlineColor.a;
+
+ output.position = vPosition;
+ output.faceColor = faceColor;
+ output.outlineColor = outlineColor;
+ output.texcoord0 = float4(input.texcoord0.xy, maskUV.xy);
+ output.param = float4(0.5 - weight, 1.3333 * _GradientScale * (_Sharpness + 1) / _TextureWidth, _OutlineWidth * _ScaleRatioA * 0.5, 0);
+
+ float2 mask = float2(0, 0);
+ #if UNITY_UI_CLIP_RECT
+ mask = vert.xy * 2 - clampedRect.xy - clampedRect.zw;
+ #endif
+ output.mask = mask;
+
+ #if (UNDERLAY_ON || UNDERLAY_INNER)
+ float4 underlayColor = _UnderlayColor;
+ underlayColor.rgb *= underlayColor.a;
+
+ float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _TextureWidth;
+ float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _TextureHeight;
+
+ output.texcoord2 = float4(input.texcoord0 + float2(x, y), input.color.a, 0);
+ output.underlayColor = underlayColor;
+ #endif
+
+ return output;
+}
+
+float4 PixShader(pixel_t input) : SV_Target
+{
+ UNITY_SETUP_INSTANCE_ID(input);
+
+ float d = tex2D(_MainTex, input.texcoord0.xy).a;
+
+ float2 UV = input.texcoord0.xy;
+ float scale = rsqrt(abs(ddx(UV.x) * ddy(UV.y) - ddy(UV.x) * ddx(UV.y))) * input.param.y;
+
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ float layerScale = scale;
+ layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale);
+ float layerBias = input.param.x * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale);
+ #endif
+
+ scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale);
+
+ float4 faceColor = input.faceColor * saturate((d - input.param.x) * scale + 0.5);
+
+ #ifdef OUTLINE_ON
+ float4 outlineColor = lerp(input.faceColor, input.outlineColor, sqrt(min(1.0, input.param.z * scale * 2)));
+ faceColor = lerp(outlineColor, input.faceColor, saturate((d - input.param.x - input.param.z) * scale + 0.5));
+ faceColor *= saturate((d - input.param.x + input.param.z) * scale + 0.5);
+ #endif
+
+ #if UNDERLAY_ON
+ d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale;
+ faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - layerBias) * (1 - faceColor.a);
+ #endif
+
+ #if UNDERLAY_INNER
+ float bias = input.param.x * scale - 0.5;
+ float sd = saturate(d * scale - bias - input.param.z);
+ d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale;
+ faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - layerBias)) * sd * (1 - faceColor.a);
+ #endif
+
+ #ifdef MASKING
+ float a = abs(_MaskInverse - tex2D(_MaskTex, input.texcoord0.zw).a);
+ float t = a + (1 - _MaskWipeControl) * _MaskEdgeSoftness - _MaskWipeControl;
+ a = saturate(t / _MaskEdgeSoftness);
+ faceColor.rgb = lerp(_MaskEdgeColor.rgb * faceColor.a, faceColor.rgb, a);
+ faceColor *= a;
+ #endif
+
+ // Alternative implementation to UnityGet2DClipping with support for softness
+ #if UNITY_UI_CLIP_RECT
+ float2 maskZW = 0.25 / (0.25 * half2(_MaskSoftnessX, _MaskSoftnessY) + (1 / scale));
+ float2 m = saturate((_ClipRect.zw - _ClipRect.xy - abs(input.mask.xy)) * maskZW);
+ faceColor *= m.x * m.y;
+ #endif
+
+ #if (UNDERLAY_ON | UNDERLAY_INNER)
+ faceColor *= input.texcoord2.z;
+ #endif
+
+ #if UNITY_UI_ALPHACLIP
+ clip(faceColor.a - 0.001);
+ #endif
+
+ return faceColor;
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta b/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta
new file mode 100644
index 0000000..4415e50
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMPro_Mobile.cginc.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: c334973cef89a9840b0b0c507e0377ab
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc b/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc
new file mode 100644
index 0000000..2e96258
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc
@@ -0,0 +1,85 @@
+// UI Editable properties
+uniform sampler2D _FaceTex; // Alpha : Signed Distance
+uniform float _FaceUVSpeedX;
+uniform float _FaceUVSpeedY;
+uniform fixed4 _FaceColor; // RGBA : Color + Opacity
+uniform float _FaceDilate; // v[ 0, 1]
+uniform float _OutlineSoftness; // v[ 0, 1]
+
+uniform sampler2D _OutlineTex; // RGBA : Color + Opacity
+uniform float _OutlineUVSpeedX;
+uniform float _OutlineUVSpeedY;
+uniform fixed4 _OutlineColor; // RGBA : Color + Opacity
+uniform float _OutlineWidth; // v[ 0, 1]
+
+uniform float _Bevel; // v[ 0, 1]
+uniform float _BevelOffset; // v[-1, 1]
+uniform float _BevelWidth; // v[-1, 1]
+uniform float _BevelClamp; // v[ 0, 1]
+uniform float _BevelRoundness; // v[ 0, 1]
+
+uniform sampler2D _BumpMap; // Normal map
+uniform float _BumpOutline; // v[ 0, 1]
+uniform float _BumpFace; // v[ 0, 1]
+
+uniform samplerCUBE _Cube; // Cube / sphere map
+uniform fixed4 _ReflectFaceColor; // RGB intensity
+uniform fixed4 _ReflectOutlineColor;
+//uniform float _EnvTiltX; // v[-1, 1]
+//uniform float _EnvTiltY; // v[-1, 1]
+uniform float3 _EnvMatrixRotation;
+uniform float4x4 _EnvMatrix;
+
+uniform fixed4 _SpecularColor; // RGB intensity
+uniform float _LightAngle; // v[ 0,Tau]
+uniform float _SpecularPower; // v[ 0, 1]
+uniform float _Reflectivity; // v[ 5, 15]
+uniform float _Diffuse; // v[ 0, 1]
+uniform float _Ambient; // v[ 0, 1]
+
+uniform fixed4 _UnderlayColor; // RGBA : Color + Opacity
+uniform float _UnderlayOffsetX; // v[-1, 1]
+uniform float _UnderlayOffsetY; // v[-1, 1]
+uniform float _UnderlayDilate; // v[-1, 1]
+uniform float _UnderlaySoftness; // v[ 0, 1]
+
+uniform fixed4 _GlowColor; // RGBA : Color + Intesity
+uniform float _GlowOffset; // v[-1, 1]
+uniform float _GlowOuter; // v[ 0, 1]
+uniform float _GlowInner; // v[ 0, 1]
+uniform float _GlowPower; // v[ 1, 1/(1+4*4)]
+
+// API Editable properties
+uniform float _ShaderFlags;
+uniform float _WeightNormal;
+uniform float _WeightBold;
+
+uniform float _ScaleRatioA;
+uniform float _ScaleRatioB;
+uniform float _ScaleRatioC;
+
+uniform float _VertexOffsetX;
+uniform float _VertexOffsetY;
+
+//uniform float _UseClipRect;
+uniform float _MaskID;
+uniform sampler2D _MaskTex;
+uniform float4 _MaskCoord;
+uniform float4 _ClipRect; // bottom left(x,y) : top right(z,w)
+//uniform float _MaskWipeControl;
+//uniform float _MaskEdgeSoftness;
+//uniform fixed4 _MaskEdgeColor;
+//uniform bool _MaskInverse;
+
+uniform float _MaskSoftnessX;
+uniform float _MaskSoftnessY;
+
+// Font Atlas properties
+uniform sampler2D _MainTex;
+uniform float _TextureWidth;
+uniform float _TextureHeight;
+uniform float _GradientScale;
+uniform float _ScaleX;
+uniform float _ScaleY;
+uniform float _PerspectiveFilter;
+uniform float _Sharpness;
diff --git a/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta b/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta
new file mode 100644
index 0000000..7b37f2f
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMPro_Properties.cginc.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 3997e2241185407d80309a82f9148466
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc b/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc
new file mode 100644
index 0000000..622ae87
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc
@@ -0,0 +1,101 @@
+void VertShader(inout appdata_full v, out Input data)
+{
+ v.vertex.x += _VertexOffsetX;
+ v.vertex.y += _VertexOffsetY;
+
+ UNITY_INITIALIZE_OUTPUT(Input, data);
+
+ float bold = step(v.texcoord1.y, 0);
+
+ // Generate normal for backface
+ float3 view = ObjSpaceViewDir(v.vertex);
+ v.normal *= sign(dot(v.normal, view));
+
+#if USE_DERIVATIVE
+ data.param.y = 1;
+#else
+ float4 vert = v.vertex;
+ float4 vPosition = UnityObjectToClipPos(vert);
+ float2 pixelSize = vPosition.w;
+
+ pixelSize /= float2(_ScaleX, _ScaleY) * mul((float2x2)UNITY_MATRIX_P, _ScreenParams.xy);
+ float scale = rsqrt(dot(pixelSize, pixelSize));
+ scale *= abs(v.texcoord1.y) * _GradientScale * (_Sharpness + 1);
+ scale = lerp(scale * (1 - _PerspectiveFilter), scale, abs(dot(UnityObjectToWorldNormal(v.normal.xyz), normalize(WorldSpaceViewDir(vert)))));
+ data.param.y = scale;
+#endif
+
+ data.param.x = (lerp(_WeightNormal, _WeightBold, bold) / 4.0 + _FaceDilate) * _ScaleRatioA * 0.5; //
+
+ v.texcoord1.xy = UnpackUV(v.texcoord1.x);
+ data.viewDirEnv = mul((float3x3)_EnvMatrix, WorldSpaceViewDir(v.vertex));
+}
+
+void PixShader(Input input, inout SurfaceOutput o)
+{
+
+#if USE_DERIVATIVE
+ float2 pixelSize = float2(ddx(input.uv_MainTex.y), ddy(input.uv_MainTex.y));
+ pixelSize *= _TextureWidth * .75;
+ float scale = rsqrt(dot(pixelSize, pixelSize)) * _GradientScale * (_Sharpness + 1);
+#else
+ float scale = input.param.y;
+#endif
+
+ // Signed distance
+ float c = tex2D(_MainTex, input.uv_MainTex).a;
+ float sd = (.5 - c - input.param.x) * scale + .5;
+ float outline = _OutlineWidth*_ScaleRatioA * scale;
+ float softness = _OutlineSoftness*_ScaleRatioA * scale;
+
+ // Color & Alpha
+ float4 faceColor = _FaceColor;
+ float4 outlineColor = _OutlineColor;
+ faceColor *= input.color;
+ outlineColor.a *= input.color.a;
+ faceColor *= tex2D(_FaceTex, float2(input.uv2_FaceTex.x + _FaceUVSpeedX * _Time.y, input.uv2_FaceTex.y + _FaceUVSpeedY * _Time.y));
+ outlineColor *= tex2D(_OutlineTex, float2(input.uv2_OutlineTex.x + _OutlineUVSpeedX * _Time.y, input.uv2_OutlineTex.y + _OutlineUVSpeedY * _Time.y));
+ faceColor = GetColor(sd, faceColor, outlineColor, outline, softness);
+ faceColor.rgb /= max(faceColor.a, 0.0001);
+
+#if BEVEL_ON
+ float3 delta = float3(1.0 / _TextureWidth, 1.0 / _TextureHeight, 0.0);
+
+ float4 smp4x = {tex2D(_MainTex, input.uv_MainTex - delta.xz).a,
+ tex2D(_MainTex, input.uv_MainTex + delta.xz).a,
+ tex2D(_MainTex, input.uv_MainTex - delta.zy).a,
+ tex2D(_MainTex, input.uv_MainTex + delta.zy).a };
+
+ // Face Normal
+ float3 n = GetSurfaceNormal(smp4x, input.param.x);
+
+ // Bumpmap
+ float3 bump = UnpackNormal(tex2D(_BumpMap, input.uv2_FaceTex.xy)).xyz;
+ bump *= lerp(_BumpFace, _BumpOutline, saturate(sd + outline * 0.5));
+ bump = lerp(float3(0, 0, 1), bump, faceColor.a);
+ n = normalize(n - bump);
+
+ // Cubemap reflection
+ fixed4 reflcol = texCUBE(_Cube, reflect(input.viewDirEnv, mul((float3x3)unity_ObjectToWorld, n)));
+ float3 emission = reflcol.rgb * lerp(_ReflectFaceColor.rgb, _ReflectOutlineColor.rgb, saturate(sd + outline * 0.5)) * faceColor.a;
+#else
+ float3 n = float3(0, 0, -1);
+ float3 emission = float3(0, 0, 0);
+#endif
+
+#if GLOW_ON
+ float4 glowColor = GetGlowColor(sd, scale);
+ glowColor.a *= input.color.a;
+ emission += glowColor.rgb*glowColor.a;
+ faceColor = BlendARGB(glowColor, faceColor);
+ faceColor.rgb /= max(faceColor.a, 0.0001);
+#endif
+
+ // Set Standard output structure
+ o.Albedo = faceColor.rgb;
+ o.Normal = -n;
+ o.Emission = emission;
+ o.Specular = lerp(_FaceShininess, _OutlineShininess, saturate(sd + outline * 0.5));
+ o.Gloss = 1;
+ o.Alpha = faceColor.a;
+}
diff --git a/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta b/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta
new file mode 100644
index 0000000..41ef4b1
--- /dev/null
+++ b/Assets/TextMesh Pro/Shaders/TMPro_Surface.cginc.meta
@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: d930090c0cd643c7b55f19a38538c162
+ShaderImporter:
+ externalObjects: {}
+ defaultTextures: []
+ nonModifiableTextures: []
+ userData:
+ assetBundleName:
+ assetBundleVariant: