123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- // Simplified SDF shader:
- // - No Shading Option (bevel / bump / env map)
- // - No Glow Option
- // - Softness is applied on both side of the outline
- Shader "Hidden/TextMeshPro/Internal/Distance Field SSD" {
- Properties {
- _FaceColor ("Face Color", Color) = (1,1,1,1)
- _FaceDilate ("Face Dilate", Range(-1,1)) = 0
- _OutlineSoftness ("Outline Softness", Range(0,1)) = 0.02
- _WeightNormal ("Weight Normal", float) = 0
- _WeightBold ("Weight Bold", float) = .5
- _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
- _Sharpness ("Sharpness", Range(-1,1)) = 0
- _VertexOffsetX ("Vertex OffsetX", float) = 0
- _VertexOffsetY ("Vertex OffsetY", float) = 0
-
- _ColorMask ("Color Mask", Float) = 15
- }
- SubShader {
- Tags
- {
- "ForceSupported" = "True"
- }
- Lighting Off
- Blend One OneMinusSrcAlpha
- Cull Off
- ZWrite Off
- ZTest Always
- Pass {
- CGPROGRAM
- #pragma vertex VertShader
- #pragma fragment PixShader
- #include "UnityCG.cginc"
- #include "TMP_Properties.cginc"
- sampler2D _GUIClipTexture;
- uniform float4x4 unity_GUIClipTextureMatrix;
- 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;
- float2 texcoord0 : TEXCOORD0;
- float2 clipUV : TEXCOORD1;
- };
- pixel_t VertShader(vertex_t input)
- {
- // Does not handle simulated bold correctly.
-
- float4 vert = input.vertex;
- vert.x += _VertexOffsetX;
- vert.y += _VertexOffsetY;
- float4 vPosition = UnityObjectToClipPos(vert);
- float opacity = input.color.a;
- fixed4 faceColor = fixed4(input.color.rgb, opacity) * _FaceColor;
- faceColor.rgb *= faceColor.a;
- // Generate UV for the Clip Texture
- float3 eyePos = UnityObjectToViewPos(input.vertex);
- float2 clipUV = mul(unity_GUIClipTextureMatrix, float4(eyePos.xy, 0, 1.0));
- // Structure for pixel shader
- pixel_t output = {
- vPosition,
- faceColor,
- float2(input.texcoord0.x, input.texcoord0.y),
- clipUV,
- };
- return output;
- }
- half transition(half2 range, half distance)
- {
- return smoothstep(range.x, range.y, distance);
- }
- // PIXEL SHADER
- fixed4 PixShader(pixel_t input) : SV_Target
- {
- half distanceSample = tex2D(_MainTex, input.texcoord0).a;
- half smoothing = fwidth(distanceSample) * (1 - _Sharpness) + _OutlineSoftness;
- half contour = 0.5 - _FaceDilate * 0.5;
- half2 edgeRange = half2(contour - smoothing, contour + smoothing);
- half4 c = input.faceColor;
-
- half edgeTransition = transition(edgeRange, distanceSample);
- c *= edgeTransition;
- c *= tex2D(_GUIClipTexture, input.clipUV).a;
- return c;
- }
- ENDCG
- }
- }
- CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI"
- }
|