diff options
| -rw-r--r-- | 2ner.shader | 196 | ||||
| -rw-r--r-- | unigram_letter_grid.cginc | 337 |
2 files changed, 354 insertions, 179 deletions
diff --git a/2ner.shader b/2ner.shader index a7e015e..6a3bb4a 100644 --- a/2ner.shader +++ b/2ner.shader @@ -641,104 +641,104 @@ Shader "yum_food/2ner" _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 + _Unigram_Letter_Grid_Data_Block01_Datum00_Byte00("Block 01, Datum 00, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block01_Datum00_Byte01("Block 01, Datum 00, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block01_Datum01_Byte00("Block 01, Datum 01, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block01_Datum01_Byte01("Block 01, Datum 01, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block01_Datum02_Byte00("Block 01, Datum 02, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block01_Datum02_Byte01("Block 01, Datum 02, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block01_Datum03_Byte00("Block 01, Datum 03, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block01_Datum03_Byte01("Block 01, Datum 03, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block01_Datum04_Byte00("Block 01, Datum 04, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block01_Datum04_Byte01("Block 01, Datum 04, Byte 01", Float) = 0 + + _Unigram_Letter_Grid_Data_Block02_Datum00_Byte00("Block 02, Datum 00, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block02_Datum00_Byte01("Block 02, Datum 00, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block02_Datum01_Byte00("Block 02, Datum 01, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block02_Datum01_Byte01("Block 02, Datum 01, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block02_Datum02_Byte00("Block 02, Datum 02, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block02_Datum02_Byte01("Block 02, Datum 02, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block02_Datum03_Byte00("Block 02, Datum 03, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block02_Datum03_Byte01("Block 02, Datum 03, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block02_Datum04_Byte00("Block 02, Datum 04, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block02_Datum04_Byte01("Block 02, Datum 04, Byte 01", Float) = 0 + + _Unigram_Letter_Grid_Data_Block03_Datum00_Byte00("Block 03, Datum 00, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block03_Datum00_Byte01("Block 03, Datum 00, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block03_Datum01_Byte00("Block 03, Datum 01, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block03_Datum01_Byte01("Block 03, Datum 01, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block03_Datum02_Byte00("Block 03, Datum 02, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block03_Datum02_Byte01("Block 03, Datum 02, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block03_Datum03_Byte00("Block 03, Datum 03, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block03_Datum03_Byte01("Block 03, Datum 03, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block03_Datum04_Byte00("Block 03, Datum 04, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block03_Datum04_Byte01("Block 03, Datum 04, Byte 01", Float) = 0 + + _Unigram_Letter_Grid_Data_Block04_Datum00_Byte00("Block 04, Datum 00, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block04_Datum00_Byte01("Block 04, Datum 00, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block04_Datum01_Byte00("Block 04, Datum 01, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block04_Datum01_Byte01("Block 04, Datum 01, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block04_Datum02_Byte00("Block 04, Datum 02, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block04_Datum02_Byte01("Block 04, Datum 02, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block04_Datum03_Byte00("Block 04, Datum 03, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block04_Datum03_Byte01("Block 04, Datum 03, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block04_Datum04_Byte00("Block 04, Datum 04, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block04_Datum04_Byte01("Block 04, Datum 04, Byte 01", Float) = 0 + + _Unigram_Letter_Grid_Data_Block05_Datum00_Byte00("Block 05, Datum 00, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block05_Datum00_Byte01("Block 05, Datum 00, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block05_Datum01_Byte00("Block 05, Datum 01, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block05_Datum01_Byte01("Block 05, Datum 01, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block05_Datum02_Byte00("Block 05, Datum 02, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block05_Datum02_Byte01("Block 05, Datum 02, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block05_Datum03_Byte00("Block 05, Datum 03, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block05_Datum03_Byte01("Block 05, Datum 03, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block05_Datum04_Byte00("Block 05, Datum 04, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block05_Datum04_Byte01("Block 05, Datum 04, Byte 01", Float) = 0 + + _Unigram_Letter_Grid_Data_Block06_Datum00_Byte00("Block 06, Datum 00, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block06_Datum00_Byte01("Block 06, Datum 00, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block06_Datum01_Byte00("Block 06, Datum 01, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block06_Datum01_Byte01("Block 06, Datum 01, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block06_Datum02_Byte00("Block 06, Datum 02, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block06_Datum02_Byte01("Block 06, Datum 02, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block06_Datum03_Byte00("Block 06, Datum 03, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block06_Datum03_Byte01("Block 06, Datum 03, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block06_Datum04_Byte00("Block 06, Datum 04, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block06_Datum04_Byte01("Block 06, Datum 04, Byte 01", Float) = 0 + + _Unigram_Letter_Grid_Data_Block07_Datum00_Byte00("Block 07, Datum 00, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block07_Datum00_Byte01("Block 07, Datum 00, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block07_Datum01_Byte00("Block 07, Datum 01, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block07_Datum01_Byte01("Block 07, Datum 01, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block07_Datum02_Byte00("Block 07, Datum 02, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block07_Datum02_Byte01("Block 07, Datum 02, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block07_Datum03_Byte00("Block 07, Datum 03, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block07_Datum03_Byte01("Block 07, Datum 03, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block07_Datum04_Byte00("Block 07, Datum 04, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block07_Datum04_Byte01("Block 07, Datum 04, Byte 01", Float) = 0 + + _Unigram_Letter_Grid_Data_Block08_Datum00_Byte00("Block 08, Datum 00, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block08_Datum00_Byte01("Block 08, Datum 00, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block08_Datum01_Byte00("Block 08, Datum 01, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block08_Datum01_Byte01("Block 08, Datum 01, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block08_Datum02_Byte00("Block 08, Datum 02, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block08_Datum02_Byte01("Block 08, Datum 02, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block08_Datum03_Byte00("Block 08, Datum 03, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block08_Datum03_Byte01("Block 08, Datum 03, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block08_Datum04_Byte00("Block 08, Datum 04, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block08_Datum04_Byte01("Block 08, Datum 04, Byte 01", Float) = 0 + + _Unigram_Letter_Grid_Data_Block09_Datum00_Byte00("Block 09, Datum 00, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block09_Datum00_Byte01("Block 09, Datum 00, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block09_Datum01_Byte00("Block 09, Datum 01, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block09_Datum01_Byte01("Block 09, Datum 01, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block09_Datum02_Byte00("Block 09, Datum 02, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block09_Datum02_Byte01("Block 09, Datum 02, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block09_Datum03_Byte00("Block 09, Datum 03, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block09_Datum03_Byte01("Block 09, Datum 03, Byte 01", Float) = 0 + _Unigram_Letter_Grid_Data_Block09_Datum04_Byte00("Block 09, Datum 04, Byte 00", Float) = 0 + _Unigram_Letter_Grid_Data_Block09_Datum04_Byte01("Block 09, iatum 04, Byte 01", Float) = 0 [HideInInspector] m_end_Unigram_Letter_Grid("Unigram letter grid", Float) = 0 //endex diff --git a/unigram_letter_grid.cginc b/unigram_letter_grid.cginc index e31102e..9b5dc81 100644 --- a/unigram_letter_grid.cginc +++ b/unigram_letter_grid.cginc @@ -10,11 +10,11 @@ #include "math.cginc" #include "texture_utils.cginc" -// ULD = unigram letter grid +// ULG = unigram letter grid // Block width = number of tokens sent per block -#define ULD_BLOCK_WIDTH 5 +#define ULG_BLOCK_WIDTH 5 // Num blocks = total # of blocks in memory -#define ULD_NUM_BLOCKS 10 +#define ULG_NUM_BLOCKS 10 texture2D _Unigram_Letter_Grid_Glyphs; float4 _Unigram_Letter_Grid_Glyphs_TexelSize; @@ -31,12 +31,17 @@ float _Unigram_Letter_Grid_Min_Screen_Px_Range; float _Unigram_Letter_Grid_Blurriness; float _Unigram_Letter_Grid_Alpha_Threshold; +#define ULG_VP +#define ULG_D0 +#define ULG_D1 + +#if defined(ULG_VP) // For posterity: this syntax is called "cbuffer aliasing". // The purpose here is to map a bunch of material properties onto an indexable // array (the first element of the cbuffer). cbuffer UnigramLetterGridVisualPointers { - float _Unigram_Letter_Visual_Pointers[ULD_NUM_BLOCKS] : packoffset(c0); + float _Unigram_Letter_Visual_Pointers[ULG_NUM_BLOCKS] : packoffset(c0); float _Unigram_Letter_Grid_Block00_Visual_Pointer : packoffset(c0); float _Unigram_Letter_Grid_Block01_Visual_Pointer : packoffset(c1); float _Unigram_Letter_Grid_Block02_Visual_Pointer : packoffset(c2); @@ -48,10 +53,12 @@ cbuffer UnigramLetterGridVisualPointers float _Unigram_Letter_Grid_Block08_Visual_Pointer : packoffset(c8); float _Unigram_Letter_Grid_Block09_Visual_Pointer : packoffset(c9); } +#endif // ULG_VP +#if defined(ULG_D0) cbuffer UnigramLetterGridDataByte00 { - float _Unigram_Letter_Data_Byte00[ULD_NUM_BLOCKS][ULD_BLOCK_WIDTH] : packoffset(c0); + float _Unigram_Letter_Data_Byte00[ULG_NUM_BLOCKS * ULG_BLOCK_WIDTH] : packoffset(c0); float _Unigram_Letter_Grid_Data_Block00_Datum00_Byte00 : packoffset(c0); float _Unigram_Letter_Grid_Data_Block00_Datum01_Byte00 : packoffset(c1); @@ -113,10 +120,12 @@ cbuffer UnigramLetterGridDataByte00 float _Unigram_Letter_Grid_Data_Block09_Datum03_Byte00 : packoffset(c48); float _Unigram_Letter_Grid_Data_Block09_Datum04_Byte00 : packoffset(c49); } +#endif // ULG_D0 +#if defined(ULG_D1) cbuffer UnigramLetterGridDataByte01 { - float _Unigram_Letter_Data_Byte01[ULD_NUM_BLOCKS][ULD_BLOCK_WIDTH] : packoffset(c0); + float _Unigram_Letter_Data_Byte01[ULG_NUM_BLOCKS * ULG_BLOCK_WIDTH] : packoffset(c0); float _Unigram_Letter_Grid_Data_Block00_Datum00_Byte01 : packoffset(c0); float _Unigram_Letter_Grid_Data_Block00_Datum01_Byte01 : packoffset(c1); @@ -178,31 +187,164 @@ cbuffer UnigramLetterGridDataByte01 float _Unigram_Letter_Grid_Data_Block09_Datum03_Byte01 : packoffset(c48); float _Unigram_Letter_Grid_Data_Block09_Datum04_Byte01 : packoffset(c49); } +#endif // ULG_D1 + +void PreventCbufferElision(v2f i, inout float a) { + // Hack to prevent cbuffer from getting optimized out. + [branch] + if (i.uv01.x < 0) { + a = 0; +#if defined(ULG_VP) + a += + _Unigram_Letter_Grid_Block00_Visual_Pointer + + _Unigram_Letter_Grid_Block01_Visual_Pointer + + _Unigram_Letter_Grid_Block02_Visual_Pointer + + _Unigram_Letter_Grid_Block03_Visual_Pointer + + _Unigram_Letter_Grid_Block04_Visual_Pointer + + _Unigram_Letter_Grid_Block05_Visual_Pointer + + _Unigram_Letter_Grid_Block06_Visual_Pointer + + _Unigram_Letter_Grid_Block07_Visual_Pointer + + _Unigram_Letter_Grid_Block08_Visual_Pointer + + _Unigram_Letter_Grid_Block09_Visual_Pointer; +#endif // ULG_VP +#if defined(ULG_D0) + a += + _Unigram_Letter_Grid_Data_Block00_Datum00_Byte00 + + _Unigram_Letter_Grid_Data_Block00_Datum01_Byte00 + + _Unigram_Letter_Grid_Data_Block00_Datum02_Byte00 + + _Unigram_Letter_Grid_Data_Block00_Datum03_Byte00 + + _Unigram_Letter_Grid_Data_Block00_Datum04_Byte00 + + _Unigram_Letter_Grid_Data_Block01_Datum00_Byte00 + + _Unigram_Letter_Grid_Data_Block01_Datum01_Byte00 + + _Unigram_Letter_Grid_Data_Block01_Datum02_Byte00 + + _Unigram_Letter_Grid_Data_Block01_Datum03_Byte00 + + _Unigram_Letter_Grid_Data_Block01_Datum04_Byte00 + + _Unigram_Letter_Grid_Data_Block02_Datum00_Byte00 + + _Unigram_Letter_Grid_Data_Block02_Datum01_Byte00 + + _Unigram_Letter_Grid_Data_Block02_Datum02_Byte00 + + _Unigram_Letter_Grid_Data_Block02_Datum03_Byte00 + + _Unigram_Letter_Grid_Data_Block02_Datum04_Byte00 + + _Unigram_Letter_Grid_Data_Block03_Datum00_Byte00 + + _Unigram_Letter_Grid_Data_Block03_Datum01_Byte00 + + _Unigram_Letter_Grid_Data_Block03_Datum02_Byte00 + + _Unigram_Letter_Grid_Data_Block03_Datum03_Byte00 + + _Unigram_Letter_Grid_Data_Block03_Datum04_Byte00 + + _Unigram_Letter_Grid_Data_Block04_Datum00_Byte00 + + _Unigram_Letter_Grid_Data_Block04_Datum01_Byte00 + + _Unigram_Letter_Grid_Data_Block04_Datum02_Byte00 + + _Unigram_Letter_Grid_Data_Block04_Datum03_Byte00 + + _Unigram_Letter_Grid_Data_Block04_Datum04_Byte00 + + _Unigram_Letter_Grid_Data_Block05_Datum00_Byte00 + + _Unigram_Letter_Grid_Data_Block05_Datum01_Byte00 + + _Unigram_Letter_Grid_Data_Block05_Datum02_Byte00 + + _Unigram_Letter_Grid_Data_Block05_Datum03_Byte00 + + _Unigram_Letter_Grid_Data_Block05_Datum04_Byte00 + + _Unigram_Letter_Grid_Data_Block06_Datum00_Byte00 + + _Unigram_Letter_Grid_Data_Block06_Datum01_Byte00 + + _Unigram_Letter_Grid_Data_Block06_Datum02_Byte00 + + _Unigram_Letter_Grid_Data_Block06_Datum03_Byte00 + + _Unigram_Letter_Grid_Data_Block06_Datum04_Byte00 + + _Unigram_Letter_Grid_Data_Block07_Datum00_Byte00 + + _Unigram_Letter_Grid_Data_Block07_Datum01_Byte00 + + _Unigram_Letter_Grid_Data_Block07_Datum02_Byte00 + + _Unigram_Letter_Grid_Data_Block07_Datum03_Byte00 + + _Unigram_Letter_Grid_Data_Block07_Datum04_Byte00 + + _Unigram_Letter_Grid_Data_Block08_Datum00_Byte00 + + _Unigram_Letter_Grid_Data_Block08_Datum01_Byte00 + + _Unigram_Letter_Grid_Data_Block08_Datum02_Byte00 + + _Unigram_Letter_Grid_Data_Block08_Datum03_Byte00 + + _Unigram_Letter_Grid_Data_Block08_Datum04_Byte00 + + _Unigram_Letter_Grid_Data_Block09_Datum00_Byte00 + + _Unigram_Letter_Grid_Data_Block09_Datum01_Byte00 + + _Unigram_Letter_Grid_Data_Block09_Datum02_Byte00 + + _Unigram_Letter_Grid_Data_Block09_Datum03_Byte00 + + _Unigram_Letter_Grid_Data_Block09_Datum04_Byte00; +#endif // ULG_D0 +#if defined(ULG_D1) + a += + _Unigram_Letter_Grid_Data_Block00_Datum00_Byte01 + + _Unigram_Letter_Grid_Data_Block00_Datum01_Byte01 + + _Unigram_Letter_Grid_Data_Block00_Datum02_Byte01 + + _Unigram_Letter_Grid_Data_Block00_Datum03_Byte01 + + _Unigram_Letter_Grid_Data_Block00_Datum04_Byte01 + + _Unigram_Letter_Grid_Data_Block01_Datum00_Byte01 + + _Unigram_Letter_Grid_Data_Block01_Datum01_Byte01 + + _Unigram_Letter_Grid_Data_Block01_Datum02_Byte01 + + _Unigram_Letter_Grid_Data_Block01_Datum03_Byte01 + + _Unigram_Letter_Grid_Data_Block01_Datum04_Byte01 + + _Unigram_Letter_Grid_Data_Block02_Datum00_Byte01 + + _Unigram_Letter_Grid_Data_Block02_Datum01_Byte01 + + _Unigram_Letter_Grid_Data_Block02_Datum02_Byte01 + + _Unigram_Letter_Grid_Data_Block02_Datum03_Byte01 + + _Unigram_Letter_Grid_Data_Block02_Datum04_Byte01 + + _Unigram_Letter_Grid_Data_Block03_Datum00_Byte01 + + _Unigram_Letter_Grid_Data_Block03_Datum01_Byte01 + + _Unigram_Letter_Grid_Data_Block03_Datum02_Byte01 + + _Unigram_Letter_Grid_Data_Block03_Datum03_Byte01 + + _Unigram_Letter_Grid_Data_Block03_Datum04_Byte01 + + _Unigram_Letter_Grid_Data_Block04_Datum00_Byte01 + + _Unigram_Letter_Grid_Data_Block04_Datum01_Byte01 + + _Unigram_Letter_Grid_Data_Block04_Datum02_Byte01 + + _Unigram_Letter_Grid_Data_Block04_Datum03_Byte01 + + _Unigram_Letter_Grid_Data_Block04_Datum04_Byte01 + + _Unigram_Letter_Grid_Data_Block05_Datum00_Byte01 + + _Unigram_Letter_Grid_Data_Block05_Datum01_Byte01 + + _Unigram_Letter_Grid_Data_Block05_Datum02_Byte01 + + _Unigram_Letter_Grid_Data_Block05_Datum03_Byte01 + + _Unigram_Letter_Grid_Data_Block05_Datum04_Byte01 + + _Unigram_Letter_Grid_Data_Block06_Datum00_Byte01 + + _Unigram_Letter_Grid_Data_Block06_Datum01_Byte01 + + _Unigram_Letter_Grid_Data_Block06_Datum02_Byte01 + + _Unigram_Letter_Grid_Data_Block06_Datum03_Byte01 + + _Unigram_Letter_Grid_Data_Block06_Datum04_Byte01 + + _Unigram_Letter_Grid_Data_Block07_Datum00_Byte01 + + _Unigram_Letter_Grid_Data_Block07_Datum01_Byte01 + + _Unigram_Letter_Grid_Data_Block07_Datum02_Byte01 + + _Unigram_Letter_Grid_Data_Block07_Datum03_Byte01 + + _Unigram_Letter_Grid_Data_Block07_Datum04_Byte01 + + _Unigram_Letter_Grid_Data_Block08_Datum00_Byte01 + + _Unigram_Letter_Grid_Data_Block08_Datum01_Byte01 + + _Unigram_Letter_Grid_Data_Block08_Datum02_Byte01 + + _Unigram_Letter_Grid_Data_Block08_Datum03_Byte01 + + _Unigram_Letter_Grid_Data_Block08_Datum04_Byte01 + + _Unigram_Letter_Grid_Data_Block09_Datum00_Byte01 + + _Unigram_Letter_Grid_Data_Block09_Datum01_Byte01 + + _Unigram_Letter_Grid_Data_Block09_Datum02_Byte01 + + _Unigram_Letter_Grid_Data_Block09_Datum03_Byte01 + + _Unigram_Letter_Grid_Data_Block09_Datum04_Byte01; +#endif // ULG_D1 + } +} -void GetBlock(uint which_block, out uint data[ULD_BLOCK_WIDTH]) { +#if defined(ULG_D0) && defined(ULG_D1) +void GetBlock(uint which_block, out uint data[ULG_BLOCK_WIDTH]) { [loop] - for (uint i = 0; i < ULD_BLOCK_WIDTH; i++) { - data[i] = ((uint) _Unigram_Letter_Data_Byte00[which_block][i]); - data[i] |= ((uint) _Unigram_Letter_Data_Byte01[which_block][i]) << 8; - } + for (uint i = 0; i < ULG_BLOCK_WIDTH; i++) { + data[i] = ((uint) _Unigram_Letter_Data_Byte00[which_block * ULG_BLOCK_WIDTH + i]); + data[i] |= ((uint) _Unigram_Letter_Data_Byte01[which_block * ULG_BLOCK_WIDTH + i]) << 8; + } } +#endif +#if defined(ULG_VP) // Get the tokens that cover `screen_ptr`. Also return `block_ptr`, the // location where this block of tokens begins. void GetTokens(uint screen_ptr, out uint block_ptr, - out uint tokens[ULD_BLOCK_WIDTH]) { - block_ptr = 0; + out uint tokens[ULG_BLOCK_WIDTH]) { + block_ptr = _Unigram_Letter_Visual_Pointers[0]; uint which_block = 0; [loop] - for (uint i = 0; i < ULD_BLOCK_WIDTH; i++) { - if (screen_ptr >= _Unigram_Letter_Visual_Pointers[i]) { - block_ptr = _Unigram_Letter_Visual_Pointers[i]; - which_block = i; + for (uint i = 1; i < ULG_BLOCK_WIDTH; i++) { + if (screen_ptr < _Unigram_Letter_Visual_Pointers[i]) { + break; } + block_ptr = _Unigram_Letter_Visual_Pointers[i]; + which_block = i; } GetBlock(which_block, tokens); } +#endif uint2 FoldIndex(uint flat_idx, uint img_res) { return uint2(flat_idx % img_res, floor(flat_idx / img_res)); @@ -220,7 +362,7 @@ float2 GetUnigramLutUV(uint idx) // Remap onto [0, 1] x [0, 1]. float2 uv = idx_2d * _Unigram_Letter_Grid_LUT_TexelSize.xy; // Center the UV coordinate in its texel. - uv += _Unigram_Letter_Grid_LUT_TexelSize.x * 0.5; + uv += _Unigram_Letter_Grid_LUT_TexelSize.xy * 0.5; // uvs have 0,0 at bottom left. LUT has 0,0 at top left. yerr. uv.y = 1.0 - uv.y; return uv; @@ -254,27 +396,31 @@ uint GetTokenChar(uint token_offset, uint nth) return chars[nth % 4]; } +#if defined(ULG_VP) && defined(ULG_D0) && defined(ULG_D1) // Get the character which covers the screen position. uint GetChar(uint screen_ptr) { uint block_ptr; - uint tokens[ULD_BLOCK_WIDTH]; + uint tokens[ULG_BLOCK_WIDTH]; GetTokens(screen_ptr, block_ptr, tokens); // Begin scanning at the start of the block. uint start = block_ptr; - uint covering_token = 0; + // The current token is rendered starting at this location. + // In other words, it covers [token_ptr, token_ptr + token_length) uint token_ptr = block_ptr; uint token_offset; - for (uint i = 0; i < ULD_BLOCK_WIDTH; i++) { + for (uint i = 0; i < ULG_BLOCK_WIDTH; i++) { uint token_length; TokenLengthOffset(tokens[i], token_length, token_offset); - if (token_ptr + token_length >= screen_ptr) { - covering_token = tokens[i]; + if (screen_ptr >= token_ptr && + screen_ptr < token_ptr + token_length) { + break; } token_ptr += token_length; } uint nth_char = screen_ptr - token_ptr; return GetTokenChar(token_offset, nth_char); } +#endif struct UnigramLetterGridOutput { float4 albedo; @@ -284,64 +430,93 @@ struct UnigramLetterGridOutput { }; UnigramLetterGridOutput UnigramLetterGrid(v2f i) { - UnigramLetterGridOutput output; - - int2 cell_pos; - int2 font_res = int2(round(_Unigram_Letter_Grid_Tex_Res_X), round(_Unigram_Letter_Grid_Tex_Res_Y)); - int2 grid_res = int2(round(_Unigram_Letter_Grid_Res_X), round(_Unigram_Letter_Grid_Res_Y)); - float2 cell_uv; // uv within each letter cell - - float4 scoff = _Unigram_Letter_Grid_UV_Scale_Offset; - float2 uv = ((i.uv01.xy - 0.5) - scoff.zw) * scoff.xy + 0.5; - - bool in_box = getBoxLoc(uv, 0, 1, grid_res, _Unigram_Letter_Grid_Padding, cell_pos, cell_uv); - cell_pos.y = (grid_res.y - cell_pos.y) - 1; - - //float c = GetChar(cell_pos.x) + '0'; - // DEBUG: show the token offset and length for the first 4 tokens. - uint tok_len, tok_off; - TokenLengthOffset(cell_pos.y, tok_len, tok_off); - float c; - switch (cell_pos.x % 4) { - case 0: - c = tok_off & 0xff; - break; - case 1: - c = (tok_off >> 8) & 0xff; - break; - case 2: - c = (tok_off >> 16) & 0xff; - break; - case 3: - c = tok_len; - break; - } - c += '0'; - - float3 msd = renderInBox(c, uv, cell_uv, _Unigram_Letter_Grid_Glyphs, font_res).rgb; - float sd = median(msd); - - // Calculate screen pixel range - float screen_px_range; - { - float2 tex_size = float2(_Unigram_Letter_Grid_Glyphs_TexelSize.zw); - float2 real_cell_size = floor(tex_size / grid_res); // size of cell in texels - float2 unit_range = _Unigram_Letter_Grid_Screen_Px_Range / real_cell_size; - float2 screen_tex_size = 1 / fwidth(cell_uv); - screen_px_range = max(0.5 * dot(unit_range, screen_tex_size), _Unigram_Letter_Grid_Min_Screen_Px_Range); - } - - float screen_px_distance = screen_px_range * (sd - _Unigram_Letter_Grid_Alpha_Threshold); - float smooth_range = (length(grid_res) / sqrt(screen_px_range)) * _Unigram_Letter_Grid_Blurriness; - float op = smoothstep(-smooth_range, smooth_range, screen_px_distance); - - // Apply blending to output - output.albedo = float4(float3(1,1,1), op * in_box); - output.metallic = 0; - output.roughness = 1; - output.emission = 0; - - return output; + UnigramLetterGridOutput output; + + int2 cell_pos; + int2 font_res = int2(round(_Unigram_Letter_Grid_Tex_Res_X), round(_Unigram_Letter_Grid_Tex_Res_Y)); + int2 grid_res = int2(round(_Unigram_Letter_Grid_Res_X), round(_Unigram_Letter_Grid_Res_Y)); + float2 cell_uv; // uv within each letter cell + + float4 scoff = _Unigram_Letter_Grid_UV_Scale_Offset; + float2 uv = ((i.uv01.xy - 0.5) - scoff.zw) * scoff.xy + 0.5; + + bool in_box = getBoxLoc(uv, 0, 1, grid_res, _Unigram_Letter_Grid_Padding, cell_pos, cell_uv); + cell_pos.y = (grid_res.y - cell_pos.y) - 1; + +#if 1 + float c = GetChar(cell_pos.x); +#elif 0 + float token_offset=65536; + float c = GetTokenChar(token_offset, cell_pos.x); +#elif 0 + float offset = 0; + [branch] + if (i.uv01.x < 0) { + offset = 1; + } + float c0 = _Unigram_Letter_Visual_Pointers[cell_pos.x+offset] + '0'; + float c1 = _Unigram_Letter_Data_Byte00[cell_pos.x+offset] + '0'; + float c2 = _Unigram_Letter_Data_Byte01[cell_pos.x+offset] + '0'; + float c; + switch (cell_pos.y % 3) { + case 0: + c = c0; + break; + case 1: + c = c1; + break; + case 2: + c = c2; + break; + } +#else + // DEBUG: show the token offset and length for the first 4 tokens. + uint tok_len, tok_off; + TokenLengthOffset(cell_pos.y, tok_len, tok_off); + float c; + switch (cell_pos.x % 4) { + case 0: + c = tok_off & 0xff; + break; + case 1: + c = (tok_off >> 8) & 0xff; + break; + case 2: + c = (tok_off >> 16) & 0xff; + break; + case 3: + c = tok_len; + break; + } + c += '0'; +#endif + + float3 msd = renderInBox(c, uv, cell_uv, _Unigram_Letter_Grid_Glyphs, font_res).rgb; + float sd = median(msd); + + // Calculate screen pixel range + float screen_px_range; + { + float2 tex_size = float2(_Unigram_Letter_Grid_Glyphs_TexelSize.zw); + float2 real_cell_size = floor(tex_size / grid_res); // size of cell in texels + float2 unit_range = _Unigram_Letter_Grid_Screen_Px_Range / real_cell_size; + float2 screen_tex_size = 1 / fwidth(cell_uv); + screen_px_range = max(0.5 * dot(unit_range, screen_tex_size), _Unigram_Letter_Grid_Min_Screen_Px_Range); + } + + float screen_px_distance = screen_px_range * (sd - _Unigram_Letter_Grid_Alpha_Threshold); + float smooth_range = (length(grid_res) / sqrt(screen_px_range)) * _Unigram_Letter_Grid_Blurriness; + float op = smoothstep(-smooth_range, smooth_range, screen_px_distance); + + // Apply blending to output + output.albedo.a = 1; + PreventCbufferElision(i, output.albedo.a); + output.albedo = float4(float3(1,1,1), output.albedo.a * op * in_box); + output.metallic = 0; + output.roughness = 1; + output.emission = 0; + + return output; } #endif // _UNIGRAM_LETTER_GRID |
