summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2025-05-04 13:36:34 -0700
committeryum <yum.food.vr@gmail.com>2025-05-04 13:36:34 -0700
commit390160e9e1ff5e672918fae0107c786039a3457d (patch)
tree3adff5771b63e16652a0c7f220f56e089efff1ff
parent4066ad88b311a99345e168ad9f31ce9ce86684e9 (diff)
Begin work on unigram letter grid
Basic idea is to use a sentencepiece unigram tokenizer to compress text over the wire. GPU decodes tokens with a LUT.
-rw-r--r--2ner.cginc14
-rw-r--r--2ner.shader149
-rw-r--r--features.cginc4
3 files changed, 167 insertions, 0 deletions
diff --git a/2ner.cginc b/2ner.cginc
index 43d6059..7d0916f 100644
--- a/2ner.cginc
+++ b/2ner.cginc
@@ -18,6 +18,7 @@
#include "shatter_wave.cginc"
#include "ssfd.cginc"
#include "tessellation.cginc"
+#include "unigram_letter_grid.cginc"
#include "vertex_domain_warping.cginc"
#include "yum_brdf.cginc"
#include "yum_pbr.cginc"
@@ -247,6 +248,16 @@ float4 frag(v2f i, uint facing : SV_IsFrontFace
pbr.roughness = lerp(pbr.roughness, letter_grid_output.roughness, letter_grid_output.albedo.a);
#endif
+#if defined(_UNIGRAM_LETTER_GRID)
+ UnigramLetterGridOutput unigram_letter_grid_output = UnigramLetterGrid(i);
+ pbr.albedo.rgb = lerp(pbr.albedo.rgb, unigram_letter_grid_output.albedo,
+ unigram_letter_grid_output.albedo.a);
+ pbr.metallic = lerp(pbr.metallic, unigram_letter_grid_output.metallic,
+ unigram_letter_grid_output.albedo.a);
+ pbr.roughness = lerp(pbr.roughness, unigram_letter_grid_output.roughness,
+ unigram_letter_grid_output.albedo.a);
+#endif
+
[branch]
if (_Mode == 1) {
clip(pbr.albedo.a - _Clip);
@@ -296,6 +307,9 @@ float4 frag(v2f i, uint facing : SV_IsFrontFace
#if defined(_LETTER_GRID)
lit.rgb += letter_grid_output.emission * letter_grid_output.albedo.a;
#endif
+#if defined(_UNIGRAM_LETTER_GRID)
+ lit.rgb += unigram_letter_grid_output.emission * unigram_letter_grid_output.albedo.a;
+#endif
UNITY_EXTRACT_FOG_FROM_EYE_VEC(i);
UNITY_APPLY_FOG(_unity_fogCoord, lit.rgb);
diff --git a/2ner.shader b/2ner.shader
index aa26212..a7e015e 100644
--- a/2ner.shader
+++ b/2ner.shader
@@ -594,6 +594,155 @@ Shader "yum_food/2ner"
[HideInInspector] m_end_Letter_Grid("Letter grid", Float) = 0
//endex
+ //ifex _Unigram_Letter_Grid_Enabled==0
+ [HideInInspector] m_start_Unigram_Letter_Grid("Unigram letter grid", Float) = 0
+ [ThryToggle(_UNIGRAM_LETTER_GRID)] _Unigram_Letter_Grid_Enabled("Enable", Float) = 0
+ _Unigram_Letter_Grid_Glyphs("Glyph texture", 2D) = "black" {}
+ _Unigram_Letter_Grid_LUT("Unigram tokenizer LUT", 2D) = "black" {}
+ _Unigram_Letter_Grid_Tex_Res_X("Glyph X resolution", Float) = 16
+ _Unigram_Letter_Grid_Tex_Res_Y("Glyph Y resolution", Float) = 8
+ _Unigram_Letter_Grid_Res_X("Cell X resolution", Range(1, 4)) = 1
+ _Unigram_Letter_Grid_Res_Y("Cell Y resolution", Range(1, 4)) = 1
+ _Unigram_Letter_Grid_UV_Scale_Offset("UV scale/offset", Vector) = (1, 1, 0, 0)
+ _Unigram_Letter_Grid_Padding("Padding", Float) = 0.02
+ _Unigram_Letter_Grid_Screen_Px_Range("Screen px range (from msdfgen)", Float) = 10
+ _Unigram_Letter_Grid_Min_Screen_Px_Range("Minimum screen px range", Float) = 1
+ _Unigram_Letter_Grid_Blurriness("Blurriness", Float) = 0.5
+ _Unigram_Letter_Grid_Alpha_Threshold("Alpha threshold", Range(0, 1)) = 0.5
+
+ // We compose the addressable space into blocks of 2-byte cells.
+ // Each cell contains a 16-bit token id.
+ // Each block contains 5 cells.
+ // There are a total of 40 blocks.
+ // This gives us a total of 200 cells. Since each cell is, on
+ // average, 4.8 characters (according to test), this gives an
+ // addressable space of 960 characters. Sending one block at 3 Hz
+ // means that it will take a total of 13.3 seconds to fill the entire
+ // space.
+ _Unigram_Letter_Grid_Block00_Visual_Pointer("Block 00 visual pointer", Float) = 0
+ _Unigram_Letter_Grid_Block01_Visual_Pointer("Block 01 visual pointer", Float) = 0
+ _Unigram_Letter_Grid_Block02_Visual_Pointer("Block 02 visual pointer", Float) = 0
+ _Unigram_Letter_Grid_Block03_Visual_Pointer("Block 03 visual pointer", Float) = 0
+ _Unigram_Letter_Grid_Block04_Visual_Pointer("Block 04 visual pointer", Float) = 0
+ _Unigram_Letter_Grid_Block05_Visual_Pointer("Block 05 visual pointer", Float) = 0
+ _Unigram_Letter_Grid_Block06_Visual_Pointer("Block 06 visual pointer", Float) = 0
+ _Unigram_Letter_Grid_Block07_Visual_Pointer("Block 07 visual pointer", Float) = 0
+ _Unigram_Letter_Grid_Block08_Visual_Pointer("Block 08 visual pointer", Float) = 0
+ _Unigram_Letter_Grid_Block09_Visual_Pointer("Block 09 visual pointer", Float) = 0
+
+ _Unigram_Letter_Grid_Data_Block00_Datum00_Byte00("Block 00, Datum 00, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block00_Datum00_Byte01("Block 00, Datum 00, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block00_Datum01_Byte00("Block 00, Datum 01, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block00_Datum01_Byte01("Block 00, Datum 01, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block00_Datum02_Byte00("Block 00, Datum 02, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block00_Datum02_Byte01("Block 00, Datum 02, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block00_Datum03_Byte00("Block 00, Datum 03, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block00_Datum03_Byte01("Block 00, Datum 03, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block00_Datum04_Byte00("Block 00, Datum 04, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block00_Datum04_Byte01("Block 00, Datum 04, Byte 01", Float) = 0
+
+ _Unigram_Letter_Grid_Data_Block01_Datum00_Byte00("Block 00, Datum 00, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block01_Datum00_Byte01("Block 00, Datum 00, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block01_Datum01_Byte00("Block 00, Datum 01, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block01_Datum01_Byte01("Block 00, Datum 01, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block01_Datum02_Byte00("Block 00, Datum 02, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block01_Datum02_Byte01("Block 00, Datum 02, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block01_Datum03_Byte00("Block 00, Datum 03, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block01_Datum03_Byte01("Block 00, Datum 03, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block01_Datum04_Byte00("Block 00, Datum 04, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block01_Datum04_Byte01("Block 00, Datum 04, Byte 01", Float) = 0
+
+ _Unigram_Letter_Grid_Data_Block02_Datum00_Byte00("Block 00, Datum 00, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block02_Datum00_Byte01("Block 00, Datum 00, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block02_Datum01_Byte00("Block 00, Datum 01, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block02_Datum01_Byte01("Block 00, Datum 01, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block02_Datum02_Byte00("Block 00, Datum 02, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block02_Datum02_Byte01("Block 00, Datum 02, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block02_Datum03_Byte00("Block 00, Datum 03, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block02_Datum03_Byte01("Block 00, Datum 03, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block02_Datum04_Byte00("Block 00, Datum 04, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block02_Datum04_Byte01("Block 00, Datum 04, Byte 01", Float) = 0
+
+ _Unigram_Letter_Grid_Data_Block03_Datum00_Byte00("Block 00, Datum 00, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block03_Datum00_Byte01("Block 00, Datum 00, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block03_Datum01_Byte00("Block 00, Datum 01, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block03_Datum01_Byte01("Block 00, Datum 01, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block03_Datum02_Byte00("Block 00, Datum 02, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block03_Datum02_Byte01("Block 00, Datum 02, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block03_Datum03_Byte00("Block 00, Datum 03, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block03_Datum03_Byte01("Block 00, Datum 03, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block03_Datum04_Byte00("Block 00, Datum 04, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block03_Datum04_Byte01("Block 00, Datum 04, Byte 01", Float) = 0
+
+ _Unigram_Letter_Grid_Data_Block04_Datum00_Byte00("Block 00, Datum 00, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block04_Datum00_Byte01("Block 00, Datum 00, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block04_Datum01_Byte00("Block 00, Datum 01, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block04_Datum01_Byte01("Block 00, Datum 01, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block04_Datum02_Byte00("Block 00, Datum 02, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block04_Datum02_Byte01("Block 00, Datum 02, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block04_Datum03_Byte00("Block 00, Datum 03, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block04_Datum03_Byte01("Block 00, Datum 03, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block04_Datum04_Byte00("Block 00, Datum 04, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block04_Datum04_Byte01("Block 00, Datum 04, Byte 01", Float) = 0
+
+ _Unigram_Letter_Grid_Data_Block05_Datum00_Byte00("Block 00, Datum 00, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block05_Datum00_Byte01("Block 00, Datum 00, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block05_Datum01_Byte00("Block 00, Datum 01, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block05_Datum01_Byte01("Block 00, Datum 01, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block05_Datum02_Byte00("Block 00, Datum 02, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block05_Datum02_Byte01("Block 00, Datum 02, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block05_Datum03_Byte00("Block 00, Datum 03, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block05_Datum03_Byte01("Block 00, Datum 03, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block05_Datum04_Byte00("Block 00, Datum 04, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block05_Datum04_Byte01("Block 00, Datum 04, Byte 01", Float) = 0
+
+ _Unigram_Letter_Grid_Data_Block06_Datum00_Byte00("Block 00, Datum 00, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block06_Datum00_Byte01("Block 00, Datum 00, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block06_Datum01_Byte00("Block 00, Datum 01, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block06_Datum01_Byte01("Block 00, Datum 01, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block06_Datum02_Byte00("Block 00, Datum 02, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block06_Datum02_Byte01("Block 00, Datum 02, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block06_Datum03_Byte00("Block 00, Datum 03, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block06_Datum03_Byte01("Block 00, Datum 03, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block06_Datum04_Byte00("Block 00, Datum 04, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block06_Datum04_Byte01("Block 00, Datum 04, Byte 01", Float) = 0
+
+ _Unigram_Letter_Grid_Data_Block07_Datum00_Byte00("Block 00, Datum 00, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block07_Datum00_Byte01("Block 00, Datum 00, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block07_Datum01_Byte00("Block 00, Datum 01, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block07_Datum01_Byte01("Block 00, Datum 01, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block07_Datum02_Byte00("Block 00, Datum 02, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block07_Datum02_Byte01("Block 00, Datum 02, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block07_Datum03_Byte00("Block 00, Datum 03, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block07_Datum03_Byte01("Block 00, Datum 03, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block07_Datum04_Byte00("Block 00, Datum 04, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block07_Datum04_Byte01("Block 00, Datum 04, Byte 01", Float) = 0
+
+ _Unigram_Letter_Grid_Data_Block08_Datum00_Byte00("Block 00, Datum 00, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block08_Datum00_Byte01("Block 00, Datum 00, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block08_Datum01_Byte00("Block 00, Datum 01, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block08_Datum01_Byte01("Block 00, Datum 01, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block08_Datum02_Byte00("Block 00, Datum 02, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block08_Datum02_Byte01("Block 00, Datum 02, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block08_Datum03_Byte00("Block 00, Datum 03, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block08_Datum03_Byte01("Block 00, Datum 03, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block08_Datum04_Byte00("Block 00, Datum 04, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block08_Datum04_Byte01("Block 00, Datum 04, Byte 01", Float) = 0
+
+ _Unigram_Letter_Grid_Data_Block09_Datum00_Byte00("Block 00, Datum 00, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block09_Datum00_Byte01("Block 00, Datum 00, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block09_Datum01_Byte00("Block 00, Datum 01, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block09_Datum01_Byte01("Block 00, Datum 01, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block09_Datum02_Byte00("Block 00, Datum 02, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block09_Datum02_Byte01("Block 00, Datum 02, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block09_Datum03_Byte00("Block 00, Datum 03, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block09_Datum03_Byte01("Block 00, Datum 03, Byte 01", Float) = 0
+ _Unigram_Letter_Grid_Data_Block09_Datum04_Byte00("Block 00, Datum 04, Byte 00", Float) = 0
+ _Unigram_Letter_Grid_Data_Block09_Datum04_Byte01("Block 00, Datum 04, Byte 01", Float) = 0
+
+ [HideInInspector] m_end_Unigram_Letter_Grid("Unigram letter grid", Float) = 0
+ //endex
+
//ifex _Shatter_Wave_Enabled==0
[HideInInspector] m_start_Shatter_Wave("Shatter wave", Float) = 0
[ThryToggle(_SHATTER_WAVE)] _Shatter_Wave_Enabled("Enable", Float) = 0
diff --git a/features.cginc b/features.cginc
index 314aca0..67605f3 100644
--- a/features.cginc
+++ b/features.cginc
@@ -216,6 +216,10 @@
#pragma shader_feature_local _LETTER_GRID
//endex
+//ifex _Unigram_Letter_Grid_Enabled==0
+#pragma shader_feature_local _UNIGRAM_LETTER_GRID
+//endex
+
//ifex _Shatter_Wave_Enabled==0
#pragma shader_feature_local _SHATTER_WAVE
//endex