From b31daf071a1ccb0dd45ef78a96a8c1213b108858 Mon Sep 17 00:00:00 2001 From: yum Date: Tue, 27 Sep 2022 01:06:27 -0700 Subject: initial commit * initial checkin of shader * 6 rows and 14 cols * currently using Noto Sans Mono font * AFAIK free as in beer & freedom --- TaSTT.shader | 296 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ TaSTT_texture.png | Bin 0 -> 111292 bytes TaSTT_texture.xcf | Bin 0 -> 330316 bytes 3 files changed, 296 insertions(+) create mode 100644 TaSTT.shader create mode 100644 TaSTT_texture.png create mode 100644 TaSTT_texture.xcf diff --git a/TaSTT.shader b/TaSTT.shader new file mode 100644 index 0000000..f865026 --- /dev/null +++ b/TaSTT.shader @@ -0,0 +1,296 @@ +Shader "Unlit/my_shader" +{ + Properties + { + _MainTex ("Texture", 2D) = "white" {} + // software "engineering" LULW + _Letter_Row00_Col00("Letter_Row00_Col00", float) = 0 + _Letter_Row00_Col01("Letter_Row00_Col01", float) = 0 + _Letter_Row00_Col02("Letter_Row00_Col02", float) = 0 + _Letter_Row00_Col03("Letter_Row00_Col03", float) = 0 + _Letter_Row00_Col04("Letter_Row00_Col04", float) = 0 + _Letter_Row00_Col05("Letter_Row00_Col05", float) = 0 + _Letter_Row00_Col06("Letter_Row00_Col06", float) = 0 + _Letter_Row00_Col07("Letter_Row00_Col07", float) = 0 + _Letter_Row00_Col08("Letter_Row00_Col08", float) = 0 + _Letter_Row00_Col09("Letter_Row00_Col09", float) = 0 + _Letter_Row00_Col10("Letter_Row00_Col10", float) = 0 + _Letter_Row00_Col11("Letter_Row00_Col11", float) = 0 + _Letter_Row00_Col12("Letter_Row00_Col12", float) = 0 + _Letter_Row00_Col13("Letter_Row00_Col13", float) = 0 + _Letter_Row01_Col00("Letter_Row01_Col00", float) = 0 + _Letter_Row01_Col01("Letter_Row01_Col01", float) = 0 + _Letter_Row01_Col02("Letter_Row01_Col02", float) = 0 + _Letter_Row01_Col03("Letter_Row01_Col03", float) = 0 + _Letter_Row01_Col04("Letter_Row01_Col04", float) = 0 + _Letter_Row01_Col05("Letter_Row01_Col05", float) = 0 + _Letter_Row01_Col06("Letter_Row01_Col06", float) = 0 + _Letter_Row01_Col07("Letter_Row01_Col07", float) = 0 + _Letter_Row01_Col08("Letter_Row01_Col08", float) = 0 + _Letter_Row01_Col09("Letter_Row01_Col09", float) = 0 + _Letter_Row01_Col10("Letter_Row01_Col10", float) = 0 + _Letter_Row01_Col11("Letter_Row01_Col11", float) = 0 + _Letter_Row01_Col12("Letter_Row01_Col12", float) = 0 + _Letter_Row01_Col13("Letter_Row01_Col13", float) = 0 + _Letter_Row02_Col00("Letter_Row02_Col00", float) = 0 + _Letter_Row02_Col01("Letter_Row02_Col01", float) = 0 + _Letter_Row02_Col02("Letter_Row02_Col02", float) = 0 + _Letter_Row02_Col03("Letter_Row02_Col03", float) = 0 + _Letter_Row02_Col04("Letter_Row02_Col04", float) = 0 + _Letter_Row02_Col05("Letter_Row02_Col05", float) = 0 + _Letter_Row02_Col06("Letter_Row02_Col06", float) = 0 + _Letter_Row02_Col07("Letter_Row02_Col07", float) = 0 + _Letter_Row02_Col08("Letter_Row02_Col08", float) = 0 + _Letter_Row02_Col09("Letter_Row02_Col09", float) = 0 + _Letter_Row02_Col10("Letter_Row02_Col10", float) = 0 + _Letter_Row02_Col11("Letter_Row02_Col11", float) = 0 + _Letter_Row02_Col12("Letter_Row02_Col12", float) = 0 + _Letter_Row02_Col13("Letter_Row02_Col13", float) = 0 + } + SubShader + { + Tags { "RenderType"="Opaque" } + LOD 100 + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + float3 normal : NORMAL; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + sampler2D _MainTex; + float4 _MainTex_ST; + + float _Letter_Row00_Col00; + float _Letter_Row00_Col01; + float _Letter_Row00_Col02; + float _Letter_Row00_Col03; + float _Letter_Row00_Col04; + float _Letter_Row00_Col05; + float _Letter_Row00_Col06; + float _Letter_Row00_Col07; + float _Letter_Row00_Col08; + float _Letter_Row00_Col09; + float _Letter_Row00_Col10; + float _Letter_Row00_Col11; + float _Letter_Row00_Col12; + float _Letter_Row00_Col13; + float _Letter_Row01_Col00; + float _Letter_Row01_Col01; + float _Letter_Row01_Col02; + float _Letter_Row01_Col03; + float _Letter_Row01_Col04; + float _Letter_Row01_Col05; + float _Letter_Row01_Col06; + float _Letter_Row01_Col07; + float _Letter_Row01_Col08; + float _Letter_Row01_Col09; + float _Letter_Row01_Col10; + float _Letter_Row01_Col11; + float _Letter_Row01_Col12; + float _Letter_Row01_Col13; + float _Letter_Row02_Col00; + float _Letter_Row02_Col01; + float _Letter_Row02_Col02; + float _Letter_Row02_Col03; + float _Letter_Row02_Col04; + float _Letter_Row02_Col05; + float _Letter_Row02_Col06; + float _Letter_Row02_Col07; + float _Letter_Row02_Col08; + float _Letter_Row02_Col09; + float _Letter_Row02_Col10; + float _Letter_Row02_Col11; + float _Letter_Row02_Col12; + float _Letter_Row02_Col13; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = 1.0 - v.uv; + return o; + } + + // Write the nth letter in the current cell and return the value of the + // pixel. + float2 GetLetter(v2f i, float nth_letter) + { + // UV spans from [0,1] to [0,1]. + // 'U' is horizontal; cols. + // 'V' is vertical; rows. + // + // I want to divide the mesh into an m x n grid. + // Thus given UV, I need to know a few things: + // 1. What grid cell I'm in. This is simply u * m, v * n. + float CHAR_ROWS = 6.0; + float CHAR_COLS = 14.0; + float CHAR_COL = floor(i.uv.x * CHAR_COLS); + float CHAR_ROW = floor(i.uv.y * CHAR_ROWS); + + // OK, I know what cell I'm in. Now I need to know how far across it I + // am. + float CHAR_FRAC_COL = fmod(i.uv.x, 1.0 / CHAR_COLS) / (1.0 / CHAR_COLS); + float CHAR_FRAC_ROW = fmod(i.uv.y, 1.0 / CHAR_ROWS) / (1.0 / CHAR_ROWS); + + // TODO(yum_food) figure out what's causing the outlines around letters + // and remove this. This simply reduces the size of the outlines. + float kappa = 0.01; + if (CHAR_FRAC_COL < kappa || CHAR_FRAC_ROW < kappa || + CHAR_FRAC_COL > 1 - kappa || CHAR_FRAC_ROW > 1 - kappa) { + return float2(0, 0); + } + + float LETTER_COLS = 26.6; + float LETTER_ROWS = 11.4; + float LETTER_COL = fmod(nth_letter, floor(LETTER_COLS)); + float LETTER_ROW = floor(LETTER_ROWS) - floor(nth_letter / floor(LETTER_COLS)); + float LETTER_UV_WD = (1.0 / LETTER_COLS); + float LETTER_UV_COL = (LETTER_UV_WD * LETTER_COL); + float LETTER_UV_HT = (1.0 / LETTER_ROWS); + float LETTER_UV_ROW = (LETTER_UV_HT * LETTER_ROW); + + LETTER_UV_ROW += LETTER_UV_HT * CHAR_FRAC_ROW - LETTER_UV_HT * 0.6; + LETTER_UV_COL += LETTER_UV_WD * CHAR_FRAC_COL; + + float2 uv; + uv.x = LETTER_UV_COL; + uv.y = LETTER_UV_ROW; + + return uv; + } + + // Get the value of the parameter for the cell we're in. + float GetLetterParameter(v2f i) + { + float CHAR_ROWS = 6.0; + float CHAR_COLS = 14.0; + float CHAR_COL = floor(i.uv.x * CHAR_COLS); + float CHAR_ROW = floor(i.uv.y * CHAR_ROWS); + + // ok now this is epic + if (CHAR_ROW == 0) { + if (CHAR_COL == 0) { + return _Letter_Row00_Col00; + } else if (CHAR_COL == 1) { + return _Letter_Row00_Col01; + } else if (CHAR_COL == 2) { + return _Letter_Row00_Col02; + } else if (CHAR_COL == 3) { + return _Letter_Row00_Col03; + } else if (CHAR_COL == 4) { + return _Letter_Row00_Col04; + } else if (CHAR_COL == 5) { + return _Letter_Row00_Col05; + } else if (CHAR_COL == 6) { + return _Letter_Row00_Col06; + } else if (CHAR_COL == 7) { + return _Letter_Row00_Col07; + } else if (CHAR_COL == 8) { + return _Letter_Row00_Col08; + } else if (CHAR_COL == 9) { + return _Letter_Row00_Col09; + } else if (CHAR_COL == 10) { + return _Letter_Row00_Col10; + } else if (CHAR_COL == 11) { + return _Letter_Row00_Col11; + } else if (CHAR_COL == 12) { + return _Letter_Row00_Col12; + } else if (CHAR_COL == 13) { + return _Letter_Row00_Col13; + } + } else if (CHAR_ROW == 1) { + if (CHAR_COL == 0) { + return _Letter_Row01_Col00; + } else if (CHAR_COL == 1) { + return _Letter_Row01_Col01; + } else if (CHAR_COL == 2) { + return _Letter_Row01_Col02; + } else if (CHAR_COL == 3) { + return _Letter_Row01_Col03; + } else if (CHAR_COL == 4) { + return _Letter_Row01_Col04; + } else if (CHAR_COL == 5) { + return _Letter_Row01_Col05; + } else if (CHAR_COL == 6) { + return _Letter_Row01_Col06; + } else if (CHAR_COL == 7) { + return _Letter_Row01_Col07; + } else if (CHAR_COL == 8) { + return _Letter_Row01_Col08; + } else if (CHAR_COL == 9) { + return _Letter_Row01_Col09; + } else if (CHAR_COL == 10) { + return _Letter_Row01_Col10; + } else if (CHAR_COL == 11) { + return _Letter_Row01_Col11; + } else if (CHAR_COL == 12) { + return _Letter_Row01_Col12; + } else if (CHAR_COL == 13) { + return _Letter_Row01_Col13; + } + } else if (CHAR_ROW == 2) { + if (CHAR_COL == 0) { + return _Letter_Row02_Col00; + } else if (CHAR_COL == 1) { + return _Letter_Row02_Col01; + } else if (CHAR_COL == 2) { + return _Letter_Row02_Col02; + } else if (CHAR_COL == 3) { + return _Letter_Row02_Col03; + } else if (CHAR_COL == 4) { + return _Letter_Row02_Col04; + } else if (CHAR_COL == 5) { + return _Letter_Row02_Col05; + } else if (CHAR_COL == 6) { + return _Letter_Row02_Col06; + } else if (CHAR_COL == 7) { + return _Letter_Row02_Col07; + } else if (CHAR_COL == 8) { + return _Letter_Row02_Col08; + } else if (CHAR_COL == 9) { + return _Letter_Row02_Col09; + } else if (CHAR_COL == 10) { + return _Letter_Row02_Col10; + } else if (CHAR_COL == 11) { + return _Letter_Row02_Col11; + } else if (CHAR_COL == 12) { + return _Letter_Row02_Col12; + } else if (CHAR_COL == 13) { + return _Letter_Row02_Col13; + } + } + + return float2(0, 0); + } + + fixed4 frag (v2f i) : SV_Target + { + float letter = GetLetterParameter(i); + float2 uv = GetLetter(i, letter); + fixed4 ret = tex2D(_MainTex, uv); + if (uv.x == 0 && uv.y == 0) { + ret.xyz = 0; + ret.w = 0; + } + return ret; + } + ENDCG + } + } +} diff --git a/TaSTT_texture.png b/TaSTT_texture.png new file mode 100644 index 0000000..cf86821 Binary files /dev/null and b/TaSTT_texture.png differ diff --git a/TaSTT_texture.xcf b/TaSTT_texture.xcf new file mode 100644 index 0000000..7c84e56 Binary files /dev/null and b/TaSTT_texture.xcf differ -- cgit v1.2.3