summaryrefslogtreecommitdiff
path: root/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/Resources/aline_common_text.cginc
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2024-05-23 10:08:29 +0800
committerchai <215380520@qq.com>2024-05-23 10:08:29 +0800
commit8722a9920c1f6119bf6e769cba270e63097f8e25 (patch)
tree2eaf9865de7fb1404546de4a4296553d8f68cc3b /Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/Resources/aline_common_text.cginc
parent3ba4020b69e5971bb0df7ee08b31d10ea4d01937 (diff)
+ astar project
Diffstat (limited to 'Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/Resources/aline_common_text.cginc')
-rw-r--r--Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/Resources/aline_common_text.cginc107
1 files changed, 107 insertions, 0 deletions
diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/Resources/aline_common_text.cginc b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/Resources/aline_common_text.cginc
new file mode 100644
index 0000000..026d4f1
--- /dev/null
+++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/Resources/aline_common_text.cginc
@@ -0,0 +1,107 @@
+#include "aline_common.cginc"
+
+float4 _Color;
+float4 _FadeColor;
+UNITY_DECLARE_TEX2D(_MainTex);
+UNITY_DECLARE_TEX2D(_FallbackTex);
+float _FallbackAmount;
+float _TransitionPoint;
+float _MipBias;
+float _GammaCorrection;
+
+struct vertex {
+ float4 pos : POSITION;
+ float4 color : COLOR;
+ float2 uv : TEXCOORD0;
+ UNITY_VERTEX_INPUT_INSTANCE_ID
+};
+
+struct v2f {
+ float4 col : COLOR;
+ float2 uv: TEXCOORD0;
+ UNITY_VERTEX_OUTPUT_STEREO
+};
+
+v2f vert_base (vertex v, float4 tint, out float4 outpos : SV_POSITION) {
+ UNITY_SETUP_INSTANCE_ID(v);
+ v2f o;
+ UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
+ o.uv = v.uv;
+ o.col = v.color * tint;
+ o.col.rgb = ConvertSRGBToDestinationColorSpace(o.col.rgb);
+ outpos = TransformObjectToHClip(v.pos.xyz);
+ return o;
+}
+
+// float getAlpha2(float2 uv) {
+// const float textureWidth = 1024;
+// float pixelSize = 0.5 * length(float2(ddx(uv.x), ddy(uv.x))) * textureWidth;
+
+// // Depends on texture generation settings
+// const float falloffPixels = 5;
+
+// float sample = UNITY_SAMPLE_TEX2D(_MainTex, uv).a;
+// // float scale = 1.0 / fwidth(sample);
+// float signedDistance1 = (0.5 - sample) * falloffPixels;
+// float signedDistance2 = signedDistance1 / pixelSize;
+
+// return lineAA(signedDistance2 + 0.5);
+// // float signedDistance = (sample - 0.5) * scale;
+// // return fwidth(sample) * 10;
+// // Use two different distance thresholds to get dynamically stroked text
+// // float color = clamp(signedDistance + 0.5, 0.0, 1.0);
+// // return color;
+// }
+
+float getAlpha(float2 uv) {
+ float rawSignedDistance = UNITY_SAMPLE_TEX2D(_MainTex, uv).a;
+ float scale = 1.0 / fwidth(rawSignedDistance);
+ float thresholdedDistance = (rawSignedDistance - 0.5) * scale;
+ float color = clamp(thresholdedDistance + 0.5, 0.0, 1.0);
+ return color;
+}
+
+// Shader modified from https://evanw.github.io/font-texture-generator/example-webgl/
+float4 frag (v2f i, float4 screenPos : VPOS) : SV_Target {
+ // float halfpixelSize = 0.5 * 0.5 * length(float2(ddx(i.uv.x), ddy(i.uv.x)));
+ // float fcolor0 = UNITY_SAMPLE_TEX2D(_FallbackTex, i.uv).a;
+ // float fcolor1 = UNITY_SAMPLE_TEX2D(_FallbackTex, i.uv + float2(halfpixelSize * 0.6, halfpixelSize * 0.3)).a;
+ // float fcolor2 = UNITY_SAMPLE_TEX2D(_FallbackTex, i.uv + float2(-halfpixelSize * 0.3, halfpixelSize * 0.6)).a;
+ // float fcolor3 = UNITY_SAMPLE_TEX2D(_FallbackTex, i.uv + float2(-halfpixelSize * 0.6, -halfpixelSize * 0.3)).a;
+ // float fcolor4 = UNITY_SAMPLE_TEX2D(_FallbackTex, i.uv + float2(halfpixelSize * 0.3, -halfpixelSize * 0.6)).a;
+ // float fallbackAlpha = (fcolor0 + fcolor1 + fcolor2 + fcolor3 + fcolor4) * 0.2;
+ // Bias the texture sampling to use a lower mipmap level. This makes the text much sharper and clearer.
+ float fallbackAlpha = UNITY_SAMPLE_TEX2D_BIAS(_FallbackTex, i.uv, _MipBias).a;
+
+ // The fallback is used for small font sizes.
+ // Boost the alpha to make it more legible
+ fallbackAlpha *= 1.2;
+
+ // Approximate size of one screen pixel in UV-space
+ float pixelSize = length(float2(ddx(i.uv.x), ddy(i.uv.x)));
+ // float pixelSize2 = length(float2(ddx(i.uv.y), ddy(i.uv.y)));
+
+ // float color0 = getAlpha(i.uv);
+ // float color1 = getAlpha(i.uv + float2(halfpixelSize * 0.6, halfpixelSize * 0.3));
+ // float color2 = getAlpha(i.uv + float2(-halfpixelSize * 0.3, halfpixelSize * 0.6));
+ // float color3 = getAlpha(i.uv + float2(-halfpixelSize * 0.6, -halfpixelSize * 0.3));
+ // float color4 = getAlpha(i.uv + float2(halfpixelSize * 0.3, -halfpixelSize * 0.6));
+ // float color = (color0 + color1 + color2 + color3 + color4) * 0.2;
+
+ float sdfAlpha = getAlpha(i.uv);
+
+ // Transition from the SDF font to the fallback when the font's size on the screen
+ // starts getting smaller than the size in the texture.
+ float sdfTextureWidth = 1024;
+ // How sharp the transition from sdf to fallback is.
+ // A smaller value will make the transition cover a larger range of font sizes
+ float transitionSharpness = 10;
+ float blend = clamp(transitionSharpness*(_TransitionPoint*pixelSize*sdfTextureWidth - 1.0), 0, 1);
+
+ float alpha = lerp(sdfAlpha, fallbackAlpha, blend * _FallbackAmount);
+
+ float4 blendcolor = float4(1,1,1,1);
+ // blendcolor = lerp(float4(0, 1, 0, 1), float4(1, 0, 0, 1), blend);
+
+ return blendcolor * i.col * float4(1, 1, 1, alpha);
+} \ No newline at end of file