From 3fb1b7cd8731cdae4f14dd34ec33eb893ec12bf8 Mon Sep 17 00:00:00 2001 From: Orkuncakilkaya Date: Tue, 15 Sep 2026 10:11:31 +0300 Subject: [PATCH] feat(render3d): every shader variant as Vulkan SPIR-V, built ahead of time Vulkan cannot compile GLSL when the game starts, so the programs render3d builds are listed (shaders/variants.list, 45 of them, collected with R3D_PROGRAMS_LOG across the self-tests, the screens, the viewpoints and the debug switches) and `ludic-dev shaders` compiles each into shaders/spv/.vert.spv and .frag.spv with a manifest of what the backend needs: each stage's uniform block and member offsets, the samplers' bindings, the vertex inputs. The GLSL is the renderer's own, assembled as programs.ludic assembles it, through glslang's relaxed Vulkan mode, so gpu_uniform / u_* can write the same uniforms into a block on Vulkan. Bindings are assigned by the tool (glslang's own numbering put several samplers of one stage on binding 0): the vertex block is 0, the fragment block 1, samplers from 2 in name order, shared across both stages. Every stage passes spirv-val; `ludic-dev test` rebuilds and compares wherever the Vulkan SDK is installed. Co-Authored-By: Claude Opus 5 --- packages/ludic.render3d/overlay.ludic | 1 + packages/ludic.render3d/programs.ludic | 15 + .../shaders/spv/01089da8.frag.spv | Bin 0 -> 40020 bytes .../shaders/spv/01089da8.vert.spv | Bin 0 -> 9396 bytes .../shaders/spv/1b654972.frag.spv | Bin 0 -> 3880 bytes .../shaders/spv/1b654972.vert.spv | Bin 0 -> 1716 bytes .../shaders/spv/1ce5c5d1.frag.spv | Bin 0 -> 42004 bytes .../shaders/spv/1ce5c5d1.vert.spv | Bin 0 -> 10792 bytes .../shaders/spv/1f95f31b.frag.spv | Bin 0 -> 85684 bytes .../shaders/spv/1f95f31b.vert.spv | Bin 0 -> 7708 bytes .../shaders/spv/1fde9cd2.frag.spv | Bin 0 -> 40020 bytes .../shaders/spv/1fde9cd2.vert.spv | Bin 0 -> 4896 bytes .../shaders/spv/254e7887.frag.spv | Bin 0 -> 37432 bytes .../shaders/spv/254e7887.vert.spv | Bin 0 -> 9740 bytes .../shaders/spv/2e2908c8.frag.spv | Bin 0 -> 87584 bytes .../shaders/spv/2e2908c8.vert.spv | Bin 0 -> 7708 bytes .../shaders/spv/2ee6d2e3.frag.spv | Bin 0 -> 4632 bytes .../shaders/spv/2ee6d2e3.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/3733fc38.frag.spv | Bin 0 -> 45140 bytes .../shaders/spv/3733fc38.vert.spv | Bin 0 -> 4152 bytes .../shaders/spv/3b183d8f.frag.spv | Bin 0 -> 40748 bytes .../shaders/spv/3b183d8f.vert.spv | Bin 0 -> 10792 bytes .../shaders/spv/3e4b62f9.frag.spv | Bin 0 -> 4856 bytes .../shaders/spv/3e4b62f9.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/428caa3a.frag.spv | Bin 0 -> 16180 bytes .../shaders/spv/428caa3a.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/439a2253.frag.spv | Bin 0 -> 4192 bytes .../shaders/spv/439a2253.vert.spv | Bin 0 -> 9740 bytes .../shaders/spv/46e2325c.frag.spv | Bin 0 -> 39664 bytes .../shaders/spv/46e2325c.vert.spv | Bin 0 -> 2244 bytes .../shaders/spv/4a8e9f28.frag.spv | Bin 0 -> 8712 bytes .../shaders/spv/4a8e9f28.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/4be7acd9.frag.spv | Bin 0 -> 16780 bytes .../shaders/spv/4be7acd9.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/4cf96468.frag.spv | Bin 0 -> 6440 bytes .../shaders/spv/4cf96468.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/4d4fa91b.frag.spv | Bin 0 -> 4168 bytes .../shaders/spv/4d4fa91b.vert.spv | Bin 0 -> 4052 bytes .../shaders/spv/4dda406a.frag.spv | Bin 0 -> 41168 bytes .../shaders/spv/4dda406a.vert.spv | Bin 0 -> 10792 bytes .../shaders/spv/512004a1.frag.spv | Bin 0 -> 2680 bytes .../shaders/spv/512004a1.vert.spv | Bin 0 -> 10736 bytes .../shaders/spv/638623c2.frag.spv | Bin 0 -> 11396 bytes .../shaders/spv/638623c2.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/676965ab.frag.spv | Bin 0 -> 13148 bytes .../shaders/spv/676965ab.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/725523d9.frag.spv | Bin 0 -> 8276 bytes .../shaders/spv/725523d9.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/79b77ed9.frag.spv | Bin 0 -> 42436 bytes .../shaders/spv/79b77ed9.vert.spv | Bin 0 -> 11080 bytes .../shaders/spv/7ed7de52.frag.spv | Bin 0 -> 45420 bytes .../shaders/spv/7ed7de52.vert.spv | Bin 0 -> 23312 bytes .../shaders/spv/858f5089.frag.spv | Bin 0 -> 8564 bytes .../shaders/spv/858f5089.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/86f427b0.frag.spv | Bin 0 -> 6244 bytes .../shaders/spv/86f427b0.vert.spv | Bin 0 -> 9396 bytes .../shaders/spv/9068df1c.frag.spv | Bin 0 -> 2984 bytes .../shaders/spv/9068df1c.vert.spv | Bin 0 -> 5512 bytes .../shaders/spv/9d3e2ddd.frag.spv | Bin 0 -> 8888 bytes .../shaders/spv/9d3e2ddd.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/9dce3246.frag.spv | Bin 0 -> 4192 bytes .../shaders/spv/9dce3246.vert.spv | Bin 0 -> 9396 bytes .../shaders/spv/a45356c7.frag.spv | Bin 0 -> 7752 bytes .../shaders/spv/a45356c7.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/a5ad521e.frag.spv | Bin 0 -> 40700 bytes .../shaders/spv/a5ad521e.vert.spv | Bin 0 -> 4896 bytes .../shaders/spv/a64015f2.frag.spv | Bin 0 -> 3280 bytes .../shaders/spv/a64015f2.vert.spv | Bin 0 -> 4824 bytes .../shaders/spv/b4587cd4.frag.spv | Bin 0 -> 47912 bytes .../shaders/spv/b4587cd4.vert.spv | Bin 0 -> 11136 bytes .../shaders/spv/b79a1f4e.frag.spv | Bin 0 -> 2680 bytes .../shaders/spv/b79a1f4e.vert.spv | Bin 0 -> 4824 bytes .../shaders/spv/b964507f.frag.spv | Bin 0 -> 3280 bytes .../shaders/spv/b964507f.vert.spv | Bin 0 -> 10736 bytes .../shaders/spv/b9fc2041.frag.spv | Bin 0 -> 40020 bytes .../shaders/spv/b9fc2041.vert.spv | Bin 0 -> 10792 bytes .../shaders/spv/bf3151c8.frag.spv | Bin 0 -> 18856 bytes .../shaders/spv/bf3151c8.vert.spv | Bin 0 -> 7708 bytes .../shaders/spv/bfa15301.frag.spv | Bin 0 -> 3932 bytes .../shaders/spv/bfa15301.vert.spv | Bin 0 -> 10792 bytes .../shaders/spv/c57b4f14.frag.spv | Bin 0 -> 5120 bytes .../shaders/spv/c57b4f14.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/e18e40c9.frag.spv | Bin 0 -> 8424 bytes .../shaders/spv/e18e40c9.vert.spv | Bin 0 -> 1316 bytes .../shaders/spv/e9b6300c.frag.spv | Bin 0 -> 3296 bytes .../shaders/spv/e9b6300c.vert.spv | Bin 0 -> 5512 bytes .../shaders/spv/f34dce08.frag.spv | Bin 0 -> 2680 bytes .../shaders/spv/f34dce08.vert.spv | Bin 0 -> 9340 bytes .../shaders/spv/f4382918.frag.spv | Bin 0 -> 85684 bytes .../shaders/spv/f4382918.vert.spv | Bin 0 -> 7708 bytes .../shaders/spv/f4a2b586.frag.spv | Bin 0 -> 45420 bytes .../shaders/spv/f4a2b586.vert.spv | Bin 0 -> 11808 bytes .../ludic.render3d/shaders/spv/manifest.txt | 2358 +++++++++++++++++ packages/ludic.render3d/shaders/variants.list | 49 + tools/ludic-cli/dev.ludic | 3 + tools/ludic-cli/shaders.ludic | 223 ++ tools/ludic-cli/test.ludic | 8 + 97 files changed, 2657 insertions(+) create mode 100644 packages/ludic.render3d/shaders/spv/01089da8.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/01089da8.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/1b654972.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/1b654972.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/1ce5c5d1.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/1ce5c5d1.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/1f95f31b.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/1f95f31b.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/1fde9cd2.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/1fde9cd2.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/254e7887.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/254e7887.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/2e2908c8.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/2e2908c8.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/2ee6d2e3.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/2ee6d2e3.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/3733fc38.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/3733fc38.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/3b183d8f.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/3b183d8f.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/3e4b62f9.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/3e4b62f9.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/428caa3a.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/428caa3a.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/439a2253.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/439a2253.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/46e2325c.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/46e2325c.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/4a8e9f28.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/4a8e9f28.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/4be7acd9.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/4be7acd9.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/4cf96468.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/4cf96468.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/4d4fa91b.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/4d4fa91b.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/4dda406a.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/4dda406a.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/512004a1.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/512004a1.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/638623c2.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/638623c2.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/676965ab.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/676965ab.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/725523d9.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/725523d9.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/79b77ed9.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/79b77ed9.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/7ed7de52.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/7ed7de52.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/858f5089.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/858f5089.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/86f427b0.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/86f427b0.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/9068df1c.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/9068df1c.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/9d3e2ddd.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/9d3e2ddd.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/9dce3246.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/9dce3246.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/a45356c7.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/a45356c7.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/a5ad521e.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/a5ad521e.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/a64015f2.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/a64015f2.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/b4587cd4.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/b4587cd4.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/b79a1f4e.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/b79a1f4e.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/b964507f.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/b964507f.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/b9fc2041.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/b9fc2041.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/bf3151c8.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/bf3151c8.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/bfa15301.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/bfa15301.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/c57b4f14.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/c57b4f14.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/e18e40c9.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/e18e40c9.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/e9b6300c.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/e9b6300c.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/f34dce08.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/f34dce08.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/f4382918.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/f4382918.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/f4a2b586.frag.spv create mode 100644 packages/ludic.render3d/shaders/spv/f4a2b586.vert.spv create mode 100644 packages/ludic.render3d/shaders/spv/manifest.txt create mode 100644 packages/ludic.render3d/shaders/variants.list create mode 100644 tools/ludic-cli/shaders.ludic diff --git a/packages/ludic.render3d/overlay.ludic b/packages/ludic.render3d/overlay.ludic index 55623ebc..a2898f28 100644 --- a/packages/ludic.render3d/overlay.ludic +++ b/packages/ludic.render3d/overlay.ludic @@ -52,6 +52,7 @@ var ov_clip_w: int = 0 var ov_clip_h: int = 0 function overlay_init(font_dir: string) -> bool { + r3d_program_log("overlay.vert", "overlay.frag", "") ov_prog = gl_program("#version 410 core\n" + r3d_shader_file("overlay.vert"), "#version 410 core\n" + r3d_shader_file("overlay.frag")) if ov_prog == 0 { print("overlay: program failed"); return false } ov_vao = gl_vao() diff --git a/packages/ludic.render3d/programs.ludic b/packages/ludic.render3d/programs.ludic index e285a457..4c6bf584 100644 --- a/packages/ludic.render3d/programs.ludic +++ b/packages/ludic.render3d/programs.ludic @@ -65,7 +65,22 @@ function r3d_program_tess(vs: string, tcs: string, tes: string, fs: string, defi } # Build a program from a vertex + fragment file pair (defines apply to both). +# R3D_PROGRAMS_LOG=: append every program built (vertex, fragment, defines) - the list a +# backend that cannot compile shaders at run time (Vulkan: SPIR-V is built ahead) must cover +var r3d_prog_log: int = -1 +function r3d_program_log(vs: string, fs: string, defines: string) -> void { + if r3d_prog_log < 0 { r3d_prog_log = 0; if Os.has_env("R3D_PROGRAMS_LOG") { r3d_prog_log = 1 } } + if r3d_prog_log == 0 { return } + let f = file_open(Os.env("R3D_PROGRAMS_LOG"), "ab") + if f == null { return } + # one line per program: the defines' newlines become ';' so a variant is one line + let defs = Text.replace(`{r3d_global_defs}{defines}`, "\n", ";") + let line = `{vs}|{fs}|{defs}\n` + file_write(f, line, len(line)) + file_close(f) +} function r3d_program(vs: string, fs: string, defines: string) -> int { + r3d_program_log(vs, fs, defines) let p = gl_program(r3d_shader_src(vs, defines, false), r3d_shader_src(fs, defines, true)) if p == 0 { print(`r3d: program failed: {vs} + {fs}`) } return p diff --git a/packages/ludic.render3d/shaders/spv/01089da8.frag.spv b/packages/ludic.render3d/shaders/spv/01089da8.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..9451ae2b5faf407ca775166115f207e8230ad08f GIT binary patch literal 40020 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/01089da8.vert.spv b/packages/ludic.render3d/shaders/spv/01089da8.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..f68be1d7b51d56445fb9c5b28a08310690ec9f9e GIT binary patch literal 9396 zcmZ9Q2Y6NW8OAS!Fl31$iV9xDJy1YFMKB;rP?RVRRP-h$m*h&48*c^*%GA~_t#)en z-t&1{t!-^eZL1c$_q46udss)S_V+vYeBnIjn9u+FzTf!obB{KRo;$8k7*&{97+<(; zR3Uk$6-J{J3bqSqClw2oy zfv)5F7tCKWv~j@_^hRTS@UTw40f! zF^k0W>$q9Gu#Q{AERr$n!To9c25}nS3a+Mlw>Z^5WenyVU8_o|R*f-z7T%ut8VbX- zeF+|utY=%PuNrx-ZDoWv6dr}U_||mI+e*E)o|L=(LnD2RN%mr>)HT@6pj_8ctaoR3 zX=Qn1+hF&=<-L`S)mqPr?rQs{0w^nrEWK= zG{oQ|-xD)f8mRP?_i66$U}^w?I?Gb?7)3(aDpkG3~py*)MtQesV&33TSKM(a+y_WWR_Jpd)!j4T~V%iNqC&Qx{tnUe`TOjb*;uFx~@d8 z^bV}6Y+>ijsr%e#eCKvo`c_u@2ikhu%OgJbS|0~&#OE4#*L@t1cb=H~U{?2bIHE>s z`yN1F-CM7jdJ2VA>0OykzUM~nJ4Ws!f0$No|8nnv+-~LGgKWO>TXZdiu9vj@R++qSfafM1Q-% zKIVU#)>z|~r2PI=)BiwBPu!PblT z$5OxbyodVSBmHvUTWXR2eX#3q{0phiF&Z!Ty=MF&a65LcuE%V?kVZL>jG33WI5+C{ zF`9V$GuJ-k-fK0-4yM$XDy`0*R=S{DAJ z6aU_&!56~syLaZYlNhyYej0o?t-5W*oe5vKaA8u{@vVTnZ~EmI!o4SscMaINIR5ar zpm{HxudVMTpQyh9e%GF-&Nlygu&3w7Esd?=89cU10u3_FV3JOfB}* z_n7gA6WNx6b^B<|(Qh5OzrkuT&l;S+g7N(T*FizPoz_@u%Xh;0 zOV-bN@?EJG+;^NYi+I0S%X8;roo7(|4Kmhy?02wx65Ma!;NG+09Dg*&{U*!C`&|~? z`hJ@Qx1Qf;S?>2)aNmD^qh-0@Wb);V+V{d|Fy9rvkCrkA*ZV zt*?U}bMS9~9a9Uny$k;S8>4Q%?;*8_{}$MI$Lo538ym*5>+_vdznz$|;O}DQsYjjf zfgMNG`2lzs^F0?aes`!xogabCQ{S1^{xR74`l8lPz{6N}4}J<)kJ>*2+yC}-Pk#

tyHgSGaoA`5V|g z^_a)s!PeIoYx@tdwX*y3Pq=#Y|1WTMfBp?uiyBXX^Yi)-ntF`qX|Q?fQTG{ec72|O z=jZhtntIgvFW5ZwnAiWn*4G#N^E}x3Iv4$M|J21V(jJRB2Y)ZeV*aL%!D4*lQvE?< z{LS1CQ}eghtLiN57P!e1a8c3#-o2G*cf&5eYdMc{9$0VwY;Hy zR~-&k(|r8xnZ#WgOFIiqc?D)%tjlb0eqD}0Q;&5ig7fP#2TeWJ;7G7}>Y*J4R-cPa zVvLUC7%+c@<1qbx+uXr?^&Ja#oW?j`f4kJ;EF1?`o5WX(@yCPt<9D2T0N2^`6lY7n zbJ%JO*tN>u`;*}65p!}Hlf8%Y(9~m2r-0RFQ8V&Rg0o_+!?{=P`yw!Zh4V1|&d1+v_1OExVDD-0GvLNVe`kUH{tI)>ti1${zrsAs8s-@r zeV+~HFX`J@`?eqTXE{-Ew``;DW#D0A9db}6TgR8kOz86-3eS9zIJ0DZ?y&#UUt_Ih~TE9aVz|}M# z$LToMz%Rla$Ay^r-nolY-8(B^3%7=PjQ=!>{3z|LE9O^v$}%~*Y|X)~=_jQeV^n!c-OXFw5cAw32407WMMigG0z*o6--|zt=uvAzV8O#Pn*5BJ!tC2Z=#hO-%mS$xsNr>`X1y#Og&>{qGsI zY1p_7pPA#u9G{!x$K?2;9BlFMjura;|^dF8HqaOErHaPBgyl0L;GghDdxUOnZ zcMe$1_quhD#MsgV>occFs~$N=fwMVB!_9FW^qJ%Ss7H>!<3%jSdOXvB*0KoXr`;Q)_gQ|W24pru=Vss?rGqKsl_|@ zbhxqlTm#RfTJ(PgxQO}RqptOtn3{DW<}7d#i@ukDjZ=@l&jv3}E!J)+T;2Gnbq=_Q zMSo3TwPjeuEC&~{=x+tM2~&@lbHPO{Vpf8UQ{S1+#cvSDpfARGJ~+QdtI&+q=NfrW z)uOM};9`bfkn-sJLbx&Nk+UWja}nG)^%%>=;QUzDq8Y2tu{6`FMcqrl?qSrp6r4XV z>(JDVjl9di&MWrjaD7V32cnI`5S1}BEAjmosPA*9-Lo`b~NMkMP3KkaRx7g9b4R)jbLNc zV=SFuYw3&ry1=tii?|BhSbb6d2Jkd2>Td!Yr|!I3Y1JaW2b`T(FFfWI{Z!G6(-(Pt zVAn7BjbPU-`mKSDQI9(PU~B1%c@2Q`^BP1mR$tT~0%zy78E%}q^XjHmGk!enP1s~? zIrnob?JZa1E*ToL&xh-q|{@fU8GeuLQSZ**U!mt{!u` z6KtM(%;_$${prik>D6fZeWIVc!R~){Ecd|GV@|IDo2$Mvo#$)8&Q)L3dL7vH$&UH; zaP_G52C%v6u|97EXV>Rmcq^72(|vID=<7{j*D%}Ho8juQK5qe=rylF`RM^Hxg3VQrIlT*C4aQgJ}AFqMr|e^LzebH1(L%N5JN)?@agnqhRN%FKT@ZY_05=KMq%qTAu)$ Ts~)vJ3HB`Ldx25Q{TBZ}7A-Rk literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/1b654972.frag.spv b/packages/ludic.render3d/shaders/spv/1b654972.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..2008c3384d78935e3884a9e57f6d5391e5eb3951 GIT binary patch literal 3880 zcmZvd%X1V}6o;FHgkY3_2`@p+!xs-@R6rC71EL8UO%M?uRJEO%o=g{=>8a_NNXm^H zcP`lC%D=#3?aDvEg?nAFbm78paXU=ojX0Hq zoqfdF>)BdZi<^1U*>rn%x-*c&ZiuZBCu@yPSdY>)tJj5l-+id(vl``bpN~3TO_Nqg z$lmuJc06yz)ljKSwWGhMc&Gg4X4uYnJG=8PwVNwBsTf zc30kA_kkD5lWwsdb+$&-to?V-c%T1o&qUwm9?4?u?el8ZoIy3_PxjGRoIUnqfcQ!dyF21-SZgr1N+5e)DY}f zk5Nak-#kVw!G8A`y$HMSF?td9w-_}^A5KYB0zG|NYX)|D)30%Q6W#pjP4*8;@JILe z)1%m_E9~gLoqolx<2XCIZ>N8;Q-kbB_wDpDcIpv3x^Jhiu~UcG(ak=tuMRjn|K*D_ z?9+-^lal@Nr>4<4|D^sB2ZkKfe}C#0`!bSr+yi*v!zb`GWZ@fN<7Ym zKlMp0IR5C=C+vW9>W#B-zPGm6Cy8T9>b3ST{ z^N}yUM?FnSIL{GP6Tee@gSf9 zwDCRkmo&2%-D-k9Vo+mmYsN-A#@3k{TN1~Qc<*KezmpI3^K{9mt3MRuSq4Bm+Qau(|81quGtnVsdulH)^-os@6~-{(}xzmyN>KP_P&{7T7Q z)|&4#jGfUM#yO0=QZml9qFZo}S0(JnA3O2MCH;f#Pu+r?aDVb(_kT@m|NiHs!w`nu z-~8vrxSQqcyw)&;VgB5cd{!jH#LsegLF=tKyy)zO4>^2YvNea7N^UuPLpuB5mYX-V ou1FZh7PPKN{2VTpY(TT+@UqtI#~(ZKEr;0r9Fog_6!DDYU)DrH-2eap literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/1b654972.vert.spv b/packages/ludic.render3d/shaders/spv/1b654972.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..85cdfd799e7cdd44895aedc1a6b23038bb70a445 GIT binary patch literal 1716 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/1ce5c5d1.vert.spv b/packages/ludic.render3d/shaders/spv/1ce5c5d1.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..45214a4e56a8643e8f51eeb2194e7eca6cf195d5 GIT binary patch literal 10792 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 O1sl76!(Z&*@c%CXS?{y} literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/1f95f31b.vert.spv b/packages/ludic.render3d/shaders/spv/1f95f31b.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..665a4db794a761d76ff3de2608ca787a87cfc83f GIT binary patch literal 7708 zcmZ9P37A%86~`~j41??sz+(*uJo@f6u~Y%NOZ5Ive7W+s5GKGZg7=ul9&PiYy?} zLS!j&DRLPyg#QL(yARwzL@}m;eT>1@*-_os*}tQ^R_pJa*SBQxnge^6tbuPJb`)!W z$DtgL1`iyl^W(t19ep`JMIS`}3hUm4XR}rlp2K>OPV`wJUR=jp#Y^kBMa&TN*$M7T z{=3A}<9g4pO?&NU9 z_lxrxHDnKf=_x;9U~Yei)j{d|M^;7v9-5tG-P_x~+k2>O2F-US+d1I4 zNA)mMGNx{G{@6BkRrhbM_Vu^-?Cv;a^BlAdbakDw*^BRlkNff6z^A^MZ9RM3Q3JVs zU*Na()N>|FmTgJ*X+}K-`jGt0-N#lUy<0xscb~2J%URNM4j*;Tb8Lw-uFlot%v+38 zFUQFl*MdZTdzZVVzT^g zy=eEIoStF*o~Sz)XX<^hFZ+qRQUB7N=Jb_w4L@V#h7>rloc+5O&s=?e(miYS1;}`+ znqwvzj1x};Ig<)9B^#diq;B2f6Z%yAn=sgWg?hu2liVcqGgyr`w{~mmD?gKdN3v=+ zPTK^0#TdQ^p*Ym6AAJm*5nqA9k57srG_UjP$>;7(F)#e#Qy<=b>XYdhLeVxIYr29K2HyQmd zR&y9{zPnk?=NZi)%6Cj%KgB%yC^2vAd;;AW>2Do%?{dt|8Qz1$*?lV6qA%^AMSO3} z_qk-ZPV{{uaq9Yi196}Fe>2(KQ_SJJV4i08 z#}V(PcTpeD%tNFF%i%!~1Fu@5C1n`OB$p4!`GeiVxd5 zwWlwE>w9X<_w;4-$af<7xv%>WZLzPffQ^+un)dotu(hRy=nfTCug>GEL{2FY`bx8R91}xvgguExeMa*NYHeYaXI~F5+ErPya#Omp&sob-Di{`Y%AV zA480B7JfgpI}6{#N0B>`c!&O%xaq7T$)=CV%qP|!zJnwY@3gs3s-j2k!C<+V`w(>N zNBmH9edHsi0qlO_U28;_)7Ki>!E%a^OVm39#hm8zE{s4o z-#y94d5(mWk9TntSWby|b~M;r+TzT|fMahb3i-yuYl}II0~;@YlzlkoGr{g#n|=G< z$i=?LgXP?}->tLItyTPPO@Nb+Sxy8SCm;Pz0vlKSZcT=hkMGtLuxBhEGdLS8ufz zIQsH$A9d^dH_8gcbMS8${qF*=OnmsPPCowq5X8F>Aoa$;X~90lTO8wyy=t z`2@Evanix9Pn^FEE$KI-8P0h9wfkMUmD)G3Za}xbKJIxV>n6m%&%9sGL|wm=*`RC{ z;@?o7hiB?D5?P7gaMn=?k6;~*__x(q*7#d$9C%nkpHk8*C4F{DpHtFTl=Q77y``k@ zEa|&SdRs~FO1kIL1U?h7$35uwF(GmLn8`%&q{KP98a{p(CMVum+P}K_w4IGOr_iT@ z_3=H{J`K@FKHkq6;CMgdJ8=%2zS^wgT;(F~Ot4)1KFk7hq}=Ei1GKXg2Z0W2YcU?*z0_-yuK0V?_LFoxC_ALxC`Or^^N%~1e;G=jvIC*^|*AlS#v_{0=#HsDUkx6IME+~Q z`pMf@8>?LScY}+4^`J*zQKtr{pSFnG4|aZ`KNIZCqHZr(ANk1B2R4_s=&K)G?rQ)} zUu}{90JzxKL3I7(?W>DbPX8v>L&zv(1Mlaxtj|W;ki&>RjjYc>qPg}XCTi~?&M4el~o_}#Kx1q~N zPcH)-D}OZg`EszmYKvU206U-Jo?nSBAGuxyHda37^J;K$KCeM{Lysg o9{}5{w#fBCu(^tRz5`u8a(xJFtbFA9Fxb1G?NN5E?%(472e=}etpET3 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/1fde9cd2.frag.spv b/packages/ludic.render3d/shaders/spv/1fde9cd2.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..9451ae2b5faf407ca775166115f207e8230ad08f GIT binary patch literal 40020 zcmZ{t2b^6+8TK#iCImuLdJiBS=~Y@1I)oZ}TQ=EEvard9G(u14NN)n63j{%>3PwPx ziWC)4M8Sexq=+C*K)?V0-1BTE_xry4+hLyPdEa^GojEge&bgbAw)t0IpwXDGF}N|P zapS;7_4z_$ev}5vRHhElUSKsjmbWU7* z+L%qY>DhRjF&l4#jDK5W5$dVans`z0=vrTldQ$fodckDJ;vseAO40}pC?>9ZVqSLHvbu@d#eDu;;l&--Iic(S7wgN| z%UBx}u{LapwHchbD#leMR}IQBZGt^x+Em;>rh$#E;X8Hgy6Yip<6d0nEz$Sx+pQYM zR^U#GbG-xgK^-H<_e>dAx0pM3+g5E3s@iN<;Sm+y9-Q_&fp_T`IeJ`g&*)=~P^^*R z*bb`u+z~v6NgB{tu(3zkW`C1U!?}I$iqGDC&AxZ*Z`cp7~egm)3JK3j@Q51 zzwM3b;O2GJHlT3=eBLn)YRu4o;>6w)cIg}2e_S+|Y!&Ym?4$d7!R?Jx!E^I$Z=442 z>X~ec*cWV^Lp{2Wt2MTJ!jxSmb&f9w&r&wOGx2eKi_fBNuIaYM+2H1xJ)m)cxFebC zJFxLgrSw8sl8JUoX|6-Z_@bTy?vv(paa=E z+Wk!JsCP!kG*jre%{Py2^2FYrDg8F@Npssxa-99Pws~w*+-}$gR{gbCHdbOsSC7{^ zI=4Z`iOvl7P3qUV9ajB}?`R&>138P$+k4~Gj)}Q7bo6#l>+WT-WL$$P`7#plCUzLIzrTem zee%Ta(H$H{y>7q$Hq|}2gA>1FQlASXu@*V3Y~H!%ZL`E&{r_sS+0_9@Vttz&nQzn-1T#{mFxBss(Eha;xoupt`#?~{)?G04XJG1<9jAg z?wLlP?%iLZ`4PWPJ(XSLetZKwcR#i_-h_`O>;!HO+CQAf-qskzhU=ZyjI+3Sqb6QL zym1pR4{n|f?Tr<{bK?(atg3D9o~ZKK7LD#IJRCe}lP2B`oO5z7aOadMmCxA1e|+IT zsqjC(@IM#ayvMdR?f_@(_kri;*50_kg+B-{=i>1e`xEo05b2BLHC0DJF-R(!g){{_6oa^w>^k5$6fhTig6JG@OWDsAaUbSy)T&>>ORq1zt zy+`YFAK2r{``Gj96S}&mcaEwK9mn!2TABN6E&R9h@V3Sq@G0CNZTpXTZ0(J=;XZvg z$JEyN7=C=cz6W#Am;Ef#!WWx|w>6fB=UrrHaC4jk8oQ`>@FY{;<{aamXx_iYM}kM! zxEnlW`bJf*W58wqlUw+-7JmFZysdE}Jac*>c<(-+f7=_EgXcbHwKZ;nH*;-o+zc-J zyrqTT*1~UZ;djEjySQ1_Tr zef}4m>#$)v&q1}m1vqEI*5I_=9-L?OohsaXPuRV}&3BHy!Fd-r2;5o6JPh1?FKBBV z4c?{F+Z&zWavn#w@G)@jrnpzvWNeGQr-k>n@Chw^;yk>qaWeeau4e2rz})C~yKVBz zTYRsA@4{wxZCpK%t-Ud;gwDbWwyB<_+ZvyOn`^1PvEYDtujAkrzDNsSyoG8dK!8?S!UnM;_~| zwx`3(b$Lb$KMT%NYJaS2;aw9qu5!4c!kbiaZWd3S#$CG^_tqxo4%XziH+?5|PnuZy zf3xBn*SxK9H~fIgx2^F#@bJ3bQ{bKn)5dq!=e6G@P3vgBi8v4M!kh0D?bUZo(>f+h zYQ7H)tiErm?o)ldl5~#lnZN`&Uw#KQtz+EO-g*w^ALtzCU50Nz;PbvK4QMQhHoklE zxM95$$7QcCWxG1hrNL8q#`me(KKzbrT8F2Oysfb!d`flyYj3Pn`6kb{#+uqjO{m(f z1un10IxT#?d3al612|!;J~jn+GJ5;p3_P_%*0c@R#%kB*cW=`=CUGitl9MtAYK0N863Qeo5`ezPxjV`#x#BQd=GFC)#{q zwV{A$##Otd(AsM4^+Mywto$~jLE4%_6|c}7r`o=SW^QUn6q<9Xc66aFSZiH{=6kGu z;|k4pShe0lTe#LH7Mky^`uQxJoENP%pLwJCzN+5^h2~tUT~cVir>fmlXkVp@rrBC4{4{Wxc3m_yLYt9%lO_?^e64g?tMgms(xPjdk@eae|c&5K483z$FooF$NoL* zZ10{5FWY2JPE(2M=7N;Kn%mj>a|7(!VFFRz1K+Yq>WTFtT)+<6~DnXjtbtA4dL z_4aD+5@S^&xrdEs9CLJT?Z-W)ZXWjI{<59=s&My~SY7Vk(B9+&syT|?nD(_6bu|6r zy9L<3^oy@w$d_7EAJ7&Z1 z=i1tNzjF^`j5eDztDd{3`+uYrDNP^+ac$F&?+_B?8H z@|vdrD{Q?2SMjUV`gtwSSLCC%P0hXE`tjOdMr}OTt!>Z40il6mi zj`wzoT8eA(+wdV2Kem(KRk6AJUbt&IaUTS~w%9X6!{;>pcS!q(;Epx+?^pI2kA*+l zE*Y^Sew=Q_n$|F5z@?V~NeWv#AH+ImI=Tbr}~ z(VUA{;9e(laxUcFLvrnm@oS3reEnaoZN|y9c?Ue}n&q|+e-FOQcVFBpYv_Hr+U&Z- z?_>C^Yp&^U_X+%@CGYCz|ADV_#A4eg&ZltO=%+1l{s(R}W;`11Liow^BdR#&zYyGc zG5^6}$L1Wkc2ZzDKA{rztN$$e>Cu-EFc!oI!Ee4PKGV5w`_c%D5Y5Xv*`l&1ez^gj(ux>Y={ zmwZO8xz~MOwLhvV{)IJHPrlcJa~8N(Zi0^)v*yr@_f|NcetuiUAMd|@KG%A-C*SYX z+_U2Wu>Gqg-h<$o?VIsMeSB^F)(Bn!cZe>!Y4FPk~X{+s!fk z0B%h6`1}yO*x=3k^CAHlAl^!FDypZ>k}dBukejeS8D;zF<7vTfQg0bjOmZ@iV@OHsUFpV7aUkAnNoV!RHp@$4u5*P^jk`}g7vRr?|R`QHPdbA@!#NwP z`BFas{?>k5ZI?6uaJc7ZO4?09Z#0Hh<8Zvw;XeCnm!A*!ew}&ry~I!2zXYe>{x$n^ z_&P^i+~4mn;QDy+wWZy^)EYCM2;ag^8Z&lIzFWf8Qj*V3Xt^%dJ#e2}6X!Yj^N(Dx zp4aiuV7jf&c=MP09;K%JuQkp*8t)A>pEKj{dsh7aUE^7`UG96AcKwa#dzU=_ox!;Y3>+g4?CHK40 zaNGOcXvzJ4wB&w2T5`W14L82ukCxo;M@#Paqb2wI(UPB1aP#r|(b(mFKN@a-em@$n z-S0!?!?^11rN2?!uMeSZ$I8Im_-to;js1QI_I&t8%|8OG znZqa4e#}ArV~U#niZhl^!Ja9P)?@h$tTvmrpWvG|)*mo?_WL>5nC7p)@$B<|)PC$! zpZ`+S>{FbvI?;~hH2fUvd`>(iW0c!>+FGY=8#b?**XLE5wZpwW-ml^_08RZ2e2hO3 zY&&)5m#VP<|8ahY*LM4^_B*<i*4RGF4hE~IuZ6+pvmb4MjYas6nxANk z)|&lATddYRllEm^FQZ-@&G!0h_g(r@;%fT>+`jcmj4y)Kjp1AZ8%yvXb;sj*B^P^E z8PB|*rd|f_y+ZDuSRU-X;o!Qz6~Owa+upNHE$vqZd+$j5RlsHYA#i=v_u;A9>#!fz>U3GUvwk{-Hg2ZVk52@UMWK zLpiXq9shBUEX?(kZ_j^>w=u=%0-pu+$+g=7tWS#V9RE->+igIxPy5j~b1|&8?_B$4 zF4WECGV~q6uE~sZC$O5uPdU!vXxek8?*evT?@XPs?Fv?Zh->5-w;Nc^wdmQl2iT8i zo3`C4YMyQ4#Mu+Z@Btdg@jVp$ zF`D+7b>4@8eQ(j0J$^XYezhf!BfwrGW0}{HU^RUmn>Mxh9}Uj_?EuST8wJk3?*z*; zzAo?}iZMr1%iY^ljc)$aOKm*cY1i*4YHgYKv0&%@A$${e99+HfVRDWEJJ&tb@i`W( zp84tp+fF@eWjxrqU5}#O?}J<~<}n7YJ>#4R&K&fC<*`iyyN_*m9JM^QDPZSQ+hl5a za-0UXA8k{q<>KS1XOlhxwY9`PhfCY-8LB)cR+fGr*2B*W`4t*JNhxL)AEg|EOneo(Z;{dg7b~ zHulVVZJrHQ(>ML9#s3_z{@1a`{NDatu-YuR=gN6tHP4jusr`7SsDG8B=9wZ+{M+$y zU&m&h{w@UDpS~AR%VWD3oHcS0Sgwt#aVh_qpJKa9sO9bj=lwG93~J-qPJ43EmiS)- zr|&Dl@~!K6x(e*~C+g|*YVeYjJilB6*3VD0S+(Xqh<0tQaTNDID_w_Xd;PT=+Z?Z; z*7i9&X)B8FebDNAUMf}=_d@)9zw&qHV$ZTgYwUZ2zf<)Z_+75Kf0g<|iodIod+)u7 zVtcvoy%$rA(FeD`OKL4+zZ7oVjOlW)G5kck0<7lP^GtXpSYK_%G*0}#2G;Jo?4k5( zzgJPrRbBgk8HZZt!t3jG@#A;Nj^B49zh`#Ley3&5`dwS=SPopFh<;bXz+1ME6b*Zw-STKahl+&Y%G(bVJf&)TQVY`|#B${w`eZoUabnC*%7P*zx5#V-2uAexj{eYsy)B zYeDqYW{jM-YlH1md(PW+!0Hx1R-U)Xab1Km$MxW4j_bpnljQSdus(jGZBT2<$#Fx7 zzS@kD95({nr}pHyF<9N=$0|8`-8VsS?PT6I1v_uKzMFydQBVJygVj^AKes^Rr`n&+ zjeYCudh-6WCAjtevlW_p&Y!Kp#!+`)%gcSe9&!AvMajPQY!6c>s!}f5;;Ges2&RoYkfYrl?g3T%4^9_URqwZQZ2etU`2v!T< zspePIdvj;FKI++HyMpD zah(@6;~HmQa2aPmI6u|duPtZ&{>#jlw3&<7 zL@i@H80@vq`aA^w1U$t!UZ+FR_0^v1c{teXc^Gx#9RXI)nmiJ0TlM%H1$M24cfg&a zT(hIW`l#ocb%Ob+u9^1P;LP_Zxc%s3Oy_ts*s;c^3#^~IdqZCCjg4sIr`#J~hG%bV zP~Z*0?hUU?_QqJ^m3w1+!QC5^3hv%GzJ;G#^UQ4z+_@b`oq0M2tR8+W*c`K0dg1!0 zd#%k$E&db0YT!Y4|KMu@KHSgN9R~(?4W>SW;&nQmI(?m4>-jGEEV$bD@%xAv=YakAZmjKWikfRm zoH;!Y?0n?+WM2iVWsO__w(s+))8<03damh3VB4vizw1mb`Cklf&HoZK_4r)+|M0mC zO?_s4&RzjlyPT4FxDsrCxkg_D^Hc2``>>5Z@xKb}{N@^64OX*V=3dS30y1CL8T&P0 z_h!zrS@0*|DLKooMb}q*=JI;5^Kcz?;@tpN&slaO*tY8Nxe4sq5Pmb;82t+^832Oj|Y zeqY1=*0Ih(Q;*O0YM(OKhtSlM>%(B%`Od0sW_>Sy1g!0S^t`ivAI?wp z&Z<3Qc@*qeGJlWNem-Mq8%c2tUO!`qy>|L#%uj+Hvp(9gAD#kh%loctLe0LNs~>>X z!hZ;Mt}+KtgPo`HdjA+rJ!i%wF1Z~yh^ILG~^EbbZ69&BuFUKe?JU3MU*pKU0)F54D(y8>?y_8JYP z&NccY@ycuT*B1U>&6D$=;Km96bImi(zrgir>TM07-w{R6I# zdVJml8#mYREwI-`J?-8G+g4lJy#uyguIWF)`l;s`>|HQF)w7fK#QPW6+_iiCohP-# zeji+pIDR zvz|SZcB1$hM#*{}USsd6J5pT3e(#tyJb)Ok;p8|FZkw!+1>nx3dU6~DHpk^D+V_Dt zeq(7fmia6Qw$Jc|YM!%oFx=QF_G!C?(Y5KHycPi)KhG$Og7s5(K5e%c*gmy6Kk{;Z z_Q1!_E|kpAt~GXkb}RJV!Oqp5)XD#g#M37^EdkdrbG0Pgv8ZQ^OM%r>5^HHRV>zeh zz6?Cq-8S0eyKL>7`B@IGzj|_69_(0>%L;IFQO|W-5uEF$-RqY5TnTPmeKMabgB`Or z=Tn~f^jzPY;%5ZK`5Z*O7sYwohk6*-#e3K4v{Nsi&Ax=Dp1rgNcr}W8+N}k)U3vdr z8%;g!)&Z|cQ8#b%S{H0QZP~-?fgSrowLR_EM_-kqJ-%Nqe6>4vwQ}tH6UWcK6vuAd z{V0xoB(>LNLF$cZr#_6#29v-haNh&`yD!>u{Wb+_voCSk*Ma!^Df>DAZeIscr>`w( zr=GsHg4@>?)Y{V5)?jV+Rbgf(zsEite?JFPGOj~v>>fF^#$MOMDCTekwdaX{MtM6* z?uq*EUU1t?E4Xtuz2MqUZsDgE-1RlH;QF84!p|%Cg<$`GO36q6t6KQgE&Td|o8KJ; zxBvSJ{v7!Ef@^=Z;I@CQ;P(I9n&+DB0C#@9W<$ZlC|4Rx8h`1L5lVv)BiL)n*efe=gx*xcW!LJe1mx-@T|GLQ!*{h|||$ z;MTqlM^n%DI!A!jydHihkvP`*^9e_S?b|)5zkMXHqrlqD>u72}=B3_2Q8O=b^6CVe zS9#`+f~#i^MuXLy1M^B8>*Uo1wr_LQ-#(I8H(0xQjivTuUg~2gYUU+QUgN;6dG(;F zXTFXBt7X0t$2xf(3$|}_)!#mnS1(w*c}<{BUh3m1YUU+QUVUKmD&Mmw!qt=4abUIN zl{nVPYZBPL%~gNS9+S2ctV4oq> zb3Z-{to~r##`9k-<2nbdmV5QNVB;@J(PlqqQ>&-VSHWeQ^WnBxgrdzh=TWPt&Bb8j zgkJ*IC;ZZy=g-qz23L#ya;|ZU@_U*1rQHO zwEmEBeT(|r6hGSUs_oVp!`)zG+*^;~Ua;Cd6z4|%O^UIMEw-)K=YERUB(a_aSNV|F z^WbMFo((<=`~<9~kN)nBpMurBzsi3GHm15h&fg1Q$Ll>#pBKUUsXPArsMYlMzV;G$ zcS`o(&%tUIKd$xk{|hwR&#Ys=4Ax&gXWB2p#w*XXSK#W&@mJt!l)P{J8my1HIlfA5 zZ2euEzX9j`c?~Sr@3+*p&7YJ09e8p4ZLgp9^!a-q+egudpCc(-65r>+ zqiXE4aYuoVuCdREofLB)O`Z4jH;C<8kQ?V81-H%HE&Sbr+te!7<(a!TX>ab%lYPr`j=u%=9YtNcxvHh@J7C-9T>2+mE$7mEU_b6XZU3UYPjL>! z#&kS4QM@+#Yttuv{2Oc^IhQ_wtCi={hj8`sTr#eD8Q1u^<{yFeF$d>ZuFZY-3D|2G z{vY_!HFte}3U@B@toj*PAN9olFWBpybMJp}&rJ2KbGmMP4%e1g^Pw3}n||gqKiHhK znXlJeEq%3t%_qDa?wG;{z{^|)!u3&4E(?Gkr7vyCc@Wsx+TynmSlzz|Z+!RL!r-hS z*PmRQxi1PfU-Nb?%EhijW958U9PB%)?e){{-cv94-WYuRbWz-UuJLY)>t-yq`^Yoe z{|{}}y?p0_yASrP`7q|#_xB~?ze4x#^Jm_c0;}iwcxkZO9Q?fRE(`YK`qs7#Ma^8q zjHTD{)RXJf_7pzvk zhph)!&m6B0R-27~p5MO=S9i`gr1s;St8YM2bI!%-Ya?)LUmK&T=lOjTu$t@Mb0Tr9 z^ZdRk*uK4f`rAkH+6=7SytbhBV_xc;Q`F2$oV>OKn^*ZBwiR4GbFej7%{efy#Ia6Z zUjf^hq&A;>aN+RX|OAJmzulAb_1Jd{`}qUV13lHpY{N&Tl}!StM%v^ zpeY)efYj-N9hUD9SXLsdVV*07}z=4m|||`qo3D6TY290 z;^Su=WlP5DdD~OqV`}V~dMw53Ii5PtGe;87>z3!8?t=TgGNy%3F1US7E4Y0eUvS%> zSa9tZw(!ea_)P`3{mlipzgt@PZ3Q>}?JfMy7JgU3jsIA|jsJKHf3o1l|3Sg^f41hX zGw0H0E3bbC_-Kk}{87}dE$_vhwVr3PQE;{GY3Dxd0{ihi&^DT)=5-S%_E>Oh>~U!7 z=Hhje=UK4_?6ab}cCWLVdHEc0jGQ|BSokqDcTe@gZIkDq@nC(_qfG#-`yA!IFm4~* z*xItcCW4KXJ$xKkE$!@Y5?tNAoiR@Vw~l!#n!00hZOX;2OZyhPCXJV8ndxAkW%Soi zyL(IBd3L^S=i2qUc*dVp+pK-xJ%##IiXZK#)pqM#>lt8UN?Y2U1=f~()!ATUsk^?;rS@b0+RmY<*}pjbod>SQ zPaD^@+;JvX+sK^*+ghjX`C!}TeeVLWTHg1xsg?6;T-&>5E&{vuyzZ}3UkrDw&Rcvg zK~vA4$GQ}3JN5kD?J}_E=-L$R-mkr`oVD=k`@#@3Y#{ z-__vsr``VYec3g&Z51^A($_4oeJ93swVyd_yOxso-s{1}(I@^lg6(q+iuM~Qj?r^f zoBeq1d>wpbZM&ITuFd(r73|)(-7R2wY_q{$3vIW7<;ndUVEfT_JGFdkp6;E~JHVr; z?aP?9)koi(sI@1zZ-UJ&Yx`T^tZi-S@7rK)#_(L1$96YZE!XT`u-ZM8_}mB9C;Wb} zdo1_e@4$24wY~oO*xy~$+SB#{uv(tI9t5j-&Gm84zYBL<+5dCEYOdqkS=+Pl`5xT1 z+T5QHQ~Pm$YI}&H<{lHL|3|>iWBU3&*uJvo9tEpq&pifK)8A|U1UT3Haj-nLr@*=9 zPlDy?_lMwI^B;iax#m9td(G|3n6}j?ZJ!1^XPNIGgPrdUD2~VW`eco0_l(H+trP1R zaK`U=o`YvR&w}N-_dO3DgO7Ul%}>DDH^$P(dw_cReAP!gKjr)E1i05@B6Xgden-1J zNBKVcrxyO-ntP`CKKmlvHU0v1#`F?c{gHZY{2Z+2n##MwFW~B~m0wc(ajmGoOi?p8 zar$}%Y+p-Ir>|du)pMWtwLTSZ&UxZk=iT8|uzfpj{q4g%enaiYJoI^uqGlfA^4&qb z$_xM3!Oms*T>S?$^_;VR1pl6*?z(WE)f|V{{m)=y~lLmS?!OHz|29e;cgblK1y_!1k*x*XN&L z$Lh0{>*`&we(E!8?O$NWtIfG_&8g+OzYjLw_ox&1-(dBelOKZBKA@!CN8r|WAET+K z-G9JppHMQkPr=61W`E}W8Q8p%^XFhSeUr0V{Qn2m-&|IvCQOyfN`=pSXzKZXWqz>j z)H8-Quwz)QZs$Fz9ZfxB7y$PB74?i^AXwd!>$3pZKD5Pe5O@wTEg9Q_X!>e%Z0>or zDkuCF0;}Bx&h;3Krk;JcFj%eJ^NYaM-D`_c`*E+SFG^8!uZh#w;^5Z4zJR8ld)61h zYWcn(ajdiFmjK(h`&NJZ$XT=`Si5;GO`W{dm!hbdmpFMX12(U6|1689o;g?!tmYhe z{wI!g@>(8j-{z{neI&0Hz}n4gCFfoxD~B z+qb#uZy)BdI(72UXElnNd5Ft1QoYKHLu3uG>$tp6tcj-X8hRSrTHsxn)9j(O;f^KW z!K?$^C+ zrN+KTPc87Y0v})C=>|C8h?LF6iHYAtabLCsKaR2?R*zMDQL#yQeJ6a{*y@l`H z!VfCA{T;6`H#K?k#!x{R-F^ z;oE@qnOWztEm$A*%DQBUmMz=^Hhdy=s|JG3SC9^f+eo^Z#O*dxIDs3-Pb;KbIR z*q%e$5_=zTIoJEb%h>zD^-)jk{lST?J+VF0v>Ds`z(}xXao))egxhYt+I9fk^WQP+ zr#)>CuG@wmQuEwT4u$KZZu^6%)iSOlz}^$m{z$m@g8X^Hqu^>O=IDCvKr_b;D2IcM zqpy8+32a++ z$K!oaE&ZGVwx6tnQ^Bsml$>>^p=;AWea!&7hVuL}6K*^8^nW_ow%Y9fWNNkaeN2Y z*TBZnW}7pp)zarR>b31^YI*v)7My)J3oK8&>%pEo#=H(JcWpbjH-Pt`HlFRY>vt8k zw#2^)td?taGdOF>I_v4{=-Tv8|F?k4^>i!THtHGsZD8AKv;P~Z)zberz}_3Q-42#J zmyY2M@DOTs?X#)X()OER*&s|{SWS!g%)=%9&?xa?W|GnT1Df#>8 z_kq=7zaMP=o)PB!9k^%2t`vQ>8}}Y+ZE5#iu$s09spZ;Sr{4qTy3PU1bM`(2-V7hx zXtVtT)atf>8r%25kJQ|FkAhuaiT@bb_<3J{9IlUg-iw|98%JBd|9KLuZt>$d?f+r8 zwv6ouU~>xpA=oumorARb5!g26yZ+N~^{ks8gKejtcF%xqSH2%V3s=wjeGaUal5^yF zG-GPdwf_m&T(wnwFrc4;ThHj9p{Xag7r?evcl=LLtBGHv{skpt|0TFwqp!frHTo;K zKI&=nYp`*W=c{1-)Xmf9-`CWr&!-z8DIn?U8r@c{Y+Vb4?53u9&xlOy{^PI{U-$XM9{i3}ERyV%a^<}V{^B&lJm;B#{|BIrY{QnJBH^2OT>;t&@uSC(F>-J%-FOP12 z`X$asVC}|9{~yE496y2Ur=Gd`4>)tBJ#*z8ybaf$Yx^1ajDmj-zO&}e!GFQ_mpT0( zTp#tsV7jXPlN{%R+fUle57$RMYp4xuEN#)+!RDhau?K*?Zizh*Ugom^Tp#ts83Z<# zw!~Qoocq1+x$@W+2Iv0eJFh&pMZxZM=g#+EdG61PfnATrvz_*|`vN%q`JOC~Z3%Gt z^PO29+fv~4=liof{VfgNi2jUcJM9_sGGO!3$5>vwWx?fKEeF?6J?)kUJ73xyg1#TWr~{lh;tn`1iPP{ALo1{xSIXP-#Yzo z47Lw*($`q_w<&e{(`OTkn*E9W{_}PmY83m?(K z_if=_EqqGB&FzF1etN;}|BM!XR?Rby+ru5xutxL#zXRO+|3=Jhe1@W_=b3#N*mmmq zo@qGP`QO=CVCUYsP&c-}f87~u?478yj&=d7>+f92D}VfU0~@2fSMLt5bk?2c$sTaq z<=(d^SRZv`I^SyPZ!fS~?ty!Q&70viwB`2>`+&8*hweJvAMD3{s%<~Y;S{gGIPph< zT^IRtjt9WiVm}aU|H=0tus-U^>0q!qtw7P9d+#A&@4MO)?@+Mud{%Nk4g>3_?)Y6# zYVJ$NV7}&^_D6utH~h$&C%>cMKC7t5rvqG$;b^#i>dCbeY_8f8YZTc2v?VvSGB3*x1KJkk z_ho5+8r(k0zlSvguAcXUnPB@hjy7{WomyRd2DN_%Iq$S*!hNUJN1HyLm+H=$@6~6E zDdzDi{2Z|Bs{Bs=Tr~B3uY4ZZcIp}1SHT&Z_SwXU?flxdJeq#~9V&A<3#=`DUjVl6 z^4;q~H1#~UUIbQi?sDBPh8rtBmxw9q8Rw;7$3ByBI_}HBYWikg)Z%|R*!y1i6>!_9 z&nv;MlRV#l4ea=R_SEM1T~oPsSE1>XlJAwTuG{&&vVGc*zTTU)<=%Wc_H!tH&Y%Hx%49H@EOx3$Fj|E&Q7;{O%V1y@Go$eyZk~ z)9c`8q5rI2i`T=|ydLH%kME7(v+#YP_Pq(Nrmy3W>+ATw4tD&;mEQta)7LS|<9i!e zU*qaK8?L6W!Ghf$(TKahiT;}^Q+5cIwIZ zNwD#?nXl_rE&coe>=?p-So55NKZ5I{9-pVd#tHv%&C})?xIXGRAD;#1>@=o6<~Wcw z@;q4kbClf2egf8iNNqQF_m+D4{V6!P8|P}fb~&Nn-{^!-8L`5%QioU>!Y4F zzW}?I^JhF>h8x>Yv|rYmIY)b?*0>e)YrjIX4?pqyb*+_cU#+#W?Q3Y}Qnvj~t(9$m vTWhw>+59^+^EOZOivD}BIhlifMt>b_f5tbSy65vBz{awjKAz!fp5gxoFeDOJ literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/1fde9cd2.vert.spv b/packages/ludic.render3d/shaders/spv/1fde9cd2.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..bb0f0e82806270028ac48e3506f684f1a7c19aba GIT binary patch literal 4896 zcmZ9OX?Ijb5QZ-#6A)Jf1UE>CiVETexFST5MNy+D?v4W)U|^Vunato0xS)v2rlO)4 zMFe+o``~Zzga5|m9MAE2?%aZV(m9oW>#e1$ySi`EF}8PHl8i}CPsS&|CG9aW84HuZ zb*1z2RjXIcZ43|0oj3m)J;Qhmga_ z2yz5DhWvv3igfTZmiZ477m`kXPUS3Mo1l&qsP!!74b|e(^7>MfjA1GH(a@O1|uC3R~4Y;n<&o!IH#^y?`RvrLHyt`}`Tb1(GQ=Bz5 zi-SY;O>*t{LdsPu8#WFXTZ7iuk(>kP5YJ$4P*;H;&!$w|TGqLd+6(Dfm5Q6{m0C)r zG0$RSS#W21j-}#Yz3tzbo@uMNH6^rrzO7Gq>l zY?R%+`9@NGs6NcBZl7Akjm>IRy(>A2&e`{uht`ybhRe^Ore`7V&{l6$hAZ_N{J7NL zb5D6Txw`UPS--G({@9jOD}zfbjp0&lUHPQV9%y6nlQz%Pd*iSk?+-rhVpi4$tf;`c z-YNK%wRX4%e7PPj8nPXdp?)?=v;Ef_2=Teqxm@X(Q$Id?ajp*laCXRj*~O)PvSgB?|Bd6 z2z_Q-O?7S45zkuttV}nLy59)x4t2j5dEL9M?wM)#JCfJE+v=X5cJFpxKb+~FllGBJ zcmL`~GQC|-M|xMyWnYdmJ5Fy;Cpl}8a}Gaav0SX>JypLFac%FX`fOwpJ1|EN z8H^L32lCvyk*WCG3w85N5FEZb2AY;Q{eP_lQukO3h$9u4wSzqjNS z^&Dh&4eK}m2h94)>#y!RlGFYXv$0`UKa_FWKLP7&PUF>mXL8ZEPr(QG?pYZ5M@HE{ zLwC&Kow?5Eh@9sTIgfzN>0SMT+4bzpbdYb;^On=5SlgG(#%MQ>`mv0&HhX^@@y&$( zO=dU#M25|+{xkC!#5nV*`;O&8_Z_P*U@xArxgFN=H%x(9U*D(y!T))Peo~_?N`93_{ z_Z-B1T!v_iy=I!E)AdAGO=#n-J@F1a~u7Ux#(*cMGDgw(z?ZY^?V#xP@S2 zXe?M4XZQ-{XY^?nW?g6l|auNF=SYK`7w+3vi{R!?N zu(5Ix`!HBvZQ=I_*jW1$+@oM)^F4bEU0-d{v&X^i#hT2mPhZxvC&BjY2_$+}1j~od zQ($|R_bH*vTeCe|i^%1Bwl3qNX9MWbGi}kcGFV&mY&}@cI%2OI!0y8l+(xjzjySst zSYK`7w+U>l{RwU}*jTxUt%CK{7Jgg6#^!rgLpL_xvpTxI+9GxkY^?nW?rE^Ga~V}1qMj_9v_8?ukQ z+FnImTOaFuHsh>I`|F6@z3j@m-pDw4hiki*u{)Wy$DZBOTVOdyF!3~k64Sj^>q*K_g&;b$`w-mJ+Qv= zXArB;`-u7cc4+r3b}`GF=OFXP$RR}AhnX%u4E{9ZN0>j)@DXPF6nF3|uy^n{66gCh zSU!Bd1?%$-5Ov{4>nF-AA9@*Vvpla{0P=h-rOgce?pESz5(l2*Y7`eek1Zf Dr$czX literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/254e7887.frag.spv b/packages/ludic.render3d/shaders/spv/254e7887.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..8630e50ad8942a45b662c6c1cde1d334aa398727 GIT binary patch literal 37432 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 GH~$~h_>lwv literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/254e7887.vert.spv b/packages/ludic.render3d/shaders/spv/254e7887.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..a5724615593dc524485420768983d014aa02aa30 GIT binary patch literal 9740 zcmZ9Q2bfgl6^2J(0i}r|iV6;5M^QjQMQ}kBP?S|HsOapB4# zUY{q?n8Zv7Nle7_YMM(ly(h+!X!5>y?pf}0Z}#|q-*?L2?_4r)z@#CC!ajvzg`tH< z_9-OK=)wS$Lcw+#?Xbe&gfCdUbn%p~?&c|{o_30XBMSp<65pu8fe9YOf7_eN9g@ef zo!BmH5B4H9mcl*QI_ySl19mgE6?+JK7#qm{1`xX&Tvr&x|Mu3bW1OSltu5tMt=&u8 zE0ylnH-*nm!ub+0vEhp3&qoGxIxS!8M6%BmBud@r}2&8N~*VsQ~fi>V9wFCDwjGdF{aPMS0uiH zg(~gZ1P@Bqv#GSU5_zs|xt|X$?1ryuE6s0N+0@h4eOX6&Wu>!yUR!0wngY96m-q=O z^ptwbE$jAbEH&EN&dO@F!AYEZ&{Jx2p-a6CAoAVyo>F(Yy=AZF9`%&gl{=dE=GP_K zil)xy5_Xrkh1sfwi4&2$& zmf#b`owb^0fomDHxFv8Gz?`cRUoW_>uo}!dc9m*}8D&sm4cgkK&ZZcTccr(qF4=JX z-kaXcc)dftB~N&*Z|_r6hI_YqOIDF%XlUuYyrt7i!sEKB`{=85mAlIo z*Lg^y>q_);NB7e5dUoBMn$I(W@0_;s+WFvi9Qyu-{%^5*L@t1cb=Hq zU>0>WJEA&j`yN1F)KROMdJ2UF>0OyXzGqIplUD8{-$g68{{{TlJK;DN;uHILHW%{W z;GVtxbJ`@hPvkl5Y@R%yr)FL~7J2ra&6DTz)Xdw2#kd^5S~a6NXEo;-an@FQI-_~V z)SO?$*{9lfGMaZw?I#({d!_b#M)OXoy@0vK-lvI}Pw*paG~s)|?t$x}|HYI$e!0H` z`W?I6yI?*037)OzJ;?5{_aIx}dmwim&G#N;x%WUmF!2ve&b6_wO`QE-e_N>T?gGzpY>&^FK>#tZ}na{&=eCe&dMr--^dcLHB9-dnXW`_5bJtGZ)&mUaMUu6@eAr)u`;etjGB&Kd7} zK%e>H|51j!rq5x<#GLkkou~OP&^ms{pqi_a0Vryf4T7X3NI=-4@*Xe!B&?p5Jd-?)O{pVfg)q%W}Wj+|e<1>1>5{@1{}FyAMU|8=nX zeT>PRr!n)?ty!g2vxaN%4Xlb~$NbGyH^z6xcQM~5zC)s)@1^=SVg`f1kC~?)wSNGv zV%hoq5Uw7ze+;&^@1LmcH;H=G{wdfz^{D+ba20zFi@cwM)uZ+=!1;0i5=}j7{|aoL zdIK|Y&7Q}ckNxV8b$cFcU&j0z+k@%rOL>grH*ohl_;11PWdm#FJLGqmG3w^~?o^BT z--C^hx&8rM#j<-<4<7o)T7Ry!Hy&9`~_UavTOENxO&w28`wPc&FS9$9c+Dl zQR^SzDz*`e{{9J85B@K({oj(_g_po;QRCm>Dwdts%W(A=&nsZ_)T8dJ;OzRm2Crh- zdHn~j9(Dc;Hcvg~^*Y%4`eN_j06SmjqCfUtJ^KG2INQH3J41=phjp5)v zYGmg%0!=-}GZJi`dej{S&aTh?@V?xZrsrKUbx=j(5rx^sI9?RapNHuwo} zW41CL{gc7QsGIL^qFThC1Xf$ZFPrbGDPT3t$KUMX1^=IeLg8dI<$0KKu`Z{8^XoDd zO+D6S8aTf$)6vvp4Ne7{rykl2u)5!Y!x^LFI33Ji;W$jc--LHCUwvnQ9j7tQ*WY}# zI16Wj)rRx6XZ$QMe|-NG3i@1U&r_T&{mx+n+HA0EmAxNx;OY@`b{dnthxKUcF{im; zwei%9ym@eIXWs?qz}4eC%m>?_`T91ed%OUw?>x-Ca^Dw%`74}@>32SU@2JP#F9P@B z4}Lz}nCNdY_=1eNX4bwCjlaSa%o^qy8+~5{<}c~nSo`jStG~*Lio0bSeK&xs#K^bM zUJUoVEJ^#k1g@s}*myQ$4VEHU!#Mj}LaXNb`d+vU>>0h3);`?(%fagLUbq6R=Dzq| zxDxE+dqLkaOwIR#IL3N4xHi_>9a;`o(|jDKuzH-U7O?L$_4xK!30BvOIuIW{@YBBCM zu$sO#wDL1pS=Y85Jc@QTtv=_bUIFXtz?_@+YAv`*o4qsFqp3R<^E$!isz+WI*nKw7 zG02VcjKx0LI$qChFW7ivduZk1y8+yn)>#LZ$2@NWZ@|pEkyh>)eBW;bKTeyyx3{3F z8-Fvc-1u#@w_)z%t+dvE27G&}N6Z~*%ouzTb0?bm1Jp6+F0gs(F^9Xs&hO%M&F%rK z`Gj_FswszdU#fXd8+gZh|F)xKqmK*mvH}!PP zfB(6Uo(Z4f*i7R5xAce<52GE4dB66j_1}SNqp=|wJ}$?LIX)@JkIC^FIleH*8*+SE zjxW#g#vE@;x%)B{d;sPgo8ivmpj2DMnv4Y>oNBIJg&6PNA*t?KI)AzK^c{-1PQecY z8{>OG|KXT1>T$m(fa8A0d*%o#7!YCxX>{uUq#>j4e&DK68q+>XCC4IGb}c z+#J_IpE>T2dgS;!Uc_Ro$Adj@T8#Asu)494HyK>SBJV_SKJO$nbz@_Frhu)dFKV3( zE@DyZ6mY)QR5W#Cqt-OA_4GyVso?3U#XI*jxUu?N1J9&d^nW_Ii23h$*ZK@h%{mct zCb)=2-?PBRsYl;ufoG-`Yd0INZhX`_8(hSqzk0CR94unyf{R%6HxFEosYlE?;35_= z^TEccZ%*gpH;7}<7vnq+oL{2_XvXSujl8F7(bpnyF~iSKdGvh&+!*!9S)7Zx5N@1$ zjO8M5ek@DSjMe8@7SgIk-HXBQVbr(;oIfv1(bSENyi38(EB59xuyN`Ub2-@lBIXLP zaq5o6_mf)0UkP?B!LI__N38$VU}MzHUq-7I@z;Q@8T?wX{YQQYY>c}3%W2gjz6tD| zjWliT!K1OL zzXoiay7OwJRg3s`aCTlD@R(QhQ$aIMU*xR?yMDp12fJp`ZztFo^{CSYwwAt_S2s96 zuO2jG^+o+&aCTnn;Kr#tuQpmW7TfQ`WBaz8iF-h?$`>oH>n)834!N6anYMrTs``_2i%Bd=X5VzJ?3;D*gW-^({`}^>C4aQel-0)(a#RB`=1@l z190`2(}Q4h)iGz3#J_63~`A5;zV@@9f to2$M#-SdxwovXg6^$D=GvSa=vTs>-i3T&==)cQ2ov!L${MlJVS{Qo%1gP{Nb literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/2e2908c8.frag.spv b/packages/ludic.render3d/shaders/spv/2e2908c8.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..9a334e938240832586689370fb99240b607540fd GIT binary patch literal 87584 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/2e2908c8.vert.spv b/packages/ludic.render3d/shaders/spv/2e2908c8.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..665a4db794a761d76ff3de2608ca787a87cfc83f GIT binary patch literal 7708 zcmZ9P37A%86~`~j41??sz+(*uJo@f6u~Y%NOZ5Ive7W+s5GKGZg7=ul9&PiYy?} zLS!j&DRLPyg#QL(yARwzL@}m;eT>1@*-_os*}tQ^R_pJa*SBQxnge^6tbuPJb`)!W z$DtgL1`iyl^W(t19ep`JMIS`}3hUm4XR}rlp2K>OPV`wJUR=jp#Y^kBMa&TN*$M7T z{=3A}<9g4pO?&NU9 z_lxrxHDnKf=_x;9U~Yei)j{d|M^;7v9-5tG-P_x~+k2>O2F-US+d1I4 zNA)mMGNx{G{@6BkRrhbM_Vu^-?Cv;a^BlAdbakDw*^BRlkNff6z^A^MZ9RM3Q3JVs zU*Na()N>|FmTgJ*X+}K-`jGt0-N#lUy<0xscb~2J%URNM4j*;Tb8Lw-uFlot%v+38 zFUQFl*MdZTdzZVVzT^g zy=eEIoStF*o~Sz)XX<^hFZ+qRQUB7N=Jb_w4L@V#h7>rloc+5O&s=?e(miYS1;}`+ znqwvzj1x};Ig<)9B^#diq;B2f6Z%yAn=sgWg?hu2liVcqGgyr`w{~mmD?gKdN3v=+ zPTK^0#TdQ^p*Ym6AAJm*5nqA9k57srG_UjP$>;7(F)#e#Qy<=b>XYdhLeVxIYr29K2HyQmd zR&y9{zPnk?=NZi)%6Cj%KgB%yC^2vAd;;AW>2Do%?{dt|8Qz1$*?lV6qA%^AMSO3} z_qk-ZPV{{uaq9Yi196}Fe>2(KQ_SJJV4i08 z#}V(PcTpeD%tNFF%i%!~1Fu@5C1n`OB$p4!`GeiVxd5 zwWlwE>w9X<_w;4-$af<7xv%>WZLzPffQ^+un)dotu(hRy=nfTCug>GEL{2FY`bx8R91}xvgguExeMa*NYHeYaXI~F5+ErPya#Omp&sob-Di{`Y%AV zA480B7JfgpI}6{#N0B>`c!&O%xaq7T$)=CV%qP|!zJnwY@3gs3s-j2k!C<+V`w(>N zNBmH9edHsi0qlO_U28;_)7Ki>!E%a^OVm39#hm8zE{s4o z-#y94d5(mWk9TntSWby|b~M;r+TzT|fMahb3i-yuYl}II0~;@YlzlkoGr{g#n|=G< z$i=?LgXP?}->tLItyTPPO@Nb+Sxy8SCm;Pz0vlKSZcT=hkMGtLuxBhEGdLS8ufz zIQsH$A9d^dH_8gcbMS8${qF*=OnmsPPCowq5X8F>Aoa$;X~90lTO8wyy=t z`2@Evanix9Pn^FEE$KI-8P0h9wfkMUmD)G3Za}xbKJIxV>n6m%&%9sGL|wm=*`RC{ z;@?o7hiB?D5?P7gaMn=?k6;~*__x(q*7#d$9C%nkpHk8*C4F{DpHtFTl=Q77y``k@ zEa|&SdRs~FO1kIL1U?h7$35uwF(GmLn8`%&q{KP98a{p(CMVum+P}K_w4IGOr_iT@ z_3=H{J`K@FKHkq6;CMgdJ8=%2zS^wgT;(F~Ot4)1KFk7hq}=Ei1GKXg2Z0W2YcU?*z0_-yuK0V?_LFoxC_ALxC`Or^^N%~1e;G=jvIC*^|*AlS#v_{0=#HsDUkx6IME+~Q z`pMf@8>?LScY}+4^`J*zQKtr{pSFnG4|aZ`KNIZCqHZr(ANk1B2R4_s=&K)G?rQ)} zUu}{90JzxKL3I7(?W>DbPX8v>L&zv(1Mlaxtj|W;ki&>RjjYc>qPg}XCTi~?&M4el~o_}#Kx1q~N zPcH)-D}OZg`EszmYKvU206U-Jo?nSBAGuxyHda37^J;K$KCeM{Lysg o9{}5{w#fBCu(^tRz5`u8a(xJFtbFA9Fxb1G?NN5E?%(472e=}etpET3 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/2ee6d2e3.frag.spv b/packages/ludic.render3d/shaders/spv/2ee6d2e3.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..2987b98117e1f86e3cb30d8582e469425bd6dca4 GIT binary patch literal 4632 zcmZveO>9(E6vrR^qCla1e+c3f1VIoH`I3*eAlRZ+il~61udg$2+Gk(qjq_0G@{YO|L@K_GuP@(&fN3=pL5SW_r7ya+ugNu zX%H+4Rs{V)J!p+JL6?|7T%ViACN57Ls5eRn4j(y)$Eu*)IpQ-IEDd@zBlA&G!Ejwt zldP5>yf%>5t*Alptrqo)_5FKgTP9mkf^DVdW>_!Al~}kx*eX1ehUemP)Jz*MSCVp8 zn?IXo#koKkE_HUfXiYJy7o$=fE>yv0BhQYlUQLrm+eS_uTP>>0#BCd=?ARLdjX0I9 z&+SM4%CT7qO9^K+zPHU6vox!<`Mx~Xd|1u6=f3=0+)XpA*5Y!KHsV^C#tU&O2g|+R z*~{5XSc)t4q;b=&UFLG&&YB^%**KY*ZG`10O|x=YbbH_BZJ+6=9(VW^jxVN3H6&zv zzX8YBt8q~uAWF5OvnKy8b2r0U*6{dMZcQ?s=1c4@1|46DZl+|{iL=`A<)jw3F2l~c zro*=`PuOCub+*~4Qu_CrbshdcYu0yc?ju>O4IRFism6@o==erG%xcMuO4;~L#?MA6 zm)obRq$W2TpW)l8!!3?effi${#LVVI!G$->4OTo8!`~ zq}ld-&~bBds}5Rz+Z{I_-SGS#a$GHHc<~A?F0RK7ouE4)76W~s=CnC4y(c&%y%E)B zENp#>US&Nc+zgXiEh;5ZrHGsSdIQen)xBGb zu^CR+O1flx5{K=kT3qHhy_B5BkH@aNtLM+a#o|pagiV+8Sl&~H#PJRd?~u*_^X;*X z=9q5|rdF}@t$oaQ?%-}$5A>38`SL9py^?YL8s@DN&*yduGmN8G!Hr5Wj<|5QJ+3?F z?s*(N3BQ9{U~9?2#q&7whMV*_a)Z0>ar7RzDUYM)z?D3X9s@V)ar76s)Z^$aa8-|^ zr@-CtIQj|PEsvv@z`gHr+$G#?kE4gced2NS4!AEoj=ll+wa3vf;O=@Hy#nqBkE2%L z?s**b0{4^0Q8REqdmMEG_lw8T7vO&NIBEv&zQ@rI;QsPB-Y}e=Vf&lY58!${j(z~w z?{S5k8xTj06KhDKl4|1}(izxCHDjly4EuK8K6^8;Pie+q;oI2vrw3rCZt(~EcKQMK zuG|jx?equi)Gq76zMWoyojS%2_U-fy?9?=Nuy3b_*m>3|i!R|Iord$EZ@Vt5))E@MAsig#mXm$GjH?`|&1-M=tw>(RmXZBm4E0 zu=5_^5Z3S(@Z-)m>z8)`2i~Ax-atXZASReMz&GC}OzpD<4s3nWu=Pp9)+fQlr`8J+ z&b(a}Nu3juIIP9r?#%9!d>0F6GrR9^I{tP)=#-WPXCPTV(`H(~cn4C(T$`!;k-%@ZB%34O^T8!q+w( z8!`O2@JBy>aN6P?6lM*6*zn^VPf9qOtve#ueN#|~; zCC1{J_cSdYKkl=LlLj2|!1Nr3#gALiz1OmIi%;zTi$5bCKjP17X21~-OiyCidES)% z{osXB!*jwP-?`KNo~iIV>pySfdEvd+2Z!x@R)krDA2!Q7lg=<)Z9$jUThhs$_kbNt zZ-YCkmrV`x{u$i;eKEb7@$J`4f20n<)a1TJ_|PKE|BJr=`5d3tdU_du-&ab`Xcuav zAfXniFMPQ3AxS}URgtKV9TL{j&&U`1MPF|b+N@v}GvLohk z3Hgu%Hs0lX`F>AHXFWc)$0_OT!TYqBr=`PlMq&<2?2N?VZR11Ed^_x{<=dQ*j7qL( zPwxG!1de;Zl;?3S=QX()d~Z10{~76UhR39{kL7$pIysL^%;#C@@Rsv)(#e^=MLc5Q zL(bF_c8m9dbmGxlEZ#-w@LwtC3C)udxYd%+bXK@a68PU0^Ri~fpR&QfD1qZGpj+IR zq;ocl`?7SnT@s7?igfrtwANxU|E6!uzE>pd%NxU&_~dX+GlLxPxhjDp2XxEfRq5QP m-36Gv%$M1GUzg5(O=|D8nnMX3`6BdJ;?Q@o{jFO+F8K!vL4=$D literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/2ee6d2e3.vert.spv b/packages/ludic.render3d/shaders/spv/2ee6d2e3.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..25f1e1077ce58cc27955ab553070516a5430e3ba GIT binary patch literal 1316 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/3733fc38.vert.spv b/packages/ludic.render3d/shaders/spv/3733fc38.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..d83bb6c3d8db518a83948f1301b954d8dc2ba783 GIT binary patch literal 4152 zcmZ9ONpn})IlN)>mW@WtOS-c_W9BCdGrfnuW2H(>V=h<^4uhlMG`IwspamwuHSiET0^R)U zLjF#{-lT_rPikpDg*{ZRHOq~T-};qwygq@{KOfnw?<Vr({pO4R_Wv&M|Sj{?EFgU z|K?!(1!rwJWpL)mbr(2wxmb($N_#DEwnw?W4!MY~)>uUa^VFB3xu^YL z8S(C=w*G$XSx7mde>PIT{q)<*8RfUO*l#b=+Qs+-*nGS6A3||$`t7HEIOoFl_tY5A z=_JxvYnp!w>1^`GYkRNdoX6NRfNyHPvlza?SZ|7M{g{6g-8}1$=RVhCeQn=~@%krn zJ^E`mb1vrb-8fII$9H4?3i7Wa?d2J*MDyLmUDPM+^9|A*{npX;cegnAb!@*_#|?D* zntv1No_RlGU+$tO$<6E>?xR`D-p2oeG--Dj9vkah z^Zz?y54Gn{vsV}FmFT|fh}YgU&E8S4t#>@Pchb)_JPmxWN9k^zc{wNV=iJWx9@9FT z{yj|W`&tHklfFCanZF#!hy5(NdAG^Y{~Rzz-kPpY&YI5uB9QZ(^=tcXqh3F{{<+)% z>#YLL_&(?dQByu@zJzYh0I-ht=w%>(Be!44xyX4H+nhBZa$ZB1KbH4ii*BCt>9e=z zBX1pl12zDE7m9V>$oYubn8�==CPL{9IP)yl(;5>Asn--+rFIzLmy7=Iphth}>5p08MRyL**jcv&;vJ1H0OJJIFtKkul1XWxt52fTB8K-Alx^LO%k-i6&j{#MQnqRSru-W_`!1orS<=yz7%i+t4n z09`KnA3>kq|3f(W`+2XA(9M&#=3%5<)I5gne(5`k)Ydl>`7!Xlgna_tJ7s_G(#2jCs%SYaq=;q2tzjNsRKBOS>O6cc69?wnBfAtdGb;FBKq{%t8ns> zH->Jme7x%#x^G&aGUl(Ny9WK9oxi1WaaIj1*b8%y}7mJs1G7 zzANbR#!n)(jlYS!1>BDt!1x8oZ-IQo+(tL%I*6F>(B&Uf$DBLBJb7b0x9@>#I8Kaj zQ<5BkJn=8Q9+#XTFbo0ImUNcHP>>{l_ca G2L1=6y(wn^ literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/3b183d8f.frag.spv b/packages/ludic.render3d/shaders/spv/3b183d8f.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..4c0138ccfed8fb7ee119d8ed89bbc348c7c8c4d8 GIT binary patch literal 40748 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 L4)%|-?GXJ3E{v&U literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/3e4b62f9.vert.spv b/packages/ludic.render3d/shaders/spv/3e4b62f9.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..25f1e1077ce58cc27955ab553070516a5430e3ba GIT binary patch literal 1316 zcmYk5+fGzL5Jj80fubOC^MY^?MG+l+P-9{gj3!9J!x$1@36T?Xl5rr+K!{KH1OA8p zgg@X1`C{T)=X8TT+0#|Kc2!qb&(v#6!yycX(J&I8glbKM8ccv|mHWol_Ex(;*lRz1 zR!YV~y%ee$4;Mw~Gxu|M=VN|2 z$WJzVd-+L~W4+^@qhq#Gcc;>I^216h-{K?hqDE)GUkr-<9_(<*+i%Giy}@?zHCLBn z_DAe(w>WrL^as1WPx)EQ+ZsFScF$t=?fqO$>U&Q#o4qPGb{@h8xAjh=-~rJ0F7v>( zK^=Sc{P$E!{i}B+u6hq&>YOu2o&6=9wp;^vmVN23f=Ny>XORqb+A~-!_6*FT=f_a` z#xnd7b~!PPf3f7NK8#!2p5$Lf-}}m~M*Udyr#Nvu@}4;XLReo{r+>BdPk*JnY5dg3 zb!>aK56{tej&dn~4x6>+Ju(byItTk+WY2(0z5Z=51m^IU*wxF;WBCplkTWK{?_GA! zG;SaI%aKcc-@|vMzE(=_bj|!n*yd*-&C55kkLSF<_qAu2x<4>YcD25R{}pHO3g4Mu z2G08@Drb8oa?bn*-P`|U8P}oCQRzB(=26J#(wf z%CgclyB8}>T5Z9yO)d3ayw}Y3-L10w{r=DYIrDmM=W|}(-|zQ4@AE$I`v1?NVc7oL zXW4eysBA>`&S6>p*(n=_lA#UH>xGNYSUjbFpl!-gM<1!fn5-f9(`Rh9ebz{ASzGSv z*6>RVJ;WM^pE@0Y8i<-@Td_5vrv6PRqpzFnj+=Tx~>ed_&CsvlVUohC! z*WNm??5wJnK4a0_a-XJb7wY~s8^WB&*turkA={&BU)tB+(N!5}?`v;6y}UjT)iE{t zoPbXs#T<7R_Y8Kf&iROJA8O(!?S~qh%U=5DzKz-5;#%A7v;Ay4Q0`mM)m~{EYL@5N zjIFJ!FUOO>1C%Ca?I7y4Jw4s?dMZ7GeM61x>wsFD#_T|FcUR}?YP*K)On5bq5!rd* z&Pr*1dq;V&GO(<>tD~oH?c7RF>za(!-9ESDk`0zx%l)n8w)WDxUU}GD;~`srZ>4LX zW^+AL2VbIcoc=>P;1j$ttFROwuk>_u))YZMNwx6qcdWPA1 ztV3shTScA|YkGezMzk{XRzjt-MYs|AcKJS3S)>Wwt zu7&1jz9it|opUjDZ@I6m(R03uy0Wf{uMl$stG`b?wTf>559U6N*^S_#_D$KX+J??Z z-gdJZr`-OwyurUQ`)VEk2E3DtteZ<#{~y)afBXjCkUcM_nB$Ao)%&|4`wiIjSN{`r z^-gWb{vm#IHTHH~Hmle^US#&w1aIr=H$=`y!UxuOb+6%Q8D|=tODDIT0A`EzRDBz= z#c(!t?zbFV9dAQc2KQZ9&7)Jy2{u**9C@!(&vR2n#lT#O?O z*kry>T%7Z`DXQArbBzaoA?x>!s>c14KL)ae^m#V952v(Hs{xkiL!`)gZu0hk!U*?+I@-Ub5Or6iRSZ9?eRqO*{AkQqWRoY+m>iP^VD8U zG@o~BzfClscWQr3G@o;7e@!%>Z)&gPT6ItPd`tI~ynauq*^X-hukN zcY~+?-XW>KcZU9?ll#k4fA^bqs@yJ5?cOEYop1Y-r*`iZ?ase;d208L(e4@2E)V-I z^a{o9Ur5y)b^|%KX37NojVssQ3^$INWfI(TC|1|sbEJPYZX{P6~F25W{Mx%$!Fwjh|h+b zcf_3!etPV8T7oaA`p=H`i{RTO{-@;jOCAaT#Z{jBo97bB(_>F+aU9FQYVNz;`S&bp zHF?Be4tCx5M)kR%kD5H53&G>L5Imj>a>u`dx|w3W6ZxynXMr(|V_W^5yC~-N?~3cI zkGAklYxURzV*8Ca<{vm>1b1(okKOqwiDB`PhH#fk(l&-m=H6 z;NOE!*!;ueVy|w6tHoXozsIZXYJ2CWIlrYA=Lz`6@%PsFlkh`UjGYy6pMu*)KW!2B z8SrCU7k?%A3vk|&<^}%??D!{^%nANi_~P}q&kg=J_}p!~&5eFug4;$vZQ=JS_^RI@ zx-j_b@Q#knwK&6={MUbSVQqZF;WI}*SsTwN__S%$YW5xBS+=Fd$K<@FCE}0Id2=oP zf$*N4FFirK`{Gcz_e%I50U!C~#~uzo6aL!o*31mvQnk+rJ_kN++5>rh#+wUoF5<}- z!S^e;d+b#BV_Qep@_h?D%UWi~ye)z2<2q}Le$D`&e$qa*e$RzZo7P`zcOKk(CH70i zJ0D#wY{oOM%h4xMNBryI*L-cTHtrkXk8Ryr8~3g7Lsnc<+aI^V?_F4CUp3|D?sm97 z>Jjr!@PiXCudUt3;q+1CpMcZH!x7^yxIXF;YyqGC;KW+Hufp$LIH|_J2H!Y-N-fUU z;kMCFTg3S;c;u7&*VgVSct=OaZ109`VDE)x#ag&F|AV$Swf6r7dv|z8%3px<&F9>^ zNAA0bTJ-lT3DY9?dG=R$JQt1sD%`#3-S@8oSDPRfpWxnoCZM1FZ)Y-osO?|wyN{pf ze}|l3a$@Ykk#Myr`kBXQG~fNA-OljGA2_GB*1N#ZnQ&}vzQ@CFe)fi$5qDR(ZS>O? zarXrKt`%_)gm-kjkjJ&(gW$fehy6(SUAN7ztZZy}_ed9XFeaBRb zb@83jPjKHM{kZNM!12r@WWIm2iT$|l7vZCy{cSATsu@r2JExzB?>lD7eW&zu40nXk zcNjnB_zH^eFt*)Br_WJ52Xf!<{H-D7{@#%CMgj)k75{N{{D6cT&)*qR{}~C_J}cqI zYe~3ve`847FR$Y(60ZNsI__@_X?uTT2(Eu`!RIh5p84k~zTo~(n9+!n!egjLvtVe4y^7cwBHw+@=~&Oul)g{ueOML z9Wk{15zQR+nZ+u*rfTM^{m)>vC9JSx{|i{n;>U_<$eaV$;BN@}dw&_jJYNE0!3Yzh?8_##J*TBxH_n-0f`#V_Oxsm?^Y+LowMIZkJ^UY2y?2gU-scsyT zZlHJ%M%*T_KKi;><;T-U{tgWG?|b#L>D9T}9&C)^6u$X0JLYKwf_94^a}kcFtvQc^ zs2xbr*ZbBnm*G2t9kX|B%;6ZYy8FiVW5LEyH($@1T8w2Uu-c9Iy9T?#)x3Z8_w1=f z{0U&SSfky+YEdHY9%#mmT=#;TtM_-r+8eAMvGxJ0MHyY}rHN>S%BE24&)E9L9PL}! zCu7(5XzCcNw%8-hU~};OJ@TA{rXGAhuz6oz%-{ZSHT@!{T8!&purYn^#JDDd)y>~I zJp^q2Qz^c$`OMPCeX0FWu;)!b`|y5Ki+G2D)xLzkV>}$JW~`U-p91#t8v9k-5fnA= zVX?V-=8grsZx?|h_Hk(Hk?Zkbb3KfrE#5CWpHsp5smFZ01?(JcqF>MK z60n-SF@I{|zZ9&0^l=(E?c;Q~KI+lt46yq;`ZyD=rmuZyQw#sIz_CU?ALY^C*tXKafDfX!jkbvQR&d(?xo|c8qkpwm*|V{Ctz$jU1J|$T`Dp5~o+WUsr~CE@ zh(5+&L9IRFmBGfFfnSVk6`FeZv=%9dkrJ?5$l>|6zZ8(g2ra}C(>L=F|OT9i1GYtaak-V85SC^Y*FZLrXEjrWXo5Zmjo-Mi0zd%)WMN!G_ve7CfJ z`}X7Sj>qEXJC(otd%umQjxiik=(lqZ`kSG5nA)xI{N60IPZj(K_~8`q&^J;0@eWn@ z9#gXqarAK{*uFnh^x>VZ7JcyFb@@H-K92U*e`6%(FpXlL=B;lU`xv;fU03rzmZE=@ zyNfe+Tw(J$XPejQOD*Qi_mFWEKVv8{XJf&RXD8~|<1@kP={cAMR}Y^Sus-QIm;+aT zC-dN4IhUg5GdaJP!R~`SD8|$7`>HynLJ>qwQBYxU;HM+Kl z-vu^)x~^}7t4I7bVB4w3T2;XIt1V)!1sf|JPd8jW^6CNqyS#eQwZ&e#0IU|V`@r?{ z(2u4bc@BVWryl(cf}_7QuXX6!BK~@?@zZ&@5Uw8aH-K%Y9`kS!*nYLeUAz(O{5W>) z-fQj$^|(Xc4p!6V-jK)N5AOhvqo}(F<*^6dQ=TV3yHVm?PbjeOc)L^Fk9$(P|I{{7 zVn52SsN?TT`1Rl$53hJ& z(&k*4r&`3g608bp(`Cfyj9{FAiRjVq>J~p~j>F-fp=_eW zynPnzyv6$71J*}9`o9;f9wpwRK8I%fDHP|%zV&rK-B0~_iu>t4iv76<9-yeZ*X3WJ z7)RZ6ElksxX0Wk?Z%MdqzMAk6;BVCNA0=G>9~azl z$seSc!wgEy;};7(e7;opEJ}R73|5bG^AOnin@rJm6eZd}47QKil<4CtVD(s+N5J-L z9BrPPE!67K=4)W*NSou9$2<4e!QPu&DBARK?$jfXZ-VQ``Ykl|@cDM(ljiyzH1){! zyI|WrO3}8dSpUbs+O|^Sx2NxeotG0S+G8v~06UhLzaN5Q{u=A9z_kY3FQ)~;|h|NlH< z?FP23wiwq0FyDObv_~JigMW&yJ=*U9_W!T6IX?HkTI8@N*m(@T7uY$7n0tfuQ4gPe zz{UxmiD3QI!)ITxV~aeR;qGPiXg3LLTW#JY^0-Sp69-ZJq|e?1;PLD|5bRxYFtvAw zXMGwmY#aQ9gpWX9T*sH!@p2vSO!)P*uO!_5)+OBd8xyYmvV?2DGU3{_mqRd>MyhYhfw?R_Z0QX6gB5j9Dk!71}@=uDD@)h z=_7=8(hv)JMZ3*YG(8O+D_wW5Kplk9*)aFyH()3hk$Wy4BAl=CT$%X>oIak&Rqfz@IUwt^$S@M%L+_kGbe?O?w7?`yW# zZr<8D3fqZ=pM824sYf5H!S#J~p{YloZv)#d`dkC%oA;@&c4K!^Ym0Vk!Jet$-EiZ? z`RM`cqaHrJ;Iz#JaN|asKCnLO@mpR$*jU;^8vwf>ES?+RNe03CYBOK&T{ZjGz8@7jItd)|$|4z4}oT?~%+KGWY0*C+l?eFxaK>hbr$JHdSO zdsw^iV_#lU*!D%!FaF-%1hy|fp}ninl;d6SQi#6VjAhO~Yt-X>zZ>lSxSZN?nD=|Y z>T$lW0ISW%W{k_gYT^H0uv+B(J}}>W&b5W#Rp8X`{e|Bce6_`Wcr{pCjN=-xF`XN2 zvH!0H^UeR}(#PDcq*k|2&&Z8n#~l0vV0~iEZxU0~W6eJZ=9~Y`b3Nb&ihjnwj#|6; zW@>XXw)^WAxa;qF%RdBGyPXnq^I9=GG{5`dYWGnhzt4mD=J{!l{2nND^ScLZe)>j!UjQ#a(=YP-4{(~_f5O%D zjr`QY|BK*tl*r{vV7~d^sM;czFBiJGc(xye>ub!-)Y>EFH^Al)ZNCZTo8K+k9EUMt z-+v2DpD4C-Pd|#rH~-uE5y00e`r7A1)Y|P+-*1D}B8TsQ-NV7ZSMa!_w!+OpJ?8T< z@OLTNV*h;~Y%Fc@T>k;s{$HC4+`1}y8pL%FN0;``&iM)RdUQDq+$MF-en!b)x zo0{*BXHom?w~qEd1?v-eJOTEdH~M@Mu8(@$g+Bv(7tW=Qc0UKJ$6P!Oeu|w~Gxu|M=VN|2 z$WJzVd-+L~W4+^@qhq#Gcc;>I^216h-{K?hqDE)GUkr-<9_(<*+i%Giy}@?zHCLBn z_DAe(w>WrL^as1WPx)EQ+ZsFScF$t=?fqO$>U&Q#o4qPGb{@h8xAjh=-~rJ0F7v>( zK^=Sc{P$E!{i}B+u6hq&>YOu2o&6=9wp;^vmVN23f=Ny>XORqb+A~-!_6*FT=f_a` z#xnd7b~!PPf3f7NK8#!2p5$Lf-}}m~M*Udyr#Nvu@}4;XLReo{r+>BdPk*JnY5dg3 zb!>aK56{tej&dn~4x6>+Ju(byItTk+WY2(0z5Z=51m^IU*wxF;WBCplkTWK{?_GA! zG;SaI%aKcc-@|vMzE(=_bj|!n*yd*-&C55kkLSF<_qAu2x<4>YcD25R{}pHO3g4Mu z2G08@Drb8oa?bn*-P`|U$5y=Ae5 zl}lHaOPBruF5K&ar3)7>tP(A)^85Alxwk<&b#C|fokySUK65IA1LI4hXi2mpS{9{I zHP%D}Vj^)PZa#hP(z(5@cDncAq5W8_iUyq_HlxwXXh<`%kmL;%Yb4{6osxZ$Ba%c? zldP66w%SyyLG2VpKPu3$*f7ShbjzhnCFma4+=Jw;Bad`Nz3b%-?He67Rv8b zR!=%b`*I_%Yx|Q$S-TeL1(rHJww<_^v}#G3#oa})>3D~}uC-X??VgVN?dzIJV=n9I zc*VZ1o!!U^=|&ZoMIRn8}$Exe1_k2*e0ZWd(M-+Q&= z>v=P)F2l}B&FVbx)#V9WtS6jqK53*6`mF8q|MOYb*SSZsSnK^CN~*hVq4YWX2+>OYdS<#jXm9yPFE|+P8wT?Rx}$fZ8>@Lu&?@ z``;$vn*fh{%=ZJPUr{&Mf$3e?Gr&hQgUz14z z7joPy!?-0{!%b>o9C6`p2OQ^wyBBc0CER{Fm@hfNO$Hq2gqsdHa)Y}XaP%9vnSi6u zz@-64UxAwsIBEl~2sru)++x7dN8oM*96bc?R>09e;Jyqv?h@{Hz)_EIUk4oh0`9wj zqgTNF5ODMexSs-!{s8w&z|kAv?giXN&;1&3^aSjF3pjcL-0uNLFM#_a;OGHx_r+0v z^nmRWhT$C*beO(?o;O1e4)rs_=y^Z%;833khu?3_<3Y`9qXGTl&wnA+H@rbB>S#=| zQSqoBFf}-)U-E!MHfvXE1pN|8I1F!5JZc6z{HYZN+%b=-6$blJ55yxc?5PD}!DA1m z7U0$k^R{CW#%_;!Th4<&Z)#^iPi)>w9zQPxi@+%!_GPBP+vdgG4FC(YtBQ? zjE865<&1dj$p0)x8gT3frWZ48e|j&2_~$fRd}2Q;{yXBaBmQ~K3^?L}FF{HtqEs)lu(D* zpflTWhR4Qy+1J+G!w16DHv4lAV0r+Y)xk$v|2%qj((uQ^ckkSpFnm?`vvuG0@F&8% zu8vOZ(N5&@sRSSF(AoRNS~CpKI8ltYK=DEXq74qe+7}V%}F}xMF z^a%Qq)%uv$+dY0=dcOTt625yd_eC#XBe|j|_|eC)fuGP0#DhB_J>N8a8IEtA801M` zhW}nRe24T}IKKBk72_$*jK5`%ZmR^2+*$vl)3b&nCU^OaWL&b+-|e$nb4PDV(2*Nw zgU5$`pO@^EeB<#h&ymA!tr_G1|AGXLeOcSSd$cC*=RS`YwT83(z<VcZ*9!-Z!*<+k4SNWC7#qm{1`xXkTvr&x|N3jzG0su&mge&6mab)O zl}cC3ah=nq&gxk;Z5DbRxg%)1nr}$(NN{&gO&<;JXzon(amHZA7im|ecoJV9wFCDwjGcF{aPMS0=uJ zg(~g31P@Bqv$3?U5_zs|xsMMm?18UtEzNIU)!5zIby<6PRi&eCUTbCL+5)>+m-q=O zbeDR{&FlL$mKtqcM`exL;3UpH=q|Oo(4`&*5c%$Ucd4t~*4(eTN8P3M<@Toj{JKP2 z+1SxkqNjd+aKGM?)j5dNSlv4`>LffCga7S}% zf=?88)M}muu4UBXmcU&AbFNB!J>a^+8ZhhFS*jgoltG2HXzLm~8e=@(m7dc2WW)7) zZ+bH0^$zuvJmIyzy-$r9?%nDsbv8G%qIIm$7C7f)X>-Tr%^hA69@kCXM_;A0+*Pi) z&O;JiSE85OyOxzVuQBe|7nnX{{%>o_trTMg83= zkMVvLZoNZ@e}>kvINk|-!FX@g!t6V5v9Icm;aS=Nn7Q^T_nxZRr~CD7%sXei?*V=0 zhyO>p6aSvs!Ow+1_UO1dCsNftIS;;#R^2w@E`U#;K0T@H z`dkWkU-iqcfqRdf@3mmpBF3x#IyCQ%^Rx9m<`ebX;X8J{be8#DVCNoZMBbfh=F5Gr z858U2drfZs1~7kp>n-;^rxxq$d(Qa7iQf!%O*df^K)%zqg4OhC*4;{Lj(+RN{f$-+5%+T{T(^N~mV7r@55PZ9q`u)6WiSFX>q^A&6t7WrQT@5X$eME=*o>i01w zbDqY`Q@3W7R?Ql&!8fofmL2mqQ{5Qf72m~tpZE@me!iFL+ld(r{yt`&der^_xQb=x z_d~dP)c!Hp+P;6Hw%;V`QTwN0^VFmE&%jmeIV|#i4pxuazX0dQ{Yy0UsQoLjdFo4< ziEH*e=6vi|f2`Z{VEZ!W*VtZ6UvJ7|9KV6P*TH`ab}yH*R=z`ihZ&=8zVA-8i2ps< z_?YV-z*Q`}M}LH?$2|T7Hcvh3{2A;xqRwByRV=$^e}$_@oxg$2Q{R&A?cc%H*B7<^ z0j^@3u;}lfVD;et0^9#B>0NjUtQIx?4X$F@dA$r*kMX<$Hcvh3z6#E+&uj21mYvss z;ObH5zhLv!V_vU=t*~0l=BY>BQQ++Q><{nF&1*E8dek`pY@T||>p-ye^~L^-0XtvkqCf7Ry4dfG zW9iE|`0hFc?mNKmjTqlJu=+>4tR^NC`&EF?+)GmVawI`yf z8}kG;js)l5(UZ{BW9~c}3{wAtL{7GQ7CH%7au9^Z?(|r8R9$xVOIVcoPMpK@L85iqv3OK(mQ_<98 zU8aHa>oOfpJ=Wkb+W9XOmZI*!x9{1uMF^!rVC2lLf;2H0^L<9z+iSBtZ7 zCRlAaUwg*S0`tfBPobdCb@n{P+0ySEHloc2yH?rzF$b<5F=wYS*?U-zrXF*e3sxIX z&B&Vvw|4eja1LBO&cl4L{h6CmffYsa=-wRiQ zeS9zITaKyuUJ%DvuLjq~TDwCl;A)zW<8&O?!b_OrxQ5nz?_5KwduQd1aBHZ?_*a6> zyN))--vm~VbJYy?ou(e&9;?9Wns>zdtHJi6FXCFj&RcU$jVq%WtIsvPidHSg-3nII zx0Y6Z1}p2@wt+{{uA$ZE+|(;zeeIZY^Iok3S820%=6W=B$6{Uw*j)9<>jb;c<~atr zah|c*CtJtsx$OZPZ)`WMJbX8Rd(%4W!Sa~rP2i1~c{kF^9fR-tP2k6Av-kEEGgu~6ZvVzO=AE<;VB0Xq?7Zd1z0OTN9rNFR z?xSbIXE-*KIR7m@BE`dKM`GTu{b~JopxS6`NQRHg@nVio%JE}zd`6Bh%<-i;zC6cQ z?8kLgi@FoRYQER4dnCq|CRm?2MOyX9ISQQ3IT~(` z>!8mZ_eVW){2ec1G1lY3o;NMVdIDJ8*vOjIS5}LZPu|8A4*3%cYP6ijT zsC5cBUu!Cwy0KAf8rXXJBKK7A^wi>=dm7wWeXfCLQZ4#F9bClxcf4zT2Bv16h&dBn z#G>z6VB^%I@3X)&Q;W5m4OcflYMl)(V$okcSZxj#F>}F1Ec%-VuE*3P<{WSliDM^|?mgQ?=-85xAJ)=chdSz5s5FdgLt5#aswCPCdqQ z5ja1VC1}R#b1VyK)uQgjVD~U;TmsIYmt|<`#zx+yVCNNka~aq;^@zC~Y=04R1=u)s z$Kv}*E#j{PJC@*Af$byK|7x%?>gF$}Rg3s*z}5_YE!h4ezXUc$-TW1_Y7yTE_D;uI zTnEmt#Y!~e^hI71*l`AL20OO6GpoSHsK;1VgRP}6`fCA?Pc7ogaAWmF{WajxSkzw& zHcs7nHPEU>d>c4BuXcFMEBdLR8K*Du)`4BW;Map)v*@=2Y>ax;=>%I#U(BluoS#=W znz8z#eh)Z1uk~=_)SXu=t(x&eX>Y(rU~{>j8)DOyhQ)WscCdb*=;t=DXCOP4+u`cobH{c^g8BZTjXB*3 z&d%vBxbx1|xf`w?ecc0Yz_N3?7p@+2x({rgddz7D*#7k8=X5`sexK-PC)oYZj^zQk zdd%rTu(|46(s@1vcCPxO*27@eCp+dx;ObH9O<;4?V}0HX&aTg+@CGb9rpMsw(brqR zu3@&Xx5Cw9eclE(Pd(P>?O^-UmtUWEpy~ICe%=Yr@A;N`My7}n?en}mkl*kfzWFTkkCs)4{SEcCRx~ILmC7W5+VrF5m1VXU_n%h zs30m3M88x85wU=RVg)H8QbhP&*SvGTnSKBN`Q&)+`+lBt&U5O_yc0~@vYQSnie-uw ziowOT1B>!nwOAIVKpR-*V-6j6==O8wPT79vU3So6<)W?h(`N|f+R05bx_V}6*mK#U zxEtXT>RSb0Z8QREqvoP`f`S83>tzO@tblEL*PQ7)4Vyo8r@i!PE0#x_MbbWmeA>*u zo;lqO2kk4@>}!FiPMT2~dv@HbEWbw6-d3y$?wdRpeQ>cMc+T{$DSc;*@0yhoQz^t{ zz3Y+Bo8Q3egC|$|2IRB5r{Xi9*c3dcYo^f*x1i-VA#eB&EVcx9pFXc=cK77D#~j=6 z(q{|wDW(75Vr%j_r!6>W_Ux`HJzX;=cOTt#M!mkRusf&&7{TpYeJe-n+_verT(MKb z??~e8>7Cm>yL(D1ZFEq7CvrB)dDv0hH*ebXk`FF+B`2m@`Ldz1uw{4Fzw~V{b`dwr z4lEpp{X55uIer-Kwej2o{qVlAJ#Av%9zMw|~=baB&E@G4JELX3Xj>>vQ@H)xM2w z`nDGbfzO!LH;1f@^zm!%n7`$UqtUARdi!QIt4oz-ormMoh_k&o0=%@& zw&F;5V}9FXYAiSYi?r=3@SR&CinKuo6@gk<7zKX=~vg_q8r{dYgX@q z1N)|xAuesY?EfU|>gz4bIu1+YZZG%2l%6?rk+BafPSxH;ug8{4qPgabtFb29iXN~9 z+{b<7vwLW~`|!TmGrD@0meSr<%&3*Kzm0Nj#f4z&(dT0FsTIDAd|rv$iyO&jbG4^f6liN&`~Qz~W<^qw_j@nny=NXFsDaEjzf_8$PYKbN}wCUGsY99y7CNDnm7@w{P-k z1+@$+?UtR_S?!?C`3`l{M)8_$&aB>^xlNnr`ORor9z1oeR@$a_&79J|%<4<^|4*4UmfFfmN?qPZ=XI8KP41iNd^hIQ z`|rHYxpO-EX7^0vQ6T!-(WiIyI=BN_z0Tb_(fjmmtiyFnjRiWnJFBs2EAPpSIj2%{ zC#0_R8+G-}DCekAzxV2Sot|t<$HDtPduHbR<{EFrzEP>qnLN9@+pXD*edAJRdG&S@ zGu&asCTl^tJ{y`undPg+p6sQ>R|8d>g$8&p1A|Kz1RR;@8?!6eA^bjT|dq4o(}*s?*?ZcUIu&kI<~KXrxT3$b+D7}IR6{m!$CBy z;wy4<<&HOU1`hgeAg^pg8@ACrj+JG%hS$eyn-;zuoV#?huKnSSd2cUHZt?AH;S2il zw&Gm418YnR!HvFi7WMOMFBbRXZN&xpR_p)bezx}Fl776cxLn_}8hyLEpRK*PrXO!B z?t-6Qjf?NA^E(?)rpEV(yt4fay!08B=QOzY0>}PYaDDuK-H*2we}>OtGOhDf@svin ze}cKUmrvZ<{so^_?b~Gr)X!3$a^a=tsP5iA24DYG&>H7kd$F#VI}{<6F|7};$FyNT z-d1d`e;HGIu>*Kg@4WIJW`A~p&+BZ|Cf~PT+4f>2d}?3$NL;pcct1Pu74Y7!S*5MF zpRK)^W7#R))mhbEoYP`Iw}mg(e?|`@*67zIE%r-W_?7xso7dQ{Z?WIdkGB;M!w>H} zwj9q#!3UP@v=vW-r&ssV=Sm;nTic80!P9v7^_DMx0bU>HKlI}Ria)~pzgM*vuc75B z-a20ISEjvqvxWbwg}>dx--9!k+({ejV!%LnxyJbIM9iYHopnmwcz|&IYzd##?Y*nL z7zXCuf`^&zl5Y#I_v>RNpF90f9*y+h72Y*zPT%ZFjd|GvK9@)ToWc9aIglDLwHKqy z@=M>N#%iD5_|?Ezj)wE_S=K$h#rKRBzMzGl-H#6_&VhIJ_RXAjbXWOYZoG@p=JZW% z#^di&eVvWRUG10ltE0WR8a}Uc((EZy?cadnnv(Ne+jvbV#!%)xIyaQ$`$hOBc9=`< zyP0;jb(7cayJM%?Vnk)%qvESne9soXS3llXK0hyu?^s&!S=x)G0B=0|%6&JozPh%l z2CirpRT}|_X1!`x)HH4}rS@V?vv2zOY?iXdP}Wz|?5CQ~OYt){wFx!Nu~hR}Dt^AB zsZFVAzLTjV@>(~R9{o_)-|POIkqu#)+pyYR=u3OwVayeMwI0mYu0x#wS_g!_b;^z zYg$L8T~X79R@&!k+9s8D6PkO{cP;(Mnp__*?Y;wPH}>$l-S-IBnQKG4&&B$?M#Jm= zK2z8yFYVs*^(UMrulsxN)$V@LUtYI+PHT58wae>v&$W7co@4qiTlvfD{+?^v-A~ph zk9~DYS#BuN8n1XQ5H3XrX>I(CL$0j@?*3IX4TU={Vs*KDPk;HEaQ99JX_+!_FWfi! zs}E%s+%xglW*e??ebk5Yzpn4Pk9K2o-KZP8&B?Vl_<-VLV14D* zX*|1=Tc^CCwHG5Q&G?LGOpSMd8-9a|!&>yEw)SFtWmB_`<7-^4QOCgYx5UJ>R3A`G ztNb0;hVOvFhe3U#Z9|`peKu+M@DE3Yd(Xc9H#dylmj2m)Z<6|`$H(XW;=v0>ho1?3 z^3dIyWxUbqqaL4gz?ZzX^_cKQaIO*Ii%Yt2zwoOX=BE9+k{5i}XvB3rT+I~iX0Y|B zxt_jG-a+!RUiob$TUzE0xc-()J@-^xE#;Pgm#Mhp_6Uh*t~o;vkuGY ztKG3lvM>LC$@Qg=w)oa_b$wFSbr5X4rr6Dc9g}^qIsQI3Iwo@OjhPec+7Iq?k^Unp zo9$;##-m+--MagR9}i#qo~L)u+@AnftIxghol=&&u34@Ve)bx-H~B>PRuhKon|iw7 zmeEgJ+Uo`v#lri;r^26n;?S}lM3&;m@#54H|}9)!>v<2J|71USz(uEJ)eN9nc{N}n5$XOxo|c2*0wy6I=%}@ zj+tX%AMJxN*`{?`#<@R_+_|t!>c0WZH8T9}l6Q;;EN~KV=)S{~BR!w4A>m=)jfwS8$;g3!8g)4fwh!*0&~DciWBsQE2R~=H3}!mhWiB zKNWucbtg2}<^^!yc~btG(*KVA!@mT7@`)$P`fTS`xbH);-wwb2y6c+t{RQrx(60Zh z@a1ZJRW^>#)Uodj_kNQ4#=wUUA70jHJx7%M?j}DPPCU)EHXc58>eQzFIQZoc&1?35 zB7FJhHf{P(f)5|Q`iQhQ9lq6s%bWhE!&#S2`;G8>H#)yL{@;Laf`{Y(ZSXQ+&wl4m z?t6_|`u9C}M~&YHA6jwy_ak`UYK!;GKDZyQX39DL0@(Gum}H*Ve~-@7SM%KbL&?`F z=gzVJ8{BuEtS#TMyb{}6aNjlU%W_PDacAz#*F(Gfp|_iJzcIXipWE7rE8cHD`)*V6 zo0@BF$C6(=I_>+;=9Tz&ho5o(xy`v71wZ=UjhcKMoc7DTWjx1}<;OPLJGSI+G~1g{ z@>QCABAm6-tgpM|hc@~A(*MN~iRUc%@Zoni*UFdRuO78~)Bh`F`4yY|tEK;(Cch1S z`qnnPz;)!k>KN zk|sX^{-0qJxSurIp9Xh7I}WDQGXtG7b062;#bAzz=KWUgySiHX>ASgCxbNa#yK-`P z{#DDmEb}f3O_jdhbN!CtnQqw*a=%@KdrtfPB3!%QFTySFH;i!o{e}^)-ESD-+Wn3Z z?z4#BF2Xyo`~4zZf4^UZYhR^>`~9MB_xnY-<^6sUZajX!2-m(tjd#HPW>L5M%_7|L zezOR-yx%Oswfo&7T)W>b!nOO|B78Nt-z~!R_q#>7{(iRz*Wd3J;rjdCB3ysJTZHTH zcZ+cS{ccg`e!B?o!0z{paQ*#;QRjZgsB^z#)Vbd=>fG-bb?!HeaNF}6MxFZ&Bi#1= zh7qp++cj=~{e}^{{(i#ULhaJDd4-!H`#x_zj@!@ zhcf_k@h!0WefaoZemhw05%4>lB6otl-p60t9V9i+7P0ksAN&s3`~4BLXq(>!tC_q! zn~cNfzI)J&!{-6Z>whm;eK9`r?}M#FJ>`A?ww%umDfdIL`ifP%4}ftghLN=S3~^yq z=YwGD)n{M&=6R@=x|V>|!XK*m)s%Ovehk+~J>&H-Sl#Cl$LptHFUL#UPe^Kxm-qvs z6RW*Pp0PBypCbtVQLz2=`O#P$-^b9@!ygAb-j0{{C&2osuUOr4o&-A<2UK?Z?3u5g zwtfz7ZR;sC^|bXgxZc(;;QFZBmSgh_*tSNIwA+^V6ZO>dE3oxsjXVcdGkLj2Ea!bj zn=!g>e*-o~pSP{c_I`_2>iByflJ8OV`*+|ze5^;Cb$TyTPb|-a)l%P!VB=kpw^QqX z32c9MB>8OV^Q1mUR&D$dtWT2VoQFT5S#EohZTP&ZZ|3CX%I=)#o7mKihDj`261 zH^BO+ABE=lya`tKvQF>yYR2X74F3ij*IVSa<8KacgVht~f55hL8D(tu9kALW@R61F zF5JDf1*ci^Q;`=XH&AQwp`g{Oax32W#e{k#biuPfp5i)TMD#zd> zG<~&Mk9Ay0y^arA**AS03!ih;j7|HpV6`KvHPQxGGkMvLYu~Z+oNurE{cR@w8-S*s z^*0c#mgHP-OxZzb*00@I%4aOFb^BhkJjp${1mD!XLZzqu72%ev`>X_4&seSuwp^)K zdu9mSzHCF%?)#bV+{WRvop#$a&Q-ylMdwz0HMm;rtApL2p6mLr0k`fkBz?78ug{3u z68oB9wR-Gp!PRqCtqry=sxP#q>^k6-wQjk-iD`q%uFYppx!C7U-w$*CYy{qwy7kef zkI$~^w&j`Dp-%35WaeQgSUvZaO~7io7jFjk^4_9tQ<9qZ6S4KUkG252uM+o`aK|#| z$uPK@$;-8uJ-8K`c7MxBT-(CyXXAEo$Ir9T_g>$1^+_GugRMuuMfBI0J_a@}ZH|Y} z=4xqUCvd%u;qbKKI@%GgPtNC^E4$~c<1-a!%UHM1`P!}9^KDn~E)_SH-N3e=GiDF) zj~E|Qv^~*$CpX!q<@N#_lk3|$ET>=kus7JYkH_16zYo~9E$0|(&l#{ESi8x~di61W z-%GUb!PvR>M}RlgMxM2#=JP}5-`ut39v@9|kNZt4vF%^!IUf&ztNELnRZ!CoS`?@~b($*rdw)*}!53a6eU30){8G}!P>tk>}T+QTFAA<|fwEOKR zWAG_>>lj>!rk=Pi0;?HA#^BR%b(8bu7+egt4Q zDeK@mux)6w-`A6?iEkkHJ7Ctqjc~_6A8l#t^I&cDG57*pJ!5bsSj{nTO??qOn3Oa0 zCb0X=Gt{-~y;-05-wbvf<9`b{{`T=paD5Wfm%;0i^h+II1D{Ar9k+s0$5+5#CFzqo zz7F==jDD%(8({mAI=%@`9k+q~4y#Y<_!iiD^mETgQuVOfbS*g6aOE8 zts^n~5Uggo)UT$$_m3Zem#Ojl!R`syrS=El`l#nDeh_R7qbhsmU`eIBc3d~EIein` zL*ROBKZdJWF0rX4wx57~t_}Yw+;@unUh{u&ebjxAa84fq8{06FcH^+_hr!ws%j00R z+*_Y0F~6^nr>>uYt;=tQ+Mgt4Tz?LJjHFNI@+q*-)!J+*vtY}q=QoC5fsN~c%5Gavqp7E!UxVvo_ZzrA8N1(t^-)iMe+RZ+ z$4-03?m4iwjNR|SYPS0Vxm^4Q^5f`V&Z!sSdr_A@+A?-8fwlQ;YPsjZYL1J)ExZhN zT>eCEoBp=&XRvzu_ZP71H1G6(g{yf*`&*^ir)Yn#G|%?D`~L&Y^7?CEj4ki}ufT0v zpVaXxSlv2&zjfXH6RvK5{zxuQtZ#sgRom-ex%f@;7tk}VZ^13A?O){bJ*sv6Z}0@# zvApH9r~dzdQ~%pwd7io60e4bPJ>&l_*!r~D)@$Ty*602BeQ^E#^1tx<`{f64HItX) zkY~*Qp=lpSO20k?4<_ZD_z3Kr=Fs=0POuZX6eF<%L6I~jwO;cAPhGyNR`cWpLOV_a52(^p%@dsVP8WWHAet65jh zyVc?9)|Gy&0k=M{Xlqs)AvgEST4?%ev!42XSsQNO^l>cwW}{|oA5q7;V70s_uLo8$ zdD)KZ$+7ddvh~sRum4uI0bD)5m2C)COUiF$8=+ahc4P5-ky`5B7_7F0b~1JyaCLo_ zV?Kt0-CK2^P0-ZyJIrP^+rIb3J;7@E zeQ__aTH@OqY7~oH5!Tz8${m#%#R@fJc$E zrL8ew^#e)P>32l6#C{Oi@eMy1Y`dxR5U@V#@i`Q1J>iFeEt5TPIM^{>ni}yPfv!#e z)PE${`m{M8_Twn9?P@dTvE*uLZyZ=Hd^~vF+Ilz!?(c zb=L!T-KnRIQ^D#!W2euj!CU*>i>97(Gr?*zNQu7>T#tViTtD^1e>&JUwPhX622Uet zOI>roKI3P8=fX3;+MHk4Xy$hwnm$RH-}zNJ=hv~ZEqya~+B0@%f-`n!faS5B1ejMz(m35vCmixTrTKNRHo80;=r#)?JOa149m!ZGm3*okx_oqd0ebn>*bRO6- z8AZ}=z2}gtC$>+5)iRFfgDsP1Cg)ur%PuC@o)|6w*Uy(v!5yE}eIeK~nS+bKYDt-c zPovqUb6}m;qi@DRd)mAVoH@7@EYG=lIe1g*P|tJ46<~F*XjfL6ZAQDQ(tIY!^ZIAd zEU&+I*OM__0@n6FqTZe4-C;aO220d>ZUH7>hQ?*_hN*<`Qtd%%$**oi@uD zw|dH44ps}lqT-%;_V-GXKI-xL4A?T6i>twE^|`nPepQt`8?5VElDht>|FdA*&}Mv& zqgvYf9N2z(E?dV9B(>{F`a8~Q?mg|FC#^tIPaR(X8*k$HB3R8jvi5HRTUJ}jeFwM$Evqf% zz6Y+ieJ@>dPX z?2O-f^hq5LfvsZ+$#@+9ACuHm$HU;%;aogO(#LZ~Tm76_3+}Z#Dd)@@7548su1WID zS)1H5#x?MNB-eEKqb>Zg8h--(WQ|+rFKc`-_{EAl{?`2nNo>8>RoFU%t?!vix2|VN zzOVg?+*r;3L#)3h{|(7Y`)|p$n>%)^lK+lm9pTS|?ekr%_ZP^2Ptr%-_elA3B= zapvI{9-3m8PHNwW+22-@%qoO#c9@WlprI>Hj$SD7#CY+SHs6=f*KKx4iT58p-)sNO}1imG(Nh<+Z8R=i9kR{BMFCuke3??PK17-vaBS z?tYNh_rr#8uXRb;59?LfwYz?W-3J?xjDI6?+k1!nebRdsxBveoSw8*y0Bjw7_&Y!U zBdI0c55d-(=Poz0b$CTvrqbNwc@|q%LegfP))W6WH0^C@C(x?xw!@9J)WMF0TE=2y zY@3q2hLRkM4)RS%_IWdMW7cmF<4l*^(&wH-|g4{ zO+CMNZwOY)?>`%X`BSc6>(idK-vQR{f8U$)U?^DK{hf9euQk8}rU!>(G|p@^%5Mo4m}HB{_B@ zAR|e>`}^PPrrlAM?wM+TM#HT~-Tun!{oM{9uc4&$cU!Ri-JU%CJ&-1nW^{lx=!2BuKx3=rRDSs&3HtK8mFf{eN_Z|+m zUF*^2{MZ+D=f^QS66`uq*KXg{($3M~*1n8GQ;*Lvl}|mEW6{(T%W+`KjVEbaRJDI1 zSeySHwQJm%P6G3%{QjrixEy2k#C1gWNpFLpyl)qDS1E!MnNk2~o>yur`8Po$iF6*T+a% zr#n>G`{Rxz*X(feJS)zmj;vXI=C|+#H9i>o!W!>@FRFO@-3PZF$L4hKY?AwL7AZb+ zDm~v^=EBuHukxHT4{lxBoD<_zOC4u`)pEX_3Fc4v-mA?r_C-Bq&H}5shP>yV4OX+= z#QSl0YrLO8Q%}6-fYlo3YvcR+xp4lJ_ZjQe#~2(xZN}hyo(FbLv^jS2oOz4Eo_Xrp z9cwkqo=<)u=~ESV&MpG$lm2}gZ2$6{aWPmQuV|N4nsV0Or4W6!Sx3&>%fPm&J?HJ^ zV0Dw1ndfa{yaJ&fb~rk*ECE z!Rncp+rYMKJ=)wi_EkM)z6ExSwApXDe;333cstm0(=yuhaqQI7k2}GweZ31!JwD&A zeCn~@ji#PhzXP`1c#^h7jHNMr7p(0BQtoBn1M{c6muXL5?g87EjNkVwKc8i_-Al3$ z&YyLNojd)~=O2RYvp(9g4u1sJmiwS^LnUCEkb7)N>#F zF_=H)J>o%tW1&yR=wYxvN!e#VLE}%k&y2&i^>x2!%YJcx??v+3os>PYM-A@@cE9XR zp8Mb<)RFz-`hKF~>BpmR%Y{Ey@!YQ-hwG#6m|LG({GS9HL-@}sp7KA3>!Ti@r@+>e zbLnZYTKzux3%F&qxt{F*GhlW7jK#jFrQTnHtvCExus(_9SKuv4>hXCFT=)4kTtD@^ zOZ*0G-P)WNd3|2?B_6MpNY0DT6Z?>yi~Y#6j($%$_4?WJ2Q>A>_#*fPl6uPh5p207 zq{RIvH1(8w8T=ASJ>&Ifu=Q!n^Tc1k{3*XDXixdSf}ba8kMG~W{3(64+jq5k-$!Bh z8bPw}{&q2vWZy@V8?WzXuToBZBr|zB_@AVGNw1K!rC+aswb_=q-qrz>_ZmS;Tl<4; z>p=3f^)Je)r>(c(w)G}STiW_JSetE$>unuEd9N{~v^BQE9pnd9*gbVH$ruhLci+83 zUGI{z?>f-ixKW2&W``Pg%>4f~uiO3qHLvsCYuxp{&Ez`t3^o0ZE(Ov-^Kw=OWKoAHvnVqJ30p%F&pv(vOTYy7AxlECaE;{@OifuH@|b zND8-YeLQ=dUp3><-VRpFv)TZ-n#rrGlKwTGGX_=u^}pvd7)?F*jOD;;NuEdcd3iMJ z*PieED}dD>!JhIfR$R^GxnTK~(Dm1DUtF7NiEU-DTK$|F0$0D6I{ck$6|kDmHTk`5 zRk->))VVsjm%q2EuSQaHpNP}e8sOHp)5K+*tnM9>l}Ok*#NGdG1w5S<`@`P>M>7T8-Z=xSoOD! z#I-S4yKxOA_cAW^4w9O2i4)f*;MTY{MN`jsZ3b4$c%>fm#I-rtwvAPP+elnnfVCUf zF!IEuz9mV`xWtKTE3k3ZpA)x+t0%5)z-oyr^_VBFZNau}toqxAacobXIP}?$q-Gpq z&v5INt7p!31baTqy$=nCd(OD-cLK|OPj!BG29F|F&%J*auyts&%nsygV$bN^NI3)c z2JcDAf19-rSk2_+8DKfjZf$9IU$D;*>bW29r$*YCLYDFTS4+P}g4J@b9tF1kl}Xwx zGlE<_W%dWx%Nzi=jL$9FEHj#1J!Qs#ttWgeSfB8NDxTko4~DD7ehAp|`3?3^uytBb zw8Oxb(^u_r;yE0wuQucI{-q}N-sPT48%M#N3%PTAG}t-5qdKd`!_~%-TuaB1d%4%N z9ZNcaI`h5)Z_CVu=AaB@4Il%O!chu?}6_o zX-i%AfUQrPe#Ubz*qF2#uXC=Jw!RNGp78s?_9^@a;Cd`SgzKZ8SbhZdc|%)bz8`Ge z+T!;hSp5N#^?L?91kM_A{mHc%`@>-4HE!3UTpQ2p$mHfXo?mk$itzjR@82kSI7lyL!D{vQu$SQK8RI{K)#~qIe}bz!=6@#la?I6VCaF2*;NeFWA= zJ^P8~3U!kg)s*YeGeBGVyewF)J{N6h>e(ah;0N$gU&K20`D6h2UMkh*I`=G5%X|(5 ztK}VH5Lhkt!IeF6EC=^IsK>E9ntIw?5v-Q~KNR=VN^s+^@28c~)bso{1Z-LL{IO=Mn!+J?AaYJN~xEn1e_JnH`{)+#zp+=h`)}-pTi$>yAe*dk#_*=jK)?S_aZ|#L!zyH==xc&<(?mBZU$1&fo8~^{L z*CKhw`~NfT+VWn!cBSW;Y#q3o?^W)@^}t@9pW4xDd!#@23L1)r_Wo%Tl>5XTB*|~*QVV5xh`#6?3%Q`Jj-kk_E|=M{j|Hc z)E#HX+j6d5=f!8#9V?r;@4LgvcP4ph-=(sf+fV0uSFm;DeRnsonrp=QmG4BdF54An zjCKdRUsKl}aO=u9hCRWKh3`<>Qf@D>w%n`s23wc9>uXm7uoCl|5qa7> z9Gv#F+g^SzJEF4LKmF3ykzm_S9YDQf6JKn-f>{-(I@`LfNj&im#KX`$v%3n zYO@{J;_=|sE8B78a&5+QBG|oexf8(h*e1v;+eu(~Vm}3JJC-|{T)qcS_l{{N_-Jz5 zvQEqDqwlfg+7nwB*x0hRCxNrJwWYnu;L=7N6T$M>y1{ChvuR+psigQ!2kR5w19p$) zzI!U%vGl%cdHwY<<|*XbQ}#5lTAsan!D`OAK92bexc$ohp9xlT9e<6r?RSknxMj7u zKTjw3a(`-@MN)H*iPQdUu;ZAv=74Q0du}dREqiVrSWSQD{0wmBd_Gtn+X8Ur{7kSs z?Vb(JoSy}jXU;zkcFt|fIxVYD%6^~oC1?irE(o2RaG!Rf#K zSp-ji7J}uu_noINKI+*wi^179)}>GRj7wgBzUri$SN(nV6u9#-kvz{$S5q#}1%uJA zYvFfS+%wJh*-yb;;}?*pPZxsKe^{-Ji@<8Gsk}RU8m{hIxrE%ywW5A8NzK^AY3ow3 zZPnkMFGEw$ed2Pkn(vE_dFnCGyTcV=+n$Jz{V~dam}e^-oLI+Ah(jI-rKPH`*0mtWiXzKZW-_<+TK#?SLAZMM;S#V~ea}AxS9h;HOz!1gQ~xnZ&Ald0TR#D}w)Imq_1v@m53IJB z`rPxW$2@!f5wLB$Z}qp0oJEg z^_VBFUx97gSoOCJ!);@*B+W!TP8lMZG?s{Q<1*`Ii0gBHX&Q<@|lA#6_Xa80EP?dj58kyt+uc(a#R@ zNi{sV!mj@*B>Ov+-1}w+`ODOo`=&mxwD8wk_`h5DyDfah_Wt#4P~)~Yw1sb7y| z3*WBdjl6j-h4#4z`@S?*nT808^}dC)e(I;aI3= z?*FNd)2rl}``5swj=y6i&l-LMY#mFeH~w$J)x-Y zdxCm=27&8+7!21>J+UrVVt(r*PhHD{ZBJWbQ>({jjA>^DY{svz`$V3#w32l&NYkqO zsAs^+XzF?I8dCYVmY3A}xC*+q)U{gWw<>wsULCBS{;UDEoOO+CNO>F1tc`@X0;!}kKK>6>v;i~rtW?|b3N!aKi0lKb>x05Ke>hXw(tcN&$>PUZX5Nre;}HA_T^Zx+89#G9R#-A5>m$OU^MlV zI|QsYo`G{-?Bk(u>(iFH4gN*mvb_6NU^hbfMPn&b>Sg09~V=@k`mUpsa zz-r@3iTPNtV;34>_ zr~OW_^=eB$y1HU#C_+IX|bt)zWqkSZz8f{W=wF zUD`ZP?bm5wW6);5Tw`kK*9@@zQcvA8!4pZ^vKIQl_E%f_ItyIy>uk8%>6MRtodd4- zbuL`3KCkmyeCET|PGK#kZ)d{Jil3;OC8zk`Yf#R!SF>ju6=O}zo5qTzqrQr zzodm-UE}&+Q*p=1*s^Dg@jSTw(Pmuotiw-&?VmPdlzUHeZqEmM4q8T=KK4^R zYvfa4>rQ7HmwG(Pnw)OFiX32R6>|>%fj> zo{O#r>!Y4C;RdjJ*7oPYYB!Qn&lkYTs(^L^(!bEZwF@?FMsm|oLuc1*MeOiGLqmksyQ&fd;Uy>T!zH$RI< zpGk*~`1G5eQ18_DQP~Rsqmt*6my#{Xwj`}jO8XxLWlX0&ZU2mHmxQa5jQY5u{j=|^ zyNBhb-}o4Khn3pVs$bdvYSd9Cw9Cabony~EX>;_`bgH$=mo`VursKQEuCLf^7)$p} zXWtDPZcS>7r>Calo;GBGr>}k#Eqdl$W#{zFV$OK%oK!1y>{&A}tiE^M+9$Wxa8L20 zCOivUrS3JnN+7l?vIaLfwsr=+A_nbU-XW$|PLL(J^P6PVexaXOqubnZ-RUcIqD zy)i@jg=4oIF>v%~IdnLBq!;D@o{I5yjHk5^>bA)-p$x>K4@=8x&q+oU&%J@M=Y+ep z!y(vvv}32oPJQ$)V|8?o)qAvADw3Cba)B`gsIP5oK9e?t%k4dx&wmx&@tQO~`Q^VH3 zFWu&QCY@fnJL-XX3vgq?bK0pv%(yh>ZtoWxLSGBoiNQ`DFuy%G+sC4Gmc_56+df`P zr$=Uhotj07G3P7fFG(X8wZWU(iRJ#O2i}S~i??IEp!Z5{?u132zhd}3;>-Kt|CT!_ zsxmVfk}zjx$-I{3M^D2NY(+&gi<=VWlk~Y2^WWt|%xwuAbF%sGNGCtDO2+1dvDw%O z>BQ$G-{O3e(&+;mebDb+3HkC8+v~lUw>2NcKAeepTEB8W)3z_zPfV-~X#&dNEkzt!ZJ6Fj}+^FjiLjdu&? z9K5F`3H|WS@aJv4k-%G@W$F0vHm%RwP&ekc@({BkAui&hx&>kCeu!tXDjkkxxi#qp z3GdW$>oJ$ozN-`Pp5IA`#~*u9@=JNKy_ZlQA9^ln-;nUzqG!$x#_yjhElU0apFE8S literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/4a8e9f28.frag.spv b/packages/ludic.render3d/shaders/spv/4a8e9f28.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..1367e14e6536a948988fbadc09d021a141c74e19 GIT binary patch literal 8712 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 LkMCC6e24!xmwJK{ literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/4be7acd9.vert.spv b/packages/ludic.render3d/shaders/spv/4be7acd9.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..25f1e1077ce58cc27955ab553070516a5430e3ba GIT binary patch literal 1316 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/4cf96468.vert.spv b/packages/ludic.render3d/shaders/spv/4cf96468.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..25f1e1077ce58cc27955ab553070516a5430e3ba GIT binary patch literal 1316 zcmYk5+fGzL5Jj80fubOC^MY^?MG+l+P-9{gj3!9J!x$1@36T?Xl5rr+K!{KH1OA8p zgg@X1`C{T)=X8TT+0#|Kc2!qb&(v#6!yycX(J&I8glbKM8ccv|mHWol_Ex(;*lRz1 zR!YV~y%ee$4;Mw~Gxu|M=VN|2 z$WJzVd-+L~W4+^@qhq#Gcc;>I^216h-{K?hqDE)GUkr-<9_(<*+i%Giy}@?zHCLBn z_DAe(w>WrL^as1WPx)EQ+ZsFScF$t=?fqO$>U&Q#o4qPGb{@h8xAjh=-~rJ0F7v>( zK^=Sc{P$E!{i}B+u6hq&>YOu2o&6=9wp;^vmVN23f=Ny>XORqb+A~-!_6*FT=f_a` z#xnd7b~!PPf3f7NK8#!2p5$Lf-}}m~M*Udyr#Nvu@}4;XLReo{r+>BdPk*JnY5dg3 zb!>aK56{tej&dn~4x6>+Ju(byItTk+WY2(0z5Z=51m^IU*wxF;WBCplkTWK{?_GA! zG;SaI%aKcc-@|vMzE(=_bj|!n*yd*-&C55kkLSF<_qAu2x<4>YcD25R{}pHO3g4Mu z2G08@Drb8oa?bn*-P`|U=gLge}^x(mR5fX+*_&(L0J>^G5)KtB1W@Tk(W#;bK>V0d2U{$a# zm?$V2oV$FGzgI`CF$Z)KWs-?mbcrY>w6!pbrzx`8S(2J-^$W%h{^iCha6vY zlUAruW;!uC^KdDK4p zv-OCREk&L9pJz6W`2U>QJd(LbGFw|ld@Jwp-sPKab$q`F^Ip2BbT)pQ@k>!ga2v`> z;?Ep}=%ZWa;SR?sL0gGsV=a5s$y!-Hh{Iwjiu3CuTRTfz>9TvH(*7>T4b#Nad#uvS zlA`uwcg1zQ7(ec~UKFPTWfOHY7H~g<{eG>3VOf9F>oDx6yf*bm?G8hvrS5U9k=r+d zm$eSUsGmhe7-b7doTJkS&N)8qabwhJxx5*dP?`R(k#>$rtptYD(^fx{M&lDq6U zRYXOjcctWtD&3teddx5^k|gHb8rN@z;Yy^CIZW@#!!kAS^QyB^`rlC-iLxM=t$Ge| zq*s8+w}xi3!sHp4+(k}q`Iwv<;W3vR^p>;IB~KXRnrHQEnA*pl&+QXt7>7S_O>K&6oAWq)gPZp_dJ)`b9!C#?i#?8>1GnUH^c%R$ zdaY+M}rytMOj#8OW!#Vn^x@(?`Gzl141pQnc) z=bO+6`*L~-a`F{9*q75+kdybw!M>b6gPa&42m5k*4s!AwIoOxee~^>&$icpxUc~pV zuH^jh12%u?MSeW43S-aW1vYz|WCc5WBt_1Ct9E?*l;$>B z7GdggN|SN0!qg>l&Qp)N$z7>C|p(#y#+O5b?Kiq*`Y;m4%waMB4o7lBjnXbQb#_nd%y=I5+VQ=S&6E%yE z_(Pn*)CL@J;XL(9Y|*C%kzr@EcGMO86I!v$-Pj@i)0%uQ@~5i3$-xII&f@>HFvIRW ztUdM3`D0qK&ztQ~*1o6}AF%Ha!#kBpCnP|R^Dk9OaQFwNh8f(4ty2y)@0vfa3R^xl zwYRvL{_EoI%tkY2j~Zv--&Uf1;lNNXLH=8~~zMql~F;lGnkSrg?s z_}}HpUagEjWOGXE9!)s>WB;eVm_3}?d{X;qP4n%b_S6h@VmgPkhyPOd;_EY-oP#%i zpVc0JsV6&kM0@zJs&mh2&sli8?|JRH&yU3m!tirCM=c-K_M+4)>RCKcV?IF)?R} literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/4d4fa91b.vert.spv b/packages/ludic.render3d/shaders/spv/4d4fa91b.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..6ddc4cb2825275c52ad0013644c2513cc4e63e15 GIT binary patch literal 4052 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/638623c2.frag.spv b/packages/ludic.render3d/shaders/spv/638623c2.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..215edc06d5fa4f4b52d43042a0c6d388066d1dd2 GIT binary patch literal 11396 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/638623c2.vert.spv b/packages/ludic.render3d/shaders/spv/638623c2.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..25f1e1077ce58cc27955ab553070516a5430e3ba GIT binary patch literal 1316 zcmYk5+fGzL5Jj80fubOC^MY^?MG+l+P-9{gj3!9J!x$1@36T?Xl5rr+K!{KH1OA8p zgg@X1`C{T)=X8TT+0#|Kc2!qb&(v#6!yycX(J&I8glbKM8ccv|mHWol_Ex(;*lRz1 zR!YV~y%ee$4;Mw~Gxu|M=VN|2 z$WJzVd-+L~W4+^@qhq#Gcc;>I^216h-{K?hqDE)GUkr-<9_(<*+i%Giy}@?zHCLBn z_DAe(w>WrL^as1WPx)EQ+ZsFScF$t=?fqO$>U&Q#o4qPGb{@h8xAjh=-~rJ0F7v>( zK^=Sc{P$E!{i}B+u6hq&>YOu2o&6=9wp;^vmVN23f=Ny>XORqb+A~-!_6*FT=f_a` z#xnd7b~!PPf3f7NK8#!2p5$Lf-}}m~M*Udyr#Nvu@}4;XLReo{r+>BdPk*JnY5dg3 zb!>aK56{tej&dn~4x6>+Ju(byItTk+WY2(0z5Z=51m^IU*wxF;WBCplkTWK{?_GA! zG;SaI%aKcc-@|vMzE(=_bj|!n*yd*-&C55kkLSF<_qAu2x<4>YcD25R{}pHO3g4Mu z2G08@Drb8oa?bn*-P`|U_W1wLJ!@t&d499n-}kMx*Is9zefGWwtLr;< zr$V7mVVA;y!mE7>*|lq-FG>NeK5J*qnLlSjdq>lR!;d)BfFXstEY6sr^y^2fEiRT@ zbX2j6vB$At#Oh-ZP#u{Ig@@?aA2sdMA7vMO?ZuYTL0!!gCxQDDKajRD!~F}p(v}yt z;66-u<{w7en&JAwNZPJ)Y0125`wlT9&^xO$tGrM=v-EbF^-R>RKSzD1?- z!bKeo&BaQk+T4uXJ+9BJv%&rgitVKy-RH}_Rm!amrtBVXP^P!HmKqzF$_hPt`V6l5 z&R^EhR_#diA(>uYP|3T*Tnx?hrsA@S)%D~Vmg&vqwo+{};$B@-)T&;aJb2_9p7|CP zTbg$4vs;h;e|@sG){ynd9#Z6TZFbi5#%hbtyY@_X&-9M=hH6`RA+Jy9dxXBISaEXe zS)s1UJwvY=TU&>tGK~e=$W7E%W4CXw%-2|{b~ZJ%FDf=wm-OV?yOyiGIC)0_FcV0Y+d1UeU+N;%3i*8`Z{aA zt9$v@>tpjU=MBAl8{th$_0<(Ni&^2~E#Oly`#eV5QZ4&R!0WU9kv-CCWj{`5MZ9SQ965NMu+$?ZypROyMs?MWQ?-FNq^eZd@_uNUpp2vkASYhJJ5*BjIa6YviGPjd^WkV2?O`fcx_(+W@ohVv++dCSRGuUQF=jb8Xz?Ds;x~l z??Y`{qIrI)9ZHAjYYl4C63x2R<|UeEmfAUq<~gNyZlZZUsWl~<=aJf?MDr|Ct0bD| zkXmb^4bHWtiRRg3+=@i=+)-PTXwIeD+C=lbQM)nGhUeO*MDvU>?!H9xY*Bk8(L7hw zo=7y$6t!)M=6Ry_Y@&IVs6Cfxo+WB8CYoo6+AE3X*`fA&rq$MzXGglG zg&u3svnA~(@7+($e$%pkwe{)wqqZW^Jb%=i)YAn}oegN1@ zzvqwRdC4!PO}W2yT~n?D{q8^Jb1er?^SRIH_npu$PyOyU`kfd3^3?C%qrY$Nm#2RB zBK^*z{pG3OeM!IXkbZgUcaPHV`=nnU{@ob0FZviBBGZ@Q-9g^#XlxJS9apY@G~992 zv@vk=iq(zxJu}|C#`})xS2x~y)vqr1{m?HTK`+<0d0f9@$2|mYpRt(NIGBA7#MHtf z?qIZ4FU&ta_#yBa7hFDhBzeYxM`K?4<>NC}t9Js}+>RIhIi?D0Pq=qd#7~6x!A5cS zQ)rEqr&sX3xr3=VjB`GwU+XZ%CY{a=Urge*FN|? zUyM*PEHo+ZcTjo3`r4L|?}Z zZ2em5*XMkkO6%IPF6U3~JFn(^m}frb{$%{=wED~!&+{xW*R(2fy zw9bXKIG((kYZ2cLkMXT@3C6FmnfAX3WGBt+ zt7si3=HfSCYm3}+_b;{R|1{XWRBpd#uz`<`Judi5@Fn*wpBnGf%kZehIzoR1EDxXc zIFQfOI%B-P4xaFx;qDDF-Z1!ouNgHh_{ds(Huu&ys>Y{>e;WMZhvrNPKE1}Xc*mU$ z_e=@@DtLAHCC6IdN5IzSJ`(;lXagU;>9~0J+~2+Qo9}M8Qt*2rqjPS359lns*uA$r znDIMiL_YU_FZYH&fbEk@|JS-VJcH9X>-}RMsAfL7=Y?0~_k8d&|DVB;UpaSmx90x~ zqH*SbE)P&MpWO4rE9U0~_|~B(O$+{4_=ffCyXXH!_(dab@8&PT-+s=}DX~ue2DguK z`l4>nC9mL~LtaO+bGfEjP1#k)|GtjmerBv|XEEk;ln_m;rcI6xc(~> zu76#^^zr7cK zD&fXI-;2N2i@%X@7gHZB>M_6Hm?`%=Gr0Nv)=c@hUfl1^@XsQCR>FtC{q79E`TX__ zuHWy^;MU{!XK>&7)d{!1-<{z%-fz#8`~4Z*c)veWzA54Mzdzx|Z^`*&)~Dyh1y~iE z!u#i1l^?^3HfI~=Z+&(Bu5GpH_|5J2y_#o=`Fy|mXN*i=o^${4L~S#D+}oC7YD=)! z$ax{H*FTBZw+vJBy%IaFXOQR4zj?sw`lJ38VC$dG=$<*3V4krnvGG{c^2s_rY1N{ZwP0&e*YCce7PWi=oYwM5c+@g6kMnt5h3Si0J_WW8^_Z7WgUzSU zvD|aiqLypG)}pT8JxVQV*#J&!`3(HcYPl9&U(|9P*jm(MUakk5PoHDCzo|tnH-fE2 zUBCO`jaaPN&w_n!>6*O>t{yR;1266s^LeV!j0S8K!mJ3RjOYZv)#;J;wYpIL6d}7xnp`-Hut0e&4e@X}x^U^lievj`==` zeO5cseg$)Wf`1ik?be|GYnUM_svg6*ds^L!sT=2?H_`!2Y5 zzVD%_N6h!ZuETW9AHdaP%pZd7rygV84~{YQ$FqF^d>^LYXZvGXFQ2WxA7MYmd=}!E zyPtrapWqLH(`WlI+!%G|_d!}UpM_(X&%Dw9XJGpWe+2A(#-^ zov(E4zrxjHt-c6$j{0HxVy*rStnVdk9(Oj1_Ek(h?3VmF{XO@+O#2FEEzi@c$2xc& ztQPzqU~7wY@K3OH%*2eV12FwE9{$+dAf4^Z{UV+{rWB13nO}=J%=ZxV#@`E^~{c z?;x;!tHimE27}e~%ZGqnqp==_!i`an^{^{g-S1!T$KTLuF~)A-bc_*jwaB?USk3R{ z7i{@^*`A;;;>Lp0TnEC9Rgajr$X4=f3^(INve%yhG5vKkG8adGlLG-Fl1}4|Z+Gdp-ef%y_h@ z`5kceD|klsIaEKU9(mpgcKt`5!{FwbnB6(}UpN^?phk0g#r(yac*9l5F<#1Y46n>-9TS&3QPTJSTxYGiK8|{z>3>fz{(4 z-VL_jsrlG*z-nHhot$gRp`DUzebMIeWZX;VqS@bg{jSk<nvI|>(GB1 zSS`-h`Cv88%f|bfKzlmG*k*9d>ltwM_%3)4SWR>97)frgPxxan8LTtmgZ9GxzPj{QY7KZ@|>t zzr`_D5!`#M1!(H=4c!P<^BH)CL>}8$d0vj)1a|CxnDLGgb(O&St!p8zmvyN(V`|nV zj=C0stt)+}%W(CWgY&>@&VhAB9^0tve6V9%tMQHzbydLnt*eFB%evGTV`|nVj=HMg z-gUL2smFX>09K3niafSaR~y)|t<`wPu#OJesKc0cOwBsP-e-Nz)m^i$sik1+ay>1f zmB%;gGVn-Z)b)4Ks>OQ02<%=H_joaUF+AP#K8U6sF&_e(CyiMSSC6x01=xP-aek}> z^GDT%g8n#jF3EMz9Aj2taZZ02Y>mbY;$J=8*DeL~S9mAp^LMU|^ZqWR)gQH92JT(! zZ$BNuv02`xjjPw0Puz6yQ-VEliFgo|e^S%Yq z{`#Y?FM;{X>eBD?vaXxJ`W#~_+Lyt%<=pr6cChcO|Ia4RtUJKQsLy4MJI{B5)ip00 z&q(ucg6NNT{43yH@Tu#+l~yh0;j3V^xaY5dtucNRd>w3zdc=GK?0SosZ-R|ekGyw* zw=u5k&6>XjS2NZ+^r=P8&EV~MymS9;xSDI-cztT_bFubp(|ynV&wPHnd-v{=0&Aqfy<9EU8!M_Lgy@_@3eYi2|u}A#?tUd~h z{qKih?@OPxm_yC6{q6B1aPNKg$7t&Djr|j_TI_odf%(h!y$1jfV#b*Nep>xe_rqYv zjJ`jG^T&VB;@?>Sv2RBF&(O>f@sEJ{%WAc+_hL-ki~i{QbMSWjaR&YZuI3o-Ex!VL zxwq*1CH5Q4=OH$a>*v?tZM5-S@hIFm4RgMYdkoE3{noRER?X+^Smrf<_zt8`>N6(B zd>m~5xRG@ig6*fzF}C4Xi=4j$t3}Qy;XaG_&ASb5j8|yeb4@w4 zr*h5rK7JcNjb?x2^_$xoE+$5w|J~wf%>RDqT)8iJ?Tj5o+yL5vm~%9UHfr88*RSPS z`0plrVQL%To>P10TKs<6C)a$w`+>cDzUup8YK|d}G4=;L_I3Ffqrqx1#u%`g&no)c z#_y&Bz}8{i#-_R70ylU3yU$y}#)rkf`@9WJpKHQC|6we(m^1e!|BcOSDCV3Ep&f>K zKf`I`9eziykEe}ieJEHx_6vWb_|B??~`rnEFbdrF9*JnNMGw zS4V?+?Ag8RkN(Gi561LI?6Kg8)$hHl#l5>;{H^G<8y5FI0_?r-PV0YbcK@1;884qj zJ3Hsz&s6a7*mO+pnKuJ7Pn>!FyO=TRvEEMvt9!Yo9Yf7|JDv6n%>8;kW?sKT--D^g zIA?+#C%((x3syS|i|?}cfqkbn-*f9b2QyZmxt#C!XSiohKagwYiv6JhtZuHjk8{E1 z^9rp9R&)O2U0wh_7t?1RbF8Bte-kuf-kUMbh4ZUsZTg!qwfMbI$~AQ_$LWj3np+4q ez8Q=ATLe~*{k9BN3yb~sJT&v`cg@IMGyem9V+@M` literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/676965ab.vert.spv b/packages/ludic.render3d/shaders/spv/676965ab.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..25f1e1077ce58cc27955ab553070516a5430e3ba GIT binary patch literal 1316 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 DDo#WX literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/725523d9.vert.spv b/packages/ludic.render3d/shaders/spv/725523d9.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..25f1e1077ce58cc27955ab553070516a5430e3ba GIT binary patch literal 1316 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 C!t@^i literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/79b77ed9.vert.spv b/packages/ludic.render3d/shaders/spv/79b77ed9.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..98853275ff16d67edf1189a9e19261ad4a6854c2 GIT binary patch literal 11080 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

FhBgee50X1 z_11u`sXudj1K7D$@4*|<)UzgU0;`#yytUxuxh8Vs#Fx@~K8^K!t%G~MnzWfm2Uz_9 zV%F1cz|=0oeoKvwv_5~}cc#8hOwDg;acXyi>$Q8()Q$0+UJkB*A6|i`p0()(o2MSF z53Ifk%X_yU>^o9l-j!Wob?5dlzPEr|wBdtrW41FM{X<}5)LpLuTD8QFfYmPG9qo70 zC|FJN@$ZZ5^=35Xb1>twE?0u<>+)7K^{mTP;QG2;ji#P8cpKO}^=Mnb>epcTJ+c+d zPw{(1|FzhS%y%l78J;In+$vyWrNY-i>#|)pH)+1GYc&^=&Kn_-3%a zn=tpveZK|FPvaGse&=&Nt$OzUz2GtY;kUw#Nq_GHd)H&GnYG`K#!q7bW)1U>4M`ysgJ<$|)$55v_o9~;kR*5GyoYZzyLx6!J( zzP=Ye0``pVptTS8{-a>^yca$OR&!r`FMI;*<9k8h$1yeE3*wCRli=~Oj^CkA!PPV$ z$LTokf`1xw9Cy;1@16Thse5PTpM_gPJ>&lz*u1-GGyczm)pM@C0KN=U&)+>?1gmS_ z5$k^mY#;g(_hqp2)?8ELzJg|~KG*aPTD6S(t6(*K_tMJGU}as~uYqUM-b1U;xv75x ztncfXbMsz(6WpS$-kJN*)E$d?_k+z5Daps5@G7_Hp+r)YO$?&FiR)_)58bg5@7 z--kQS3(L9x0IcQ{?T4kN9PLM?=6PGi``mlI)P*YCUSR_f~e3EaMoaeU9v{uFxx zI|#qymmBv-ZrtgZ|K{X=xVJttu+xb1-|zM<@pRh#Fz?C!wEo+Z+AM7E3ZGr$?KM8X z#*eD;Q)_%hjjyWlH8sAr#@E$&Z^_-4Y2X7e=ePmxJPt0kF4p7_@S&yV+VvCT9XhPk zT}$UL&$)Ub*mVj&9BhpD+1w*AW7Km`=Yn%j^S*cynz8!q$8}Xp-FaX&-_O=P5@SmX ztk0ZwTJ_|-7+lSH3EUjlL7zG9k9u^nJO3SZHgfv)u#n3{DG^Kx)ImcAE*jZ;tGXM#^FEo-*~u5Ns4ods^k(%&+$+EOerXM@|Z z^mh(;8K$0?bHVLcV$K5_r@pP6i{BECL0`uCN^pIRmZKS~&o%O%s->^3>>j4ZMd12*S&gP{Z1P?Qc3#<= zi^0aJC*~5c{Uzr0VB^#si|;43#J>UTSi;{3wvVj;o504Xo4B{$ z2{uOE{I#@diSGb=r?VE9f$M9r9?dv?$=d*SoZ+2d$Cf*@5p0Zl#?l40mcI1Y4W3h4 z;(Fl5>P!90!LzW`zXEKWy7O8`tCsjp;Oe~k;F(wY=|?k8U-AaPu3z|Dz^+;P9RwSr zo;pKdYw63phQalDji4E;FZD;k)p>1(8>jBPdTG^+pGJEnwl8)z_w#Dnw_)qBt1x4x z(q4n9C+1r4I&2G;n5|&-jCUK@ysg-p@;l;su>I+qgl)(2-Ejk0zfbykJJ>T&9m_l5 z>fUq5c4LA0+lV%EdMCI#r+2}fceT#D;p*w@J>Yd%bxt?I)ibA?!RD!FPPc&VPhWjb z??uz^lYVXmyZ_a(ybrFPIlUijuKKoeo*w`^SAD5<8`$-!j`@Rd_0;+h*j)9j&xgU) z^|>9s4y%r72V6aUeFW?pR{Q!WTs`aaF|c{+S)Y%C?N48QeLjJv-zWXt0j}@)C(+b1 zr%!>+RnMI61Xt&D7regbpGH$pU!N&ss&o1*ntJARH`qM&%;|Gr`_osS)92Cj`=p;Q zfa`nyMKtxy=}Ta9)wh*<{$;Rp)t6dd0b8p&=6m4ksdX>dT=mrYD%i82?@x?c?zi~= E0|Y@jEdT%j literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/7ed7de52.frag.spv b/packages/ludic.render3d/shaders/spv/7ed7de52.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..ab4e510426f151e3c381bfe3464da3fa39e43230 GIT binary patch literal 45420 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 Vk|CLi$!06bREko2tu0#qmQqVm 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 R1)BGw~Gxu|M=VN|2 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/86f427b0.vert.spv b/packages/ludic.render3d/shaders/spv/86f427b0.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..ee8224ab1e994f43ddd5cac1122ee217988b3bca GIT binary patch literal 9396 zcmZ9Q2Y6NW8OAS!0Ll_Y6cxOPd!T@Vial7^tr}zcEWADOH57(v z`w~1RSQJ)U3mAeysn7CG7 z_Y=YORjtP@fjbFvniJm;xUsMv%v$u9>W3L+OyMfDzP4Ih?3s6EsI)oRaQ)t!q0F9o zhlWa?@Ot0gr?w3DZVi?C%Vk!jky%#Z>~TxEc15}7CE;=I>OT6a{gr`A)wLRz=(-ZU z(mSxOvW1;9r|xr~@txaU>04RpA86}sFOT@#YkeHB5ua<|UH5T3-g#o`gIV3%;fNZk z?Rx-yb#J|9>M0afrFUf(`JNlO?-;p{{9#(T{mZ=va=Vp#53>2bljNScRb<8aZ6;Ri zqpz8N2lu=kkkjVCeIn1)Y@R%yr)FLg7J05|Hcy_XR8O?j7_9W(-dxvI&eS#lVrwR8i=(m=BdDibe zaF2ZSdk?aE>OGLVF8aL(S?)cMHzfXsxL#)bL}0AXIy?_%01iildyvru{CB>!94MFko!@@X0RgegWUeJPw>NucVCPv(w}SS zqjm_~y)fU}`t93T_1VmSBCUS&^c_r$zve~EK2A#cG_a2~r_&l^P5tK2#CVnkKQ5s= zM)-n+4>yH>QQbenmnOWa$^LH!7ZYBuFW-`K=dcwV>ta3q+c3xL_;%4cCifuv+YRpes(c8~Obf!6-jv`GDGJhkND4ljd!0S z{_|jU;KY7&p zI@mD>{|4AGwNTr;;P1aN>gM|%Qj7R+fsJ>(uJ^aGVJy2o-%0h`i5Uz2E@qy3)cGFR zaYUUTfQK>Pa}ncrhkDfc5!gKSooVeKgRQSGYW)N}jAi%Wr*QSC{WGxrZ%_C1=U}y{ z@eA-UmYvrVaP=6^FTv(LfkoY4fwSxLYxppho!66a^{De3uzBh+uit{Ludk(0fA9Sc z?0lVz{@8o<=>PZNZ2y0Ndj_)e_#<3B`u`KyJoTvaXK;3Z{sOm7b{>C)t4E!`fz4Bo zdHfx0eSNXE{{UMnyFdSgt4II;0%!N<-*C04@f0{eum7N_$9SFwo2MRip8;pr=UI4u zUeBSaN1gwI%~Owg{SRz?eX&2!gPpH)(I59uUHl^LahP-P_i`-eZ|WE<#y2k2A0)=# z%>6Mne@maH#zb15=Qy|eCSYp5XT?!_GB{s*3Yxkx4^ZO(aQ=U)ME{f0-L8E+RI3$EgQ!ojp%+w)8uP zt;T>|tL(i$8Ll2Nr=&62dpH+OJ?3;OSZyXXBkwf0wX^Snd2sbO5A(tHXTH9j=^mc} z*5@~zd*!|_1oKxo57X~_{M}ZMyp0UyQ zIbi;hzKykS`%!K2}&3*B`unO$sdqLm%n40eeag22}xIWhU9l8LnrujHd z$FT-}5#~59#LV~3U7YIPS@~MHHPmDLmw?S{!D9TEg4N?(tpoc`Q;%T^w-Y1LxfSA*5`T}3NDi0hy<7~M zjmz*EIbO{1IXQl8jxWsd<{WRy@%1^rA;(*DygTLY%XqN=56n4sz@5jzsn*GwOa~v5 zYOYsup!; zgVlVmTlXl8ElsdKbBeU;k#jUSn{y1@9M?ggIqr{o`PX@Jy;j|7U`WnEyTMTAzifStnx71{bmDdokEJ_2~N?@S@aW?UumRjgMN(z(p+j zYXYk+#Uf@oxQIo6E5J>ddc>RyE@Bb05^S9M&U7w*gE$6#G0yYB`88UFW~@Hf$a|_5 zeXRx;GyH;-N8cC1jZu%BHMy9J;Kr%PSS|+V$Fdg9SbdJAnN}_8UIKOxqsFD+{CQc2 zrfzKHT?Teuu{W24jZ=@9E5P;_F;{|(Q+F)BpVT7$DzIY-el^%WV*RfH8>4RidRn!J zzZPuG;MaleKk`dpW7N&xK&uw3%Icp2>2;?8UY8>1d$ z=>%I#U-Z`no|#(2Rp7?zi~2W!r(#im6WBO)=haH97V$mc?7Vv6F|X*Sie{X?$m;{U ze!*`9yJpdE4Qz~h)aeIXOJB@u0GyxKAeyoIqW%y#JFm@fM^Ge zfbCCTeoh}m)9(}gdtkSRWykz+xO&w31lU~l SsP##(XF=Z!j9Tuu`2PX-`ZEjw literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/9068df1c.frag.spv b/packages/ludic.render3d/shaders/spv/9068df1c.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..c2aaab49bac20e964bd1f39e7e65c8d2f7ba6813 GIT binary patch literal 2984 zcmZve&5jgR6vvC{>0uCMK)wZ`VN^uMaa1%W#&I+xV8Q}p*pU=9Rn^@UYPvf0flS=+ z04~_#$|o>Bf)C)ry)Ia~aN)uQ8x#M(TYajo(VN`9b$;jEb5EUnPR$IK)(-~3f#7hk z8e9+BaV%I83B*?1dh_;Iw>PUg*}VS278XZ>fiuKrO*YF~nR`(-Lvcv+sBBxxG48N&x`m$pwkXIy-b28jH4=! zk~DlcM>ZXC^}1@FXLY9|j$T(rvq{?Nc&lDlr;pNHx)paGF*jk=%)%rq^=y3D@iuAvefwVIqY39_I?nPsEyFy0nC3FD*jJr?Tuj0womE-A@Ae*YF_5PwL^n;d z$+Ql~QJxp$v2Yj93!TkwRHZ#X?0B4K^AMNac`rI%&C@tkDs%1V_q^2V9_)u@QG5J| z47`Fh#urqL|<_nzZD|IZ%krU~61 zcS+{!WY6Pb#(lSUddl&-3X3wEsC12=Ha?AVlDnd+#P=EF1-5M+o^?zG8mCr`o$eK< zi}RvM!fF~N#n-*BbFHsz&)re$>%3z{Q|H-C-iloEP`yK(jG;WQYi+`;ETbfgX0f}k zp)^+<@9IiqIe62t-7?WjV6)+5i=<`mIi^ZnVC>#+S+yv$;O3%7FNiacsSRp;XCYG) z$lNu0YQdM`y*zOFq!(|=mfSLinz!_8GQGk+pYi?-WAr*~M-RsE3wz?R!Gb;W7(I>M zmNwX4VsQREM%=JF9wRo`J&)15u=^gPXJLuQ=uz0zWArC1_ZYnin|qAB!yb8z+`}Gw zjQqpC^%%K?J@FVl2>ae+^d9U-kI{FqpFGAr!G7@=y$1WuW7IF~naAic*zX>rzhHlO zjQ)cC=`s2W_Ls-#C)jh3(N8e7kgG}JxTL8P=;X_KW>B-(qNgrQ_Vx4_dTIncvahG# z&?^L|NA~sfAA0JE{m8zaUPMoAp-1-h^d)-g3_Y^xkL%PWr{}M28^b9*an?xlwCwSV z%=?Y>iyv&^A1`F;6?R54b&3xAllrAbN1BXl3z-@vALk`go9uxh+c&{v`zDxd-vngh zqZWye^O31TWZsMOslk!v0nH1+MfaWHOwPeK{_tUwz5h4yYiF6Qzp}^9=9zQN4|e2^ zIwvlAfZQQdUodjR9%`H##Gcwl$A0wqqh^EP@uz3?AJ9loFy74{CZAJQE=e(RbGf^B z80TNsx~|E<-)mZZf9A(l{Jkz4?1=9Ttqd6ckgotV%s=(a!2eaP<{zKt*H-+$C5|2b zuW4n#@Q1ts(6D^Gt><6YzSuE&Q}TCDpKhD{j^uAn{Lsl;lCR!d+ul$l)m_F#w3 z;--%nCet^J4^_F`3H8mO?w*TK&!6d+JLCJqy>geI$dYsT{=mPK4LRVBVGLuh>KR5p ijPdsq#+i52S@hOLP4;7to|@QJB=jM=zvba0&3^zKx(PG@ literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/9068df1c.vert.spv b/packages/ludic.render3d/shaders/spv/9068df1c.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..52c448fcff014926edfe28ff29dfd64a3c20828f GIT binary patch literal 5512 zcmZ9OhnH2=6^AcO0ZR;uiirkhm_!l_me>u#C{iMcV~Cidxp^`Vc<^{{oL2}|Ofj8i zLDCc@(ZoiKi8TfjQ|$gXM%T((`M&$k9`2gM`pwz~rp;Z|2CXESr%Xlg-ZF z%X;JZY$i+wH(1Oo*Q{N$xYZtCe8Gk1>Tz7wS2*hP@oa7(_w#parPfdx28+NQU?(^L z4uWUFbKrUKB6tNH2Je7(K_CBSGQUmYfvlf@M{*8eJ6atKQ0sBb8|(S<>V`_E-oCz3 z+t8fcdS$)2eoIEx1BD%ztdnnTj#ukboHcjyo12Yl3vRIRbInfP+EQyYs^iEJ?=Cxe zw^rSDgtMkjJ~7$cEZ2)4D7boUWcM(K*`d6ExkbGL{PWBz z`L?P_T7`X}IKxW5xmjxzR1vcs8|5JP7w22aCz?I~{^G1Fd1JD7M*YRPck^w9gZ}oQ zTe91aZrDyPdc~}6j9bwF>w4GVS2ub&lO@Ymvd52Mvv145O7eNntYZ~6WrzJ<#oy3* zKt*56+=z~hh;yIiIQ8jqa>gwKk;}CU?${%_+l^o*pM>-1|jb?`%9rxj7uFXY1V`29D4d_S8bxHXj(LeNocQt?u_kyF+~^v%2S| zejw>gg?=#UVfVi4@0sfFeJ|_YclEwx_r9xpCi;8d)qC~y75CR%_Uct;$1%NWigRr_ z=kPN|&UJ!QmW#E#yXt2E*M2wYXEM)a2j&^SVN8Nm<@OL(|oca)d zk4n1yN$9RM1RQ53omOUk@J~bcUFa(}pJ?yCdb}6qK(CH|ej9qV>3caj)V%}N>zcDGG)*;w~yzCR|L zy#DIGwb;*}kgX-`>b^ZWEjwo3OUOF&m@ZJnDx*tnJyp27Fi6s{T6AZv2}`Hn;lQ z%rk&~=2Q2r%Z2V+SHFn8c*f>-nDf6det-1!4f}s0bBDg5q$r~Ey#tp5>vsfq8M3|(>*(E;p0Bp>`vS7D-n-zIAR8+eu~#7Lt1bMN zA{*;n4Q?5-v2qbRimdN45Pnx88|&Q;?kZ$sh zS6ldf9obm>6WlkDjV<@=o9Oy#i=N$x>|U(N-1>~Bo_!11p4|kZXF0Nb_T!x7vjWPKfRb~R*uwT0hi zWMl15a9fa#m5bOqvcB5FZ!5B~<(@UrjV<@AiLS4La8HBGJAj-cxVw?%;>`8?ZsI&Q_c@FCdte99U;ABP4|%nHAGo$Y z*10`#QP&U9tt-ybwwAJ6px;8{lP`w}Pbh}ylMuKys=$6T(xpZOQS91DSG>Ds>p`a0~FK5`NB zD`aEN0TJ_SWMf>@7=7d-<~PX3tN;=75VA3zzcKpA#r_^aHYWD>D6*Vz#QuyufUezG z-^Oo2`A+>VaZFSB9z&KFj>uB`R|zmWJBnO{!w zE6l!Md*`?5@4)-{8i@1#N8-chpULO-lFz@8<>PzxZ)D@-&EpyW2iW61>CE3i)=%Et VZ!*6H4g~`?xHi#VrH!@Y(mUuQ^bw4z_*v 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 C;01I5 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/9d3e2ddd.vert.spv b/packages/ludic.render3d/shaders/spv/9d3e2ddd.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..25f1e1077ce58cc27955ab553070516a5430e3ba GIT binary patch literal 1316 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 SsP##(XF=Z!j9Tuu`2PX-`ZEjw literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/a45356c7.frag.spv b/packages/ludic.render3d/shaders/spv/a45356c7.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..375574c64eb839e73c36687be30da6492e9944de GIT binary patch literal 7752 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 gxx%r2P8{8GT_;Rmbj$U5VfG&1w~Gxu|M=VN|2 z$WJzVd-+L~W4+^@qhq#Gcc;>I^216h-{K?hqDE)GUkr-<9_(<*+i%Giy}@?zHCLBn z_DAe(w>WrL^as1WPx)EQ+ZsFScF$t=?fqO$>U&Q#o4qPGb{@h8xAjh=-~rJ0F7v>( zK^=Sc{P$E!{i}B+u6hq&>YOu2o&6=9wp;^vmVN23f=Ny>XORqb+A~-!_6*FT=f_a` z#xnd7b~!PPf3f7NK8#!2p5$Lf-}}m~M*Udyr#Nvu@}4;XLReo{r+>BdPk*JnY5dg3 zb!>aK56{tej&dn~4x6>+Ju(byItTk+WY2(0z5Z=51m^IU*wxF;WBCplkTWK{?_GA! zG;SaI%aKcc-@|vMzE(=_bj|!n*yd*-&C55kkLSF<_qAu2x<4>YcD25R{}pHO3g4Mu z2G08@Drb8oa?bn*-P`|UlXES-f?|Xkcndf=VnKNhR&dj~{-2^%oTw|fCTA&(U4Xd6U zTGgMAR|}$4mG#Ed!>ge+-*vCid#yipTF?5MZnmM0i&Y&~wQX@&C)hHvyKj>E%mu6J zw?nGxpOkkf|E4TYA5$q0P@bSHK@8iF1gL`^tLkMsAA(xO8bW?cV4FIjyJz5p1G^`$ zJ!9O)Tla0W^|+0;M#jIR`WW@}87;gRcxFb^}w)cSU6UuliVRr(C zFsc#lzKx?XR~__QxLUL2w;y@-^-t@a(%X}utpV!420l|L&dn#q1JlP(sQIvJUFvaU zy;tA(3DfF69AImZ`mc@sgvkR_sp>JWL*2@;v-&i+yMIh?&w#dJl^1tH_oSZxU#!ny zFJrA=#M+=O)~0agsu)+DTs7hH1^PY%yVc{^ z65LI3uD7Q?xNG#pzG)Mh7W3wAo4U=xb(?K#yjP941E>8?;9a^#kDbupH}*Iq6l-J$ zYzH@e?g$>oBn_z+uJ$O~9ANTkIIr(r@!4mf)%R|LZ9A*o!SlvDq}m7GH+~WmwDI7Y z-WzQ)#qk|LJ+^!5*zO)y+@$fnYqR{3>T&F^t;P#g2Z>vL2lk%W+h6(}IOsR5Is)9< zPoujhPVTScIb<{U+8jFQ+gTk3o_EcMRENXI^mR`?WME2vYhNr}jhPp(e_--pxP+`@ z9$m!jnlENYbqqXf(rYrUdy?taV;?8)WykeR8eJa&gZrqn>cuuMw_#O3eCqVlZ!iU7 zbyj`z`FB*u!dv|gsg48B=<7XUr{2laT6=4uifvJi?H`!lGhff<)mgWj*Z1)1WPF{| z)&XO`P2WuF;152wb=}Wv+flhWGyZAdd3&<6nhu}0Ryr$=xoTqXv~I`hwK_rndjED- zCxTnoRojs2B>4Pe8dlBJfAZx1lXe*xKX_cUmTVpGH0)ys`oW#m>EL;Jc2;M=d-|rD zBKC!=^QgxTaJ9zwPMWsMlHX6Vn$$OLV9LZD`Ul2xL5H$;wELOf z)$EL}8Ky93TVOuh)XDvQ(*|wcljgOX;y4Fw9rM|yx!tf0t^4b&ZLGwuo<6U2bZ&!= z6P+0zm@=qyJFNSe*ws3yhjJF1xA(^BU6XTb=<4sC(c8~r$+(8q_HhH_yLx&jP3@cJ z^&ZM~vF*Zxwh6u78oI`H_xBHsb2|<8yU3u=nC_`;rsO%i*2nhuP3|(}V1J9&`qat2 zW4kzv`rUqmZR&e)7bkw#lmQn=Vl7s;=^NAEG>N`=t@m`F)Ngk4{FkV8?`W;b$XGu< zPj5{gJh47e+q`ql-)6~q`v28tsd={gA|;m31k=0fSYrn!dA(cLbeUS8HnnSDO5b=M zbD}RBeL{D?lRK1E>ijPkeL&yVI$XZiSfFEjvl<6&K7X**JZ%PdLSn7hiq$unsXn%J;dq*{l4c9-T6=wa>#QDV;}65jxp=zG{>*&5qxufKyUG1~;Ed^4h5kG6_-6jz z5;H)r$q)`J*PnP>aDRP$I;!2lKy>aMVDH_~nxCj`@GR}DPKCElvR0ha;htZf$3D|@ z&T`6+-*I4IimBBxX3ZCaa~(dG9?atc@KkPW;!D7u4C1TR>-HVhHR|0xwSFhqd$d0H zgFUXikG-rusi*hE?lJYD<5*rtD|3INjsI*u-ckJ#K8+isZT~c%t+Vm^!NW z;U_ffdpHMu+0Vz?_~P^Nj%o#X-bHo>x5hc7+C{yKCz<9p=NR`y^ZqS93Ou&Kz2Ipl zZdm6!4qWy>wT;hc<0s6=JF1i6nbV8G`waN}+gV)+p7)&9QQZu0<=R=@0xtW!wT<82 z#_wq3cfosmxLG#ixf|YEo1N8DZN5*p@n_rk*W37u^YM=A=kV6^T1WM3@Ytr$|AKQJ zHt6IzsL?kE=SIRqdIJS+CgL^l{y}l;n+w6U9yuXc4YU7jV;~mwh@Z)+~vCjf?qvP$i#jkAhy&Ap? zo87f>&3v}bYIYmHem>q&-2^|br;oNB)f_NSZFQVG=JOj;-39OI8#iwH)ZX29*vq~; zs(aB|XG}-+kp5G8>$VTi*S52o+r}S*kD1crva0Z}$XGXHfP-o`)H#+PX0pJ?MtwehXypFPPG}Ve7vLD8&24|j|0Hn%#b;b22byjwQSwm*b&zo(7+z2!jj-sW69IG=q;^*EgS`_!)1>sCERzvrCMybtY4n~Rw9 z)hNEVg|80wBY%NfJ4j9O`(5<~Y^%D>QRcJF?K6 zOSNMPZQ(}iDKy`8^_x&=zUQj-7uuqYHo4Gzx7E+*<>b6rqxoDM&39V;E-EzVQth%r z^IcZ$=0f{KqupC*OE%img|<|qy;5ktvl{QGg|`Y#chYj5$=lbNn(a6?2V?o(sy4FFd~a3TtI$R? z+J0#6Bi~h5qp<7-`RZUl+E>G%-5kP8`%H3oZFoJk`|Pg2>ngnT_t`@`Zna%r+P!}{ z7C*N4_abuAsJXu*u|L;^cJEc%scPzDSW*3ySmqtJ~ZZ?zv8(tj`Zy&4i+lzUe+UBdza^!nvqk9eX zJBwN^eL1e>xw02fo0Hc(1z2P26}gI^qt?%Bd7&a7wXGZO{nn4y{t9a2xh9ulrOj^i z>#4=&vo2PB=1}~s2Xnl4P}EXflV638p!l(!{O+2~IM17#Tjd<-dK} zKMHrOu|HAUXFe7FWQ*7S=J^cejm38#>3n??tY-W26YhLHk3m1@>syVJn)4-pq0zif zuYjF1=PUWW3ieD|3H5u_`l!jjPi_C+$jA1){wL8}-#`=Gig&H4i z@hxk0ebUx5BG}rT^^fLUyax9=nUixN_a2gKXN;dvyyxrxdSf$AuFc=Tv#(u#yYRQ* z%RchzmRUn@!`0?AC4TS2XJ32mV7m|Crz~~%ApbXfog)|DE^$7D+eSZaiSs{jRn2@d z+=cM%m-njUnExVh=f(VogB_c5;M!RQE~ctK?X_!XRYd)4KcaC^bH3!OHJbg~-?s22 zsFTkw@I_u*W83h3YX4(Kh3{MQn@5I^hBKe_S~uR|@Q*j~N%@u9chNFaP~s>kOW;Khe;HW=rda5YPOo(J<8jPotH+8o67xH~()FHoE_ z=fE*K26M7cW7@{G@)EW4Ya8Rc_J0L-{iMI&!ubsDwg1$7#K_neW+5)}+O6B9{gUwI zn)b$98NLj){jCDFxqZfebu`~qa$oZK+fU*jRP&jGd--U%?<~ga0vpeM;(r|)dv$Ox z-dMLEF_{0o@Y&ZMHn>(_fv-@s|3&S8&rXT=XZW{YetGb0cnj{kQ0(v2{v$_*e*ou< zAB?{t8_6{i`wno<#(KWg4}||^|1G!8nSTV_^D`ywrlD8W$a)-(_e8kQzS`v%!o6Q- z9(^zIllI?()9>J#{XTr1BQG87_Xlu&y!hJE?w@Ma%xA(kx07n-&dGNRxLQi`*$FMz z#kvpfb8F(f1b_MQi`Mlz{sv69^%-yea^IuWwEwQbnMdRO5zXh!`1_s}|9>@jc4L?O z-lbiCP-5$~6^*zV&_rQJsPX3eOzK0pl@%dg?<~JSw?%KZ@ z8UOR)zF&vm3?BhEzx%;1YwtGU``MEF-E6q`OTU*5xBW_O-0xpYyWhcv+rQt#hI=h`F1U8Te~n%4 z_pjmJ*Zlr9T)W@DmfY`POYZls;pXdit>L!!yVjD=EV%xD*BZP0oPyil?^z-0xdU?)R-FzrNu1@As{-%l*DJ-2VK&HC(&jugXWUN?g0Y zr?~$gMcbB@gt_`dqwC`{?VsR2w|fr6=g(mEx%jyE{{pt1`g^Rzzft@7H!-#Sm7?bQ z6o14D7ONT4XU@04o-K=#h5T)>>wM?NwjFU@&+4|Z-*>^DH(zS_dtfzl_<-7vIjFx+ zQL|rh#_}Q9GwR7^EFXc@=Fs*7eACAI9cIsd{{uFr`Ri{y`}`lZAN$njzZ5n56lbhX zv|~8~KgYU&6Hmz)<@TMn)@j>;&1>fMd7WmRaIcT|zxWJ6Q$GtI;|~SfPTl#Xsuto8 z=XZz3Zr}C!fNt!O?Egi;#`erMw$H}H!RqO2QLy>!Pa9zMG5%2V6K%0Zv%hGIH=1YI ze$49?)Jve*UVrVrn_o^`Z6Al*w?2vS39z~`oJ(M}B!8$o9?v(q*t5-e=KVbNvT*M` za`(gvVDB}DH2tjz)<@m;o`q^@zcRRNzY5&;{>IjLtAh1WPrf6->VAyrd8$_LHMG^i z_Tzhp{Q#>q_(MH>O|b12r5CDdE&gy`*QRKjLw!zjEj|VRBt@TDjkY$}dC(TWb-?zc zEpa~$Htw1f?Y1#z&wOpkXFaf*YmKT}pFh+-Ly6A@V0~U~#~nwQWvObDxTHKB*<ss3uyiLPh8{2`)wYI%Biu%69ch8Olt6Tiom+Slz z=0*D`bbWkB+>eaZc7U5hO7{Pb==y8-8hT$=Ge6ty3idqG<~>;++wNfZw>Iz3a&3-d zPq5?AwgN(3Mfz^zab_3wFbAIIdd5=wA*7|!- zJs#|sCsW&x*I^1+J^fAtPo<>a8DO>Pl-y%a06QMv$F#@yMDY7)+Go)xRdo`7_|B{? zd;Dau{c1}dr+~di#xk!{!D{+CHf?J0KLecodpcMi+bnSQ{YH68nw2}`?+A}{ZV`q_dK|I?Zf0;0Cuj=r;g9(!0MT=3&FNi&sw<% z?A&_(YWKUyoWJM5wP&1{f-?t~faS4W4t5`#|7Fzj*scUSpW3dVmM6#0gY8G#Rn&6v z7pUiuQ|90rxN}gh*=ynI`d>{gPu%Ok&ZD;3)biMF0Oy)q50-DmjJOVN1fNXp_#B7% znwR<5hp}v9+>5F8&p2-aJI-8_TfknEn;Rdh>WloLp0#-^*mmlPa~s&$vzoPeJ6KKM z^s5&CIbi*-XOH*e+Znu9|X&{YUb%- zu;1OOr_V>gOHuOdI2Wv+pJ-oeH1|QYM;nc!c<{OUF*Mujuie<@_yD!G|FDy`r1+fz zwEi6f6)TJ9BK&+8_wQ?nJ)>oS`jT8SbfVKNQ$zk+rzgJVtRbBgk z8HZZt!t3jG@#F6?9KY|;{*J>j`+cf8>vvtFXD#2*Xj#iQ!qxJwdJ|a9wS5b>#8|O?dbLRD4f#PR5O6JV(k{yrV>E>*_2dsWK#XP(w_fpj3b3a(0`zY~w z0IZ&Oz6Zf-d7pR)ya2^^#?zkniATWNAEtOt+2_|N>T@aS_c5^T%X`=3aP{1So&wvC z_aJTlZrOWK?*C7NwYxX;O%Bh3pQb!R*^eBYv*#%0q0Kp!XHK1WzcckyuEUk!&gm-D zen05ie2HQ_=jwUt7b!0^+&C{&Z0G*hSME7vn{QLRcItT#{tnm}+VcGPU9h^vk7Hbr z;@rJX{RYMR$4@9(Uq5a1Jh%J|ZX9*TD=)`80`8|A@2YUeyBc-I`zF}j!~fXE|J=sk zZFsKpFX6^5*Wj<<>hbw?<5RAM-=L{y&HWbaJop~2Z4M>ve+RaYat;3;uAb-rKY;Dm zINH2EjzvB9i9dl|2kP42q*hBme*w3T<*#V!@%ek>Q|9syH1*{2Pq6L&M$tBl>+0J1 z7e(9Kl)Qhu19sdyQ?#3xbF7}c-vgVsdanORVD%3vw(&ZtWxf0dtQP)X@SBv3V*xsK ztmQRX5KTS%vqO&0MwI_iB>H5WonU=ZZ09(Kpz%|`bD4*I>+3qzR<6@EvH4k@lCy4& z1`ntHB*itm7PV_s&3~`8P{I8-TP643ZG{iR&wslW?jHBwZ^@mTq0|e*?Wdj_@S+s= zpMO6gJ|AoJd{46&T+Q<;&)JK^jit?NVxDS=@o}(P&bLp1`Kg}|wAse7sHe?RU^Ul} zxh@S>v)|;q47@$xWzp1=?{Z)@+hxx!59g=;j>@?Dn1l1D%^bX*D}lWx+MGLi&b*bu zo_XrpoohAQ`gbu_r}+0U*FWdT8*Zhwf8BAzS@kD^LA~p zeQM8nyAD|0;>XJKHaUJ8q0Dhzc$wpRaOWiXdV13ln|7KwIlE3k3Y-PiJRU$09XKcAvxUwgI(uT$VpgWconQRhD7zn{#Wba$;4&iVry-Lrll@V*p%6X!s%adHkF1RhOM&vV(qVB=^r7q5w0#&`(WYn}CZ zDEt|CigCP7hoS4MJ=gOHu-Ef&>cl$|te!P_6xg=v@i`joS_|)jJ4d-@$AI-w&o%1? z^HX0l?Q_7H?=f)u(Z`t1@mR29jZY6)KXvzpyxbcb(#B7@H$DT;-dMlD8-U##UYG2R z@x&|l#>9fVH>MQay>UVtKfmFb+djB+JApd$bSzjs{5Y^VX0Pshhv+OfC6e3U1H;GBox0T>k&?xdKgnR&&l?1y;L~ zl6m+%*#2^jz5wQ@-Z%DP8-3z`HQ4#hHM$0@X1mP2n%@OvzN|C$Yr*c#oMp4&&%jf1 zmR*OgulCI44PfWtdg{cx5v-oG>?W{n)#GzB*s~%07P!|e^Z!M#KI++1w}Sbp_muYX zEV~VEKl&KcJ#ahNdC8uc1J+O7vrJx|Wt-B*Px<`5G2FAvvu6{EYi%>?oL_emBj=ar z)%^vx%>xD3{%{+Ay5Rah)9`u?!S8~bL-|hnWi<8pe5LUz-+#V}rk=UG8_Z8VciNo0 zw7&;#ANNr*clV;HXHDD(wqN6Db6q)B^|W~q>>O!x-14os65adEynuzYurZ|CakV72gXfSs$%!Si6} zsl49bLQ~I~@dB8i`pozyz`4*TbMzuupA_5K_e*H})O*uB>|0;=i?-|+_t#bwKbups zN46;NmSFeGXQ}hP`yFCrzqsDN*YM2yck4dpU58g1p0n*$xIXI6x$)G}{`+8a2>(ID z)BcBWebnRgBd~Gu{_z@Et$ZK;G2FJ=Tu+YwCt!8`%*C;&CGP8BISz%}ChKD%xbvu<9EX9;aRrL@eIbtDSlWzbJ`02G zGklST=WHDgH+G7B+HO&FZTcs#kAaP!XOzXj`l&mgwp$!*pW2)sc{x9O;Nxc(O6F(R z20K5y75eUA=W0*t64t6gzJ~NS_I zYfE2SfwkFJjhUJJ9{ULV{TxEcxDIWwd*rYNdtDEwn8T6Oo+tkO_iZV;C+fd@!EH06 z;Lh2J1=oIR8$Z3^uCG}I*ZI+aIZzai{1&Y<|o?D zjpn+Kwo9Ywn!f|EE5!EtYxmr^oV|1f^=@$c*2gp6>#JrS+V>Ds@}2gcU^R;$`xa(T z?+wv^FKc4d=LlFmXXd`(eTtIz>iy7+uRZ71{$TaF^pW-lG+fQ%x!|0QM%Q1vV{vV& zCAR~?YUMd~5L`WfFZN)t+8pBL?IZ8#uSwL&OMN0m&Ai0PYXEFs<$LyIxO(zB9;}wU6304uO#$1t zx$18p<}r;rdFV5hqGldq&v4_))w8Eg0DC^my$_uPKa|>aeg%zt3TYd z@%&fIxXuHs2s6MlKa z^Y>}4fUCuRCD``)yDC?KjcJ@{p9kAcU$u*;|?f~0&*1?y+j!)h8*HEj8@3f{E>n>_@w0@UyeTDj~ z6hGSUZtT_>!#!YQ+}DiZKCs%o6z4|%Ws0$kEw-)K=K+e>B(Yuu*ZGjw%itF%o((<= zd>gE$kN)nB?|{|4zskQ0Hm15h&fhCw$Ll>#pI5>9sXPArsnzuNzVs{Pa-Vd#>?bitA=Pwfo33+W$^+*1de^ zg1Zm)Z1^bV*!TCP;6Fz9za^1*TNY0-j z!RDNEeI>Y>#Sha}pV|JmD^{hLm;X%*+dHNajqVvOUkz>y^^9i?u+Wt%IhoHm|YQK&{RR`=`Nb<$Kt=aP`db zdSJCV_~-fkGjMh1d;@Af&bj*f6gB5uoW3>$xA(OXntGn!HwLS@?mZ_G$2!mNn}F@x z>!-hcB(F`u+RbZoYCqvweVeQP z_L01{25UF3ZK?g3m-;poHS-cDukFC?d2NrTp7|OHR?B=Pj&<@H1-5T<)!#nMV@K-b zq0bH!HS-Xcdqv$f`#cSH1@F>u*Vt}g^UUAB+a0WrdiK*EV0DWhws*ZAJp;65%zJ^= z%4@MVTs?baAMnBy^;xWQ&;NbFqY0|bb?#ZBmVLG#SS{}m`-9bDKcKNEkI`_?gEEf; z(bUuD!CH*!;`=bSPXs&u@o;ZL6N&jUEnmPBx;LoB8PHHPBX`xBd9|nLycs zv3lP275LZ&d!`;o@p?|A&hyMs#Pho4d8fDFKCg^x<5LT6Uo#4BA14&t_9quy`^9bi z$~Jy;!EJv_!R_zXHhz1-jekcQzpIVkU2x++RdC}!-Nv6SxbeSUaQ$Cwxa-Wh^x4Ym z-vvH~;u(K5wQI|Jad)HVnQRPPZ9Cez4|~9VJP)*urKow`#ECr~+#Y)Zn!34o-Q;;z z>;wC(sIJ}XtY%(52OKM>4nGclY{T7C{czjlIcOqSAN6RH!0J9nxi5@605`U_?61jS zV`UE?4^~S%`!;nlrS3dC z-?nq@dR;u@Pibt{zVDt!eLBUD_A?s0b*}YHurcz!I}5Dl8u9wdPo)^ke#M!iGr`9Z zJF(7!8!NwKI2-I-_ztBl?al#f%f0Gcu(8x#U*}W%v43snQPk{Toc=BV*W;&+>sszO zldEmy&Vg;M)AmBJZS%f&5m+tnd)m~>c{Q%>T{D+}U3*^l*QqasJ67i{K9`}X=kH@( z4z`_oe(!b#*mHDkigxeUURTc`ZN_q~T?JMP|9r!^`vCy_ERe57sCA0kC^4_uU8K zx$oLue|_xlZffmm`w&PVpPdBvdQ7IybJNdhm**(oXMf$s z|J!iSG~Z`mg}cUIq0X4T2UdT)SsUL6tGTA~?(hS+x@+Y})P7tm>OZ8YnVUF$y#}_g zC8^WbkHPA>Py9rmnz!aWajf(1@H*JO9k>4WVIDuF_G2FUyg^Yj4{`bKpkC*N|C?av zvV5-oC7OE9*#SdF;@ILZ8wD$YR@6puL{tsX^ zi=S5e*54ucBU;**IsXY=Th`WJz^*ONaBY94jXDte$i7U9j3al(c&f+}`eeH1)LmH(2ch zO2+mf*m&CP&%8eZn^$uF4_Hm#ZSflho=Z$i#l0wLd|!|_ z*4gt*g6-RVtG|8ZELsYz-Mp5ePG0IuQ`F2$oV=C=n^(DimP1p|94rr3a}GTJ6URDv ztpK)fbJgEIlGlo0?dG*Ib@EbQiK1p+;^egoxIM2`(bO|vBfx5zuf(xVUaNua+g$ax z5A#@qI(g``Iz`Pq#N`>OUgyOjvL@JdT;3x8KB2%T7WgEvb9D-}_gwqgfLwCVm2ck0{r|hgZlC@?-b(KO=dI+sxAA@2_`wCY zzr)-3F$K53?t<$-wvCS~xc=kYcwZauZ{w5N_~e4y->GfD%z?F9YKX4`As^RYa*U4ui`giYdNbTNszikXw z58njresjNS-xRKoy6>K9n}K~E*}1WMZ*uRbr>`x*_Eo-PZ;7U^zk5rbem@H~M)=lX zeP%UzYy;LuJ$Y;kP9EBg>mF54obAC=$s>Fu+le!OPhD!}U>5>;u4wtv#_l)3h1e`@m?hXK~)i4uacm-Ntqx-1FZt>!&?! z4{6$lAKLKTPY#3Yqi*|ysns&BBf;Ji(*7v8_k#R=!lU78Ddy;U?m{!i^(jYyjiax9 zcqVI4%rRictj+USp8k8l`fD3YEziG=>ILsaeA{T#=NM}B#GU~5T50p_mdAE1*zs!f z9G4s0IX|w(t@B=6+DrtyW^LnHFOO{i?3&Z&xi63HcyRif43_7+&M9F3y^Zl~r#;ta zD%f1~$-0>ic5c_CXrD&0ALo4r*g44ey(fUxY?J4elfa%MCsHTBlfmj~cM90H>W;_z zpj!Gl4QxMI2d9HwgDE-d&Oq0ufBKpUb`9nEWft6a>goSXux+*3|Ebh!>Hlo7TKG9& z*QxX7Je&*HM?E>72Yv=yiti5ko{z4-_QbmY?3i;_eh#dkdd}mEz|P}^)MpF}?sc zjyBtzMXi=TuT^hs*HFvT*LC3R!`WbY+T8&5+%e|$V7Y7CxxEp*2et8Rr(M6RskJ5k z&0w`$t6RWXOV(LWUqsiYfBL@_T&}0v;I>iE*l!2hR-66bM6H(ozXbN)pzRK@+_`iN zcY;Syt81S_t(LZ51{*K@E8uc1eig2ddVKB%8z<}J9hcFcu#^|Uy1(|*!X#0e;Tfjdftnk0UJkKzW;d^tZwn+IPL#2xVDV# z>tJ&V{|4AKR-c2k`6k#l<-7j#aP_R4Z-H&6o^~&QZCAb@zX(^)`h5wkmXdSiWi(@I z&$a(H*j%;MeK4T!fZNaL@1m(Ew^zWnRd@W)QLBkxrTzgWWB(DjT%)hS%QgCAxIXG> z^AoUflIQDS{nX9V=ifKfs4t{WyPty9^SgqdH9kJKmUH%VbZxn>{Q~T@^gB6ibEq@c zH{r(BCv*Hu@H6iv@(7l7MO+AIjyM?Gt(18gj9(K^BAqb;$AfW2;sJrrK%vk+V#^~4zlHkP); zSp=N>z3;j5*cJun{^dKbJhsKa?sezR_g{JL&x?aykH)i|_O$yrIQ{vaERStTaQgF| zSsvTc;PmJFvpoGR1KyDSjAuLT8S}DW^U=pxUc2SM~~jZP|RxaPR*cGPm&=iKd=s_EBKlspos9 z9l*~2&c*^e_s)g7vHkt)&R}EjM4ffC3s_x$=Sp7t<>+}GyANQ%Y{V7LKy#C_E9}RY0 z{!Ah7)>--E&Ws3)gGz~;0fMSJeOhl0KDYEQhwz{c}g$@w@Ote?8$cRi`O zFCByVns?eC2{zyGqZ*$4j)wcJq8^_va5;u!;QFa2*KV-6YD=s!VEfaS+||QZLxGbT7}K@gIk#p6Ar@jgM=&TtgGkwI$ZEjb9&iVjTxo&v^R5wo}iw zod{M>n@QkuEe^o-QO~uV49>OHp1C<5Z2sC4ZwlCP$7d>7KXvD%hgvQE)4^)VZw6Q` zeV+hM-`X;^6Tx09?Z)+tQOiC&8SFkR->Xi6tHf*Dg{X58cr#&0)JFPz2^zpn@cg}pTK37aJ zkJsVnfn8VSck<_>spos;3&6Hh&)7Z(&e*iiAx3N$HntVe^z+|Pnaep~ZRz_Wuzi>B zUKgXO=ehL~u$pt1>wYQRSn;_`Oi|A`F9$pJS&Y+hUjbIrH}j$v|0}`X_rkA&+dh4M z9_%{F^ZggVj^AfbZI0hHm1}o3nm#G{Uiq4)o!=|lr~T;by;)oC&1YgikK*SnO76{P z7x^ildfNN| z>{`y>@%SO!*nXn@sL{+h+G~x*tzc05F`9k&iQi8et!(>xqm^ynKr@%J?N1x6Z2PlD tvu)1ipQD+#d74-BUx3ZY9PBgtn_&AhzVXyOpMME9mhJTM3|I3E|36JyYAOH# literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/a5ad521e.vert.spv b/packages/ludic.render3d/shaders/spv/a5ad521e.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..bb0f0e82806270028ac48e3506f684f1a7c19aba GIT binary patch literal 4896 zcmZ9OX?Ijb5QZ-#6A)Jf1UE>CiVETexFST5MNy+D?v4W)U|^Vunato0xS)v2rlO)4 zMFe+o``~Zzga5|m9MAE2?%aZV(m9oW>#e1$ySi`EF}8PHl8i}CPsS&|CG9aW84HuZ zb*1z2RjXIcZ43|0oj3m)J;Qhmga_ z2yz5DhWvv3igfTZmiZ477m`kXPUS3Mo1l&qsP!!74b|e(^7>MfjA1GH(a@O1|uC3R~4Y;n<&o!IH#^y?`RvrLHyt`}`Tb1(GQ=Bz5 zi-SY;O>*t{LdsPu8#WFXTZ7iuk(>kP5YJ$4P*;H;&!$w|TGqLd+6(Dfm5Q6{m0C)r zG0$RSS#W21j-}#Yz3tzbo@uMNH6^rrzO7Gq>l zY?R%+`9@NGs6NcBZl7Akjm>IRy(>A2&e`{uht`ybhRe^Ore`7V&{l6$hAZ_N{J7NL zb5D6Txw`UPS--G({@9jOD}zfbjp0&lUHPQV9%y6nlQz%Pd*iSk?+-rhVpi4$tf;`c z-YNK%wRX4%e7PPj8nPXdp?)?=v;Ef_2=Teqxm@X(Q$Id?ajp*laCXRj*~O)PvSgB?|Bd6 z2z_Q-O?7S45zkuttV}nLy59)x4t2j5dEL9M?wM)#JCfJE+v=X5cJFpxKb+~FllGBJ zcmL`~GQC|-M|xMyWnYdmJ5Fy;Cpl}8a}Gaav0SX>JypLFac%FX`fOwpJ1|EN z8H^L32lCvyk*WCG3w85N5FEZb2AY;Q{eP_lQukO3h$9u4wSzqjNS z^&Dh&4eK}m2h94)>#y!RlGFYXv$0`UKa_FWKLP7&PUF>mXL8ZEPr(QG?pYZ5M@HE{ zLwC&Kow?5Eh@9sTIgfzN>0SMT+4bzpbdYb;^On=5SlgG(#%MQ>`mv0&HhX^@@y&$( zO=dU#M25|+{xkC!#5nV*`;O&8_Z_P*U@xArxgFN=H%x(9U*D(y!T))Peo~_?N`93_{ z_Z-B1T!v_iy=I!E)AdAGO=#n-J@F1a~u7Ux#(*cMGDgw(z?ZY^?V#xP@S2 zXe?M4XZQ-{XY^?nW?g6l|auNF=SYK`7w+3vi{R!?N zu(5Ix`!HBvZQ=I_*jW1$+@oM)^F4bEU0-d{v&X^i#hT2mPhZxvC&BjY2_$+}1j~od zQ($|R_bH*vTeCe|i^%1Bwl3qNX9MWbGi}kcGFV&mY&}@cI%2OI!0y8l+(xjzjySst zSYK`7w+U>l{RwU}*jTxUt%CK{7Jgg6#^!rgLpL_xvpTxI+9GxkY^?nW?rE^Ga~V}1qMj_9v_8?ukQ z+FnImTOaFuHsh>I`|F6@z3j@m-pDw4hiki*u{)Wy$DZBOTVOdyF!3~k64Sj^>q*K_g&;b$`w-mJ+Qv= zXArB;`-u7cc4+r3b}`GF=OFXP$RR}AhnX%u4E{9ZN0>j)@DXPF6nF3|uy^n{66gCh zSU!Bd1?%$-5Ov{4>nF-AA9@*Vvpla{0P=h-rOgce?pESz5(l2*Y7`eek1Zf Dr$czX literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/a64015f2.frag.spv b/packages/ludic.render3d/shaders/spv/a64015f2.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..b68f8d24c6b9fc2aefbe642d7740561e07f3ea27 GIT binary patch literal 3280 zcmZvdzi%8x6vxMQ&arWb32}aygmAX`6%verBm_d7BMC~7Qh*SmiL|V5_k63YZ%=!7 zCKgR7=qS>LioXC+Qt}5-&_j_5QBY7IB|;$a{mkCG8;88pc;Vv>=8dN&SN1wL z;pW_od*4-Zz)gxcNB@TUIXCU~Yd1c=vD)h=t7p!x;kn;U(RtgveD-Ke+lsRe{3+k2 zJkuibo>D~Tep2w7Xy{v$ZAP}dNW5*I#)BxyTCK{LSliKHTb=CF?xeS8Wf><~+-as2 zuenz}@0MvR%lm2RW376&Q6@fC&41G%>b2vf_`I4o<1T2hnMYUCRy@f2pLDWTQEpw% zi{>q-)%JQjzJsV4_nL8%M%!Ia8Rk8Ne#*-S?^GB~#N)7xn-+q7Sg z{Aizpj`C1yY`iw&%_1+#5uYB$+KReG&-+*3MeYaDC?`>#Zl}2%Z13cK5VeZUC`miL ztiR*u&iXyfj%@8T+idrvR-ESrr!wBp6C`n$Juv1~@}yg= zr@gHmcaq(64vzW%<}8eD{*Wxzp)qe39nQP@j>De!dr?tln<^9IM~t`Qoa9dH=5i;G z8ZYpz?%|?mx}eR}ZsW-IjJGxOVvvk(xWzhF#mcsnaq8`&bfl)=74?Hi6*DXg*wu>l zqUz|~HB~HUx1`3sHGNrQ1f9H}@LHu)r}%T1v7?9n)GK!GGV^~82 zW5k8s4H$Wa-47VKgRNaG z?gXqGFzOg~J7Cl>>`uU_U)a|HBbTtd0i$kV-v*3&g?%3|Y8Cclz^GB!&jF)8VZR29 z+JxN?7iJG$8qx=H=8^Pjh>p~D(+PwKwy@o|X_TXeJfRpSZup_qP5^SKxJ)wLe?0fAi@ z>f8t9h;+`J*z5y;&YM_p{LwjY*dghhUtJA3HPksjgm~nhc+`a1$ur-Fj_tUbb9XM8 z{;afC>$i2&pYwL-7PPD9HMV{8HX-EU74^hoU&y09c{nAGAK!HvCkc#r=)7f!#pmrp zi2s^;i%;yw#a|Q0kNB^vM_|N5=dDAIN`KS$yYq5JjCbO=?7V~cz|id-G~M1o)9oEZ zC+}~oXTRi`b9zU8U5$O8(2uu}HHb?r<}=3{b062Z2Nv6W!=5>IhZwW2#UU^6O6P8| zK6yc>reJp7>l*(u|3Sm_OVYo&cW-nb8q&X5_->@XC;jBj`SsIUiM?D_V@^X2o1G`M zh?q|8A?K8J*5{5QWH|ABV!l6vHC?E~A3YA|xi_#f?pG3;NB H&#V0h??)y% literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/a64015f2.vert.spv b/packages/ludic.render3d/shaders/spv/a64015f2.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..ae8c8703a47839537a0b9fbd94245572568b134a GIT binary patch literal 4824 zcmZ9OX?Ijb5QZ-#6A)BncZGx~s3_vTvP4lpQKAU$jsqEBV3>)S%-{~Vpoj{Biiko4 z6b^(~%dHFbxG?ER9rc-%OikrZes3#PYAQWo9(Wz>27ACka2Ol`N5Kd< z0ZxKn!5PrO&sgR^NL)xd`8k)ffNg?0C{XK#%$uskW#x^fW_5UNt+KH`wC&z%eZ$s- zstc(dm!w(TRv#!=&vMq>EUvHD$_==#)Xz1W#m3f3tyUgDj(B(3EVe4;?dLdaY8D5F z>RaU6@r9JDRyJ)OF17}(uOqn#&Y?V;xj|h8emt8}aeG z=FK;f>O=KmW_A12DsFC8tLk0Jx9FUGe|czKd1$!&5^8!D@(ykFMrF8CufdN?{XO@T zXOn9xuaxx*o9B=1zG`J~S*0;ts%WF0H8DLV>a1;0b*p`?AybGZ5bX8P}hS^N!}@)JMn38Mi+dXG}g$d32ndaeor$IeO1~fFtxd zZ8g=k%>tga_Ia6Z9(BJF+8yeCFY>x~Tir9$?sp`wd$-j+KkeS_ynZy(JtyrWneP78 zPh@(#o{sdcn#;a?%j}rgp3ZXCBIg`_#>lx&aLRJAmiJWsTHxB=Pxbj=DmySo4;hS8 zo`K}Kb%UAs+Y5E`UCi(C%yR18{5~(!<)@>YyBj#>XF6?57J|#seFOT+&C0&1>hU&| z1LmKEZe6~IyEEPX%emfU=58SG zubbI5+`DzC_W-%r=Nx2*{=LlFBCmDL&A5p7UgqO(7^OdeZtao(Ib{1}em{WLBJ9(v z%&ryo*O1LE?|SOq`&duk9Uw_|E-~LbNXCZ0`tFP~Ufp-0kN03Nv%cz)-*;ku>p8^i z8rE8Jk>L)YK+U)%)PyqU$&TQsV z|Al!B(9d{v->qEeXEOaZvUsMxKZoo74P$P7eUJXnV(!rWUm$evjeqCW`-t*=Oas0t z-_0U&_*SL^`NgbYK6U+PGG7ez_Z{i)d0YbIf5+!C=F2nAxAYe|{60GV#b4VMK+f8g z&E3mx)NYUO1lI2e?k;3~9oC`W-9TS$;dc+RvEIYr79kre7qN?x_0<-B zOOTEAt_HUh*;u)V?L*dgDG0xNk&X3k2X`N`v2qc+3|U`o{p`YC-4EQ0HJMwVKK9tl zyd3m^2SD^}MaGBEN_2ac_jwRq-gUiO4*|J+&sJr8^z32u=$W?Y*(1o>qGzj-<*Xz2 z+K=o$9Kk(`tgj>X{}{5q+QM%Qva$9jxW|!=m5bQ5$ogsvzjesQ+MnQ_KsHt`VxL6T zS6lc!g>0<-3GQiRWAim8jZ9_IT-?JLJvH70W(e>39v4hCQ+MnQFL^f6~)*V9DS6lR~ zf$Uza$=v$*w_-N4wm!~%D)TV#Os9Z2&t}Gl-a`7XGvhor_c@OFEwB^luYCvjn7rEF2Cl7- zb-tW&)}{SjAh()bS=W0RC+~1=*D`iDv-a52`^fGo`tkv?oFnpmh%7H0kuPFCf-^=w zV)h}+3&-e~{cy%uSHygbEH4}p)6ePdMLz(n#oYS32lx94IGA#URR0uNU-|Qi)#o!{ zKEEB>J&Qfe^5!|j{3SR7v>ncL<)g^QGJb^lcqX4fzen~Co&s^cKOoDi+p8ae ey^7xcgshLec}_F`3{C>?vg@ns_a8gB1N;y4MR9fj literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/b4587cd4.frag.spv b/packages/ludic.render3d/shaders/spv/b4587cd4.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..ade925a91c045930ca66d5a060ce02ff4a2319b2 GIT binary patch literal 47912 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 Dq+B`; literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/b4587cd4.vert.spv b/packages/ludic.render3d/shaders/spv/b4587cd4.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..29f400e808a71543c75ea18bbe75fb27baf0d4e7 GIT binary patch literal 11136 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 ZS5K{b!RD%`)>pxv1$}>J)N;SY{~sPxL&yLC literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/b79a1f4e.frag.spv b/packages/ludic.render3d/shaders/spv/b79a1f4e.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..70e60d99b026630939834205c074819944a66afe GIT binary patch literal 2680 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/b964507f.frag.spv b/packages/ludic.render3d/shaders/spv/b964507f.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..b68f8d24c6b9fc2aefbe642d7740561e07f3ea27 GIT binary patch literal 3280 zcmZvdzi%8x6vxMQ&arWb32}aygmAX`6%verBm_d7BMC~7Qh*SmiL|V5_k63YZ%=!7 zCKgR7=qS>LioXC+Qt}5-&_j_5QBY7IB|;$a{mkCG8;88pc;Vv>=8dN&SN1wL z;pW_od*4-Zz)gxcNB@TUIXCU~Yd1c=vD)h=t7p!x;kn;U(RtgveD-Ke+lsRe{3+k2 zJkuibo>D~Tep2w7Xy{v$ZAP}dNW5*I#)BxyTCK{LSliKHTb=CF?xeS8Wf><~+-as2 zuenz}@0MvR%lm2RW376&Q6@fC&41G%>b2vf_`I4o<1T2hnMYUCRy@f2pLDWTQEpw% zi{>q-)%JQjzJsV4_nL8%M%!Ia8Rk8Ne#*-S?^GB~#N)7xn-+q7Sg z{Aizpj`C1yY`iw&%_1+#5uYB$+KReG&-+*3MeYaDC?`>#Zl}2%Z13cK5VeZUC`miL ztiR*u&iXyfj%@8T+idrvR-ESrr!wBp6C`n$Juv1~@}yg= zr@gHmcaq(64vzW%<}8eD{*Wxzp)qe39nQP@j>De!dr?tln<^9IM~t`Qoa9dH=5i;G z8ZYpz?%|?mx}eR}ZsW-IjJGxOVvvk(xWzhF#mcsnaq8`&bfl)=74?Hi6*DXg*wu>l zqUz|~HB~HUx1`3sHGNrQ1f9H}@LHu)r}%T1v7?9n)GK!GGV^~82 zW5k8s4H$Wa-47VKgRNaG z?gXqGFzOg~J7Cl>>`uU_U)a|HBbTtd0i$kV-v*3&g?%3|Y8Cclz^GB!&jF)8VZR29 z+JxN?7iJG$8qx=H=8^Pjh>p~D(+PwKwy@o|X_TXeJfRpSZup_qP5^SKxJ)wLe?0fAi@ z>f8t9h;+`J*z5y;&YM_p{LwjY*dghhUtJA3HPksjgm~nhc+`a1$ur-Fj_tUbb9XM8 z{;afC>$i2&pYwL-7PPD9HMV{8HX-EU74^hoU&y09c{nAGAK!HvCkc#r=)7f!#pmrp zi2s^;i%;yw#a|Q0kNB^vM_|N5=dDAIN`KS$yYq5JjCbO=?7V~cz|id-G~M1o)9oEZ zC+}~oXTRi`b9zU8U5$O8(2uu}HHb?r<}=3{b062Z2Nv6W!=5>IhZwW2#UU^6O6P8| zK6yc>reJp7>l*(u|3Sm_OVYo&cW-nb8q&X5_->@XC;jBj`SsIUiM?D_V@^X2o1G`M zh?q|8A?K8J*5{5QWH|ABV!l6vHC?E~A3YA|xi_#f?pG3;NB H&#V0h??)y% literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/b964507f.vert.spv b/packages/ludic.render3d/shaders/spv/b964507f.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..e7f2128e41e17c72bbf213883718024ebf539ee2 GIT binary patch literal 10736 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/b9fc2041.frag.spv b/packages/ludic.render3d/shaders/spv/b9fc2041.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..9451ae2b5faf407ca775166115f207e8230ad08f GIT binary patch literal 40020 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/b9fc2041.vert.spv b/packages/ludic.render3d/shaders/spv/b9fc2041.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..45214a4e56a8643e8f51eeb2194e7eca6cf195d5 GIT binary patch literal 10792 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/bf3151c8.vert.spv b/packages/ludic.render3d/shaders/spv/bf3151c8.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..cd33707aa2202e9452355836547fc45ef3b06a4f GIT binary patch literal 7708 zcmZ9P37A%86~`~j41??sz+(*uJo@f6u~Y%NOZ5Ive7W+s5GKGZg7=ul9&PiYy?} zLS!j&DRLPyg#QL(yARwzL@}m;eT>1@*-_os*}tQ^R_pJa*SBQxnge^6tbuPJb`)!W z$DtgL1`iyl^W(t19ep`JMIS`}3hUm4XR}rlp2K>OPV`wJUR=jp#Y^kBMa&TN*$M7T z{=3A}<9g4pO?&NU9 z_lxrxHDnKf=_x;9U~Yei)j{d|M^;7v9-5tG-P_x~+k2>O2F-US+d1I4 zNA)mMGNx{G{@6BkRrhbM_Vu^-?Cv;a^BlAdbakDw*^BRlkNff6z^A^MZ9RM3Q3JVs zU*Na()N>|FmTgJ*X+}K-`jGt0-N#lUy<0xscb~2J%URNM4j*;Tb8Lw-uFlot%v+38 zFUQFl*MdZTdzZVVzN0zU(LNM*T~7n$uU#HT;Z`vuKz07ID?O{>gx>FB;DUJxyk5v zv6{np^WDvAKF??dQNCm9`YGnoM~Qh`=M(78NPp|7dzWKw&hQ>2&hAsm7JX^|EaH1( zzRxAQb)xSRiBs4A8;JYV|C`C?o?;H)1@kn!AJ5!(#V6t)2FKjY_h-cYm~R#Xac2c;&nE1v;P{u@Hv){cmj0X3`Ipbn{OZ29a-sX)s;}TQtmBM)%<~A0XQZ$1kbe_6 zr_k>$>HcPh-Mf5$Nq?xM`&$|Q=J)q9bmRTK3|+gwnW1}T{${GLWq+Q<#}M!P26pY8 zJC1lSy^H#ICZ9%*BRAt?%x4he^y*hun=>O|rIrr{6@-4(# zzB}Rb?Zh8TIlqH$oP5mfdtl@IHpbk(50<}?IQRPl#CJ}@^b|CgeT&En*&HwHfQ3`W@nYA4ZJT z_xFhWNcwTUe?YuPn-KG8ckjMK+M?#4z;YXi^3MMSF}L5hVn2UPHqYJse?yFwkJ!J1 zBevMrKj5{6-#-g}#Tt*mYl|BH0vjtIef=A3U-J;{a}n=~d-@OJzVsQ%smuKr(SHG= z{TO15v+(<&-C6h^K8oCl#5?rA#7$=%Nj7~mwgA4Pf^Z?^+|eoW9o3CKvZ&7})t2zco#8^6{-14wh4VT%z6?DCRVucVPs& z`R++R&T}N3e7uXJz;a5wv!lW0(iUev1{`}kQOGwIUR%sz9N2jIqwK>up9yx~+U(o+ zMlSX}9xUg+{cfFwZmr^XYXY2n%yJ^wIQi&z64JS{;WrIDomeG$n+~V1Hhc4%Bp1C^z;fFB{Ze1eUGywwg2%8vfN0al-#mGH^4oMS z*x3}{v-9BOtzn)yVB;cYF4&mjJ3J3gKE6%ogUw^CHf#HPDsSGqiN63Wr_H~A)T6J9 zz|og~`>0#rzfo2oo`Zk8=zkY@W#YqUb@K7=m+-k5EPoq$j9CLVPCoW@3D`Zww|y;G z&L_BaiIWa)ed7FWXi2{r&2Yx+uifv;t<=7ObpyKf^>NP|SvMj6edhggChGc~%m!tv z5dVhqJUmmMk;qE?hO>@Jcm(Tc#J{b^vc}(1%fy=oT!^!I#xt4&yYr-0IncWZzH%Fkq@6u;0h8xo5A|Y zA5Hi1Qm}i_7W=#mT%OSuIDNG_Bi~cGsI?7TDd>+$denX_x<2v|v%Tc=ICTBwV=s>f zm-lixoW9!J%T`vo$a@9YGmIQh0GIE}4mf#zBkqY{`--!<60Dzm_*@0HUidr-te?Dl z@%tnf{!a$Gm(ZUAwnohVsbGENjo-;C7yeHJn=|yMgRLL&tzdoRjo-y87yj*F-|3je zGr;9p?1s}%Tg2@FyU)-&!0s*HnZ00rHT11<&UN_ o{{YxtwMDKEg3VRj^Bw5&k?TWXW91{)hr!+jZI7~Rb^jLsKT}ehsQ>@~ literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/bfa15301.frag.spv b/packages/ludic.render3d/shaders/spv/bfa15301.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..e6a2bd7df5d083af30d72f107b41f7b535eb24ef GIT binary patch literal 3932 zcmZve%a0XR5Qh&l+zSdaAa6k&KvV<~5fDX&;U%D`5JY^SO;2~C!&{6Ittmm2u(1g^9#y;_o}%b?*^9s}ZUUn@jWNZ5M*mFPX_S;dK zcO)Bc40uu&WoN*fb*$OQA4|MC7x&SR<~ms`FM3%gDzf>k(7A2zi@m*7PDg3h?&iJg z(wn*=?u2{lN7!bve0ruAwc?^ETP@+ix(^O~rs8fk&Nvg$JItSg4Rx;*I?>tS!3 ziQDPF=d2v^|IAr6wE0J}SgVITDcihv^`>h)?{%ZHlTRysjjuI66Bk@=Q(4LV)B6$r z_*Qwi-ZLd=l36wmY>#+bQk4BP>dwSzd36|TLlrBZ)r~h)ANbOcw`okhywGje*jLW+ z%G3(AH6QioHF#f&vM5t8@0T3c{Fuh1oELAp^OE~f-s!|?9=8+!#tm66dOpZSk%jIZ z&!#%5U$5aVdEIu;nhiJQnXQ(wdj*;eT^V|*WAlM;*(7j`pXqcyu5Funu$?bZaF%N~5Z zfU$4b*?_S(*rk9`@36}Oqt0Pzz^H53Ou(pVSP?Ml88#O%>KJw{VAL?|M!=|F*yjP` zE@3wVM%}``3>a?<`#NB}FYLR3@y4(p0>(STehL`13A-CG>Js)#z<77quK}YbVZQ~8 z`hxu)FlrEXPmKJ-XS2GVd!TQTOv6qsVjm6k&`xcV?>3*h!=IdCK6>a+{b476u%m}| zY7zTLZATC7)FyUvjrr)IeX6#Tci7QGds5rULG0*eU#V3`yq#a~Y7c89vDUcyTKN+f z9s9U+;w(^yAFOq98MazFIXtdT+fnP}Fm~pXyU4^OKKY2u{jJkqauJ4Z^T|c-Z=)zV zhz|_izAvWR_r-MkzM!)nImddOoBfh+@6~;Z_PcCzp_;1vRjToyWJy!F_HL@;uxL*I8ctRsSoG)yq zZ_vv=DFc4QeX4eXu@7`=f`)yEM&@!B?C8`44EwVhS)VoS{q{)9UzWc8(%8gK?S!|8)tQ6eWp&&4lw_LeNu|2|sy1?q8l>@7 z_e7{ce95tG>cmFp&3E6Y@4rt!R_jL;g>L}AS9~|f=R=CYo$-4G$A|oWRGk_i@6CsA zFZ^5iR5@SGga4tOZqZ2lQ!&RiZdQk}f8@XPBFHdelIKsWljG>*^)u?^^hK>f9qm%b z2R@-SI6KVdKPNeyzehUrbIm8-^XmA(&xvu?ed=%;F}Xh&XXic-sIv~WVrPG`=BB?a zoq0?362zQPU!YFSVxw+8t=Bs&nYzN~G4Ev;x|B7VT33c;1DH)$T^_!oP470Ufm279gMs0sq$9qjOG4Zi8ye=6|&9f)+ n3})-SAsJ@*@}^`M{^ZL!jWqHF+gWuOIf88Y0{dG#JD~m#R*FsC literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/bfa15301.vert.spv b/packages/ludic.render3d/shaders/spv/bfa15301.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..2e2d42ba4d24192e25957b68519bb122b65a5394 GIT binary patch literal 10792 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/c57b4f14.frag.spv b/packages/ludic.render3d/shaders/spv/c57b4f14.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..7e92d8d844b5bd8f7e1b9877c1b9c0c05d7d3c27 GIT binary patch literal 5120 zcmZveNp}=g6vvCigh^$d1Tg^z5JXf!6bT8U459=PaX^bscXiTI>5e@FA}XMwsDL<& zD?fq9Z=fH*g?nAFbm78<3pSqP|M#kH_XT<9+`N1LcXDw@2L}keE5q^yn7t$atYr#j!?mS~6F0;5tBB zx2i_buS)6>>f?Lln<-yY(jy)VwU4IpuB2ROrOm_DO1V}a-BadJUM}FK6rI}jfu3ka3@w-q;9)wootOE)! z0|)M?72_LADx+h~xLionTDdH^eeSGw%t)b;bnw{$FQ%1=n3C=DZVh;2A}PkY%2XMh zoZB+r@u|38oPW;?}mn-!oy9|5Qc^y2vJlR%je(;SI zs-^357Ig6c<LH@1Cu1Ya?&wMubgtWc_*=+s)C)vAn#ca+s%kzv>M-JJoe7fO{D zZ6qe$5xiOG{n~LbQ}<|BkJgL1%^Xg~tx0Xc&rH_h?Am(7^1SR;T&YvNP%Vac-=oM2 z0dMzc$h{b_k$OoNLd@sEwx`OlZv&>T&SB!d%dke?ve9nwq<@%?K?yc}gH4}cvwNF9 z>Db-jT`q` z&$B`{y-f}nwtZ*Jw(pGD_MO4ze0rJl;m>*Wai3(GWTiBEm@}wLE%M1RA@^p&^I2_+ z^*cFsH|U&ebqwdem>2F29@}!8o&@7Q$YWOMW#X9;eAF;My-#1`Ck{VnVfSe_uFLcv z+N#_)O}k%aFV{`2mV-F*@6Ln3;D^mju<+lfom|eqkG&?x;0KR&k|;X!v)Su2d&hdc zW%3@75Cd*8o29cXW{Y$%AG3{sC>pewAsP5H$!hPDO>J_m_F?Jb)6RQU7CBk{EH9Bw zUdAiKs(FmZP72F7W%u!}YA-hk$2`t{v$J)6w?v!=o&ina9 zIC0$nrvzz%Q4jk9fR@$2n3&v^5#VwugiiM2(2Lyz+fVR5(D zgz(KEmTwThyVjF^())9JNKwoXzbnicv$b70#PYiWP7HIzOcBF;5yQRlZ3n-k7;^5C zkOw{>CY%dKJTr5zgn6+u)=FnS%)VbbIp^|v8>E9V6K8YmLFwe-J0fhB_Kgy1<2#@y z<{lrCfFms4E%#(x9+vL8JR;k3*(BR@c~mwSvu9kkN+%DWad}KSwecC3$EAZKEaSqx z!Sx9VG0ZTv!M00y27JbOK)UC=L$>EUDBE-1DI07^Vw|6pP98qvyh}Q@@fqi*q=O?Y z<81t%76wP+jNfkQp5GqXp5I>Cp5HUF!S+dv-+t-j;WK{EN~bnH`o5| zBgWt9uxxnaGtLL4d(O|xhO?c0NIEg#cJ>R>!4cMtXTKD0z&oMY+W2rkgu#(G<9A%T=aI^}et(68r~+^=kh>0?sn*oOCdF81`X~b!i{gFALxJk0j(1kAJ-cey6qL`&SjV GO8x^xU7rX5 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/c57b4f14.vert.spv b/packages/ludic.render3d/shaders/spv/c57b4f14.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..25f1e1077ce58cc27955ab553070516a5430e3ba GIT binary patch literal 1316 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 R{GRwG*jUw~Gxu|M=VN|2 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 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/f4382918.frag.spv b/packages/ludic.render3d/shaders/spv/f4382918.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..085d6b8d2d16649d5220c6498f34abaa2ab01760 GIT binary patch literal 85684 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 P84EUc|AxQVzv2I12F&lZ literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/f4382918.vert.spv b/packages/ludic.render3d/shaders/spv/f4382918.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..665a4db794a761d76ff3de2608ca787a87cfc83f GIT binary patch literal 7708 zcmZ9P37A%86~`~j41??sz+(*uJo@f6u~Y%NOZ5Ive7W+s5GKGZg7=ul9&PiYy?} zLS!j&DRLPyg#QL(yARwzL@}m;eT>1@*-_os*}tQ^R_pJa*SBQxnge^6tbuPJb`)!W z$DtgL1`iyl^W(t19ep`JMIS`}3hUm4XR}rlp2K>OPV`wJUR=jp#Y^kBMa&TN*$M7T z{=3A}<9g4pO?&NU9 z_lxrxHDnKf=_x;9U~Yei)j{d|M^;7v9-5tG-P_x~+k2>O2F-US+d1I4 zNA)mMGNx{G{@6BkRrhbM_Vu^-?Cv;a^BlAdbakDw*^BRlkNff6z^A^MZ9RM3Q3JVs zU*Na()N>|FmTgJ*X+}K-`jGt0-N#lUy<0xscb~2J%URNM4j*;Tb8Lw-uFlot%v+38 zFUQFl*MdZTdzZVVzT^g zy=eEIoStF*o~Sz)XX<^hFZ+qRQUB7N=Jb_w4L@V#h7>rloc+5O&s=?e(miYS1;}`+ znqwvzj1x};Ig<)9B^#diq;B2f6Z%yAn=sgWg?hu2liVcqGgyr`w{~mmD?gKdN3v=+ zPTK^0#TdQ^p*Ym6AAJm*5nqA9k57srG_UjP$>;7(F)#e#Qy<=b>XYdhLeVxIYr29K2HyQmd zR&y9{zPnk?=NZi)%6Cj%KgB%yC^2vAd;;AW>2Do%?{dt|8Qz1$*?lV6qA%^AMSO3} z_qk-ZPV{{uaq9Yi196}Fe>2(KQ_SJJV4i08 z#}V(PcTpeD%tNFF%i%!~1Fu@5C1n`OB$p4!`GeiVxd5 zwWlwE>w9X<_w;4-$af<7xv%>WZLzPffQ^+un)dotu(hRy=nfTCug>GEL{2FY`bx8R91}xvgguExeMa*NYHeYaXI~F5+ErPya#Omp&sob-Di{`Y%AV zA480B7JfgpI}6{#N0B>`c!&O%xaq7T$)=CV%qP|!zJnwY@3gs3s-j2k!C<+V`w(>N zNBmH9edHsi0qlO_U28;_)7Ki>!E%a^OVm39#hm8zE{s4o z-#y94d5(mWk9TntSWby|b~M;r+TzT|fMahb3i-yuYl}II0~;@YlzlkoGr{g#n|=G< z$i=?LgXP?}->tLItyTPPO@Nb+Sxy8SCm;Pz0vlKSZcT=hkMGtLuxBhEGdLS8ufz zIQsH$A9d^dH_8gcbMS8${qF*=OnmsPPCowq5X8F>Aoa$;X~90lTO8wyy=t z`2@Evanix9Pn^FEE$KI-8P0h9wfkMUmD)G3Za}xbKJIxV>n6m%&%9sGL|wm=*`RC{ z;@?o7hiB?D5?P7gaMn=?k6;~*__x(q*7#d$9C%nkpHk8*C4F{DpHtFTl=Q77y``k@ zEa|&SdRs~FO1kIL1U?h7$35uwF(GmLn8`%&q{KP98a{p(CMVum+P}K_w4IGOr_iT@ z_3=H{J`K@FKHkq6;CMgdJ8=%2zS^wgT;(F~Ot4)1KFk7hq}=Ei1GKXg2Z0W2YcU?*z0_-yuK0V?_LFoxC_ALxC`Or^^N%~1e;G=jvIC*^|*AlS#v_{0=#HsDUkx6IME+~Q z`pMf@8>?LScY}+4^`J*zQKtr{pSFnG4|aZ`KNIZCqHZr(ANk1B2R4_s=&K)G?rQ)} zUu}{90JzxKL3I7(?W>DbPX8v>L&zv(1Mlaxtj|W;ki&>RjjYc>qPg}XCTi~?&M4el~o_}#Kx1q~N zPcH)-D}OZg`EszmYKvU206U-Jo?nSBAGuxyHda37^J;K$KCeM{Lysg o9{}5{w#fBCu(^tRz5`u8a(xJFtbFA9Fxb1G?NN5E?%(472e=}etpET3 literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/f4a2b586.frag.spv b/packages/ludic.render3d/shaders/spv/f4a2b586.frag.spv new file mode 100644 index 0000000000000000000000000000000000000000..8724ddeed68d7fc631b696827f4c6f17787f31f1 GIT binary patch literal 45420 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 Vl@G1k`Mt7z+K;~8o3(jw{(t#XO;i8? literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/f4a2b586.vert.spv b/packages/ludic.render3d/shaders/spv/f4a2b586.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..a2b5cd5fc44137f84d658e77106f45c0b08f1e3e GIT binary patch literal 11808 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 YQ|qf>bJbJpYhcfUzW*?4x!=YAAA%^JlK=n! literal 0 HcmV?d00001 diff --git a/packages/ludic.render3d/shaders/spv/manifest.txt b/packages/ludic.render3d/shaders/spv/manifest.txt new file mode 100644 index 00000000..4deb3b32 --- /dev/null +++ b/packages/ludic.render3d/shaders/spv/manifest.txt @@ -0,0 +1,2358 @@ +# manifest.txt - GENERATED by `ludic-dev shaders` from variants.list. Do not edit. +P 2ee6d2e3 fullscreen.vert adapt.frag +B 2ee6d2e3 frag 1 784 +U 2ee6d2e3 frag u_cascade_vp 0 mat4 5 64 +U 2ee6d2e3 frag u_cascade_split 320 float 5 16 +U 2ee6d2e3 frag u_cascade_range 400 float 5 16 +U 2ee6d2e3 frag u_cascade_texel 480 float 5 16 +U 2ee6d2e3 frag u_sun_dir 560 vec3 1 0 +U 2ee6d2e3 frag u_sun_color 576 vec3 1 0 +U 2ee6d2e3 frag u_cam_pos 592 vec3 1 0 +U 2ee6d2e3 frag u_prefilter_levels 604 float 1 0 +U 2ee6d2e3 frag u_fog_density 608 float 1 0 +U 2ee6d2e3 frag u_fog_height_falloff 612 float 1 0 +U 2ee6d2e3 frag u_fog_base 616 float 1 0 +U 2ee6d2e3 frag u_clip_y 620 float 1 0 +U 2ee6d2e3 frag u_spec_scale 624 float 1 0 +U 2ee6d2e3 frag u_sky_rot 632 vec2 1 0 +U 2ee6d2e3 frag u_ibl_scale 640 vec3 1 0 +U 2ee6d2e3 frag u_daylight 652 float 1 0 +U 2ee6d2e3 frag u_fire_pos 656 vec3 1 0 +U 2ee6d2e3 frag u_fire_color 672 vec3 1 0 +U 2ee6d2e3 frag u_hand_pos 688 vec3 1 0 +U 2ee6d2e3 frag u_hand_color 704 vec3 1 0 +U 2ee6d2e3 frag u_hand_dir 720 vec3 1 0 +U 2ee6d2e3 frag u_hand_cone 732 float 1 0 +U 2ee6d2e3 frag u_ts_origin 736 vec2 1 0 +U 2ee6d2e3 frag u_ts_half 744 float 1 0 +U 2ee6d2e3 frag u_ts_on 748 float 1 0 +U 2ee6d2e3 frag u_force_cascade 752 int 1 0 +U 2ee6d2e3 frag u_cloud_shadow 756 float 1 0 +U 2ee6d2e3 frag u_time 760 float 1 0 +U 2ee6d2e3 frag u_lod 764 float 1 0 +U 2ee6d2e3 frag u_key 768 float 1 0 +U 2ee6d2e3 frag u_max 772 float 1 0 +U 2ee6d2e3 frag u_rate 776 float 1 0 +U 2ee6d2e3 frag u_reset 780 float 1 0 +T 2ee6d2e3 u_brdf 2 +T 2ee6d2e3 u_irradiance 3 +T 2ee6d2e3 u_prefilter 4 +T 2ee6d2e3 u_prev 5 +T 2ee6d2e3 u_scene 6 +T 2ee6d2e3 u_shadow 7 +T 2ee6d2e3 u_tershadow 8 +T 2ee6d2e3 u_ts_height 9 +P 9d3e2ddd fullscreen.vert bloom_down.frag +B 9d3e2ddd frag 1 780 +U 9d3e2ddd frag u_cascade_vp 0 mat4 5 64 +U 9d3e2ddd frag u_cascade_split 320 float 5 16 +U 9d3e2ddd frag u_cascade_range 400 float 5 16 +U 9d3e2ddd frag u_cascade_texel 480 float 5 16 +U 9d3e2ddd frag u_sun_dir 560 vec3 1 0 +U 9d3e2ddd frag u_sun_color 576 vec3 1 0 +U 9d3e2ddd frag u_cam_pos 592 vec3 1 0 +U 9d3e2ddd frag u_prefilter_levels 604 float 1 0 +U 9d3e2ddd frag u_fog_density 608 float 1 0 +U 9d3e2ddd frag u_fog_height_falloff 612 float 1 0 +U 9d3e2ddd frag u_fog_base 616 float 1 0 +U 9d3e2ddd frag u_clip_y 620 float 1 0 +U 9d3e2ddd frag u_spec_scale 624 float 1 0 +U 9d3e2ddd frag u_sky_rot 632 vec2 1 0 +U 9d3e2ddd frag u_ibl_scale 640 vec3 1 0 +U 9d3e2ddd frag u_daylight 652 float 1 0 +U 9d3e2ddd frag u_fire_pos 656 vec3 1 0 +U 9d3e2ddd frag u_fire_color 672 vec3 1 0 +U 9d3e2ddd frag u_hand_pos 688 vec3 1 0 +U 9d3e2ddd frag u_hand_color 704 vec3 1 0 +U 9d3e2ddd frag u_hand_dir 720 vec3 1 0 +U 9d3e2ddd frag u_hand_cone 732 float 1 0 +U 9d3e2ddd frag u_ts_origin 736 vec2 1 0 +U 9d3e2ddd frag u_ts_half 744 float 1 0 +U 9d3e2ddd frag u_ts_on 748 float 1 0 +U 9d3e2ddd frag u_force_cascade 752 int 1 0 +U 9d3e2ddd frag u_cloud_shadow 756 float 1 0 +U 9d3e2ddd frag u_time 760 float 1 0 +U 9d3e2ddd frag u_texel 768 vec2 1 0 +U 9d3e2ddd frag u_threshold 776 float 1 0 +T 9d3e2ddd u_brdf 2 +T 9d3e2ddd u_irradiance 3 +T 9d3e2ddd u_prefilter 4 +T 9d3e2ddd u_shadow 5 +T 9d3e2ddd u_src 6 +T 9d3e2ddd u_tershadow 7 +T 9d3e2ddd u_ts_height 8 +P c57b4f14 fullscreen.vert bloom_up.frag +B c57b4f14 frag 1 780 +U c57b4f14 frag u_cascade_vp 0 mat4 5 64 +U c57b4f14 frag u_cascade_split 320 float 5 16 +U c57b4f14 frag u_cascade_range 400 float 5 16 +U c57b4f14 frag u_cascade_texel 480 float 5 16 +U c57b4f14 frag u_sun_dir 560 vec3 1 0 +U c57b4f14 frag u_sun_color 576 vec3 1 0 +U c57b4f14 frag u_cam_pos 592 vec3 1 0 +U c57b4f14 frag u_prefilter_levels 604 float 1 0 +U c57b4f14 frag u_fog_density 608 float 1 0 +U c57b4f14 frag u_fog_height_falloff 612 float 1 0 +U c57b4f14 frag u_fog_base 616 float 1 0 +U c57b4f14 frag u_clip_y 620 float 1 0 +U c57b4f14 frag u_spec_scale 624 float 1 0 +U c57b4f14 frag u_sky_rot 632 vec2 1 0 +U c57b4f14 frag u_ibl_scale 640 vec3 1 0 +U c57b4f14 frag u_daylight 652 float 1 0 +U c57b4f14 frag u_fire_pos 656 vec3 1 0 +U c57b4f14 frag u_fire_color 672 vec3 1 0 +U c57b4f14 frag u_hand_pos 688 vec3 1 0 +U c57b4f14 frag u_hand_color 704 vec3 1 0 +U c57b4f14 frag u_hand_dir 720 vec3 1 0 +U c57b4f14 frag u_hand_cone 732 float 1 0 +U c57b4f14 frag u_ts_origin 736 vec2 1 0 +U c57b4f14 frag u_ts_half 744 float 1 0 +U c57b4f14 frag u_ts_on 748 float 1 0 +U c57b4f14 frag u_force_cascade 752 int 1 0 +U c57b4f14 frag u_cloud_shadow 756 float 1 0 +U c57b4f14 frag u_time 760 float 1 0 +U c57b4f14 frag u_texel 768 vec2 1 0 +U c57b4f14 frag u_radius 776 float 1 0 +T c57b4f14 u_brdf 2 +T c57b4f14 u_irradiance 3 +T c57b4f14 u_prefilter 4 +T c57b4f14 u_shadow 5 +T c57b4f14 u_src 6 +T c57b4f14 u_tershadow 7 +T c57b4f14 u_ts_height 8 +P 4be7acd9 fullscreen.vert heightgen.frag #define DEM; +B 4be7acd9 frag 1 856 +U 4be7acd9 frag u_cascade_vp 0 mat4 5 64 +U 4be7acd9 frag u_cascade_split 320 float 5 16 +U 4be7acd9 frag u_cascade_range 400 float 5 16 +U 4be7acd9 frag u_cascade_texel 480 float 5 16 +U 4be7acd9 frag u_sun_dir 560 vec3 1 0 +U 4be7acd9 frag u_sun_color 576 vec3 1 0 +U 4be7acd9 frag u_cam_pos 592 vec3 1 0 +U 4be7acd9 frag u_prefilter_levels 604 float 1 0 +U 4be7acd9 frag u_fog_density 608 float 1 0 +U 4be7acd9 frag u_fog_height_falloff 612 float 1 0 +U 4be7acd9 frag u_fog_base 616 float 1 0 +U 4be7acd9 frag u_clip_y 620 float 1 0 +U 4be7acd9 frag u_spec_scale 624 float 1 0 +U 4be7acd9 frag u_sky_rot 632 vec2 1 0 +U 4be7acd9 frag u_ibl_scale 640 vec3 1 0 +U 4be7acd9 frag u_daylight 652 float 1 0 +U 4be7acd9 frag u_fire_pos 656 vec3 1 0 +U 4be7acd9 frag u_fire_color 672 vec3 1 0 +U 4be7acd9 frag u_hand_pos 688 vec3 1 0 +U 4be7acd9 frag u_hand_color 704 vec3 1 0 +U 4be7acd9 frag u_hand_dir 720 vec3 1 0 +U 4be7acd9 frag u_hand_cone 732 float 1 0 +U 4be7acd9 frag u_ts_origin 736 vec2 1 0 +U 4be7acd9 frag u_ts_half 744 float 1 0 +U 4be7acd9 frag u_ts_on 748 float 1 0 +U 4be7acd9 frag u_force_cascade 752 int 1 0 +U 4be7acd9 frag u_cloud_shadow 756 float 1 0 +U 4be7acd9 frag u_time 760 float 1 0 +U 4be7acd9 frag u_half 764 float 1 0 +U 4be7acd9 frag u_dem_min 768 float 1 0 +U 4be7acd9 frag u_dem_max 772 float 1 0 +U 4be7acd9 frag u_dem_base 776 float 1 0 +U 4be7acd9 frag u_origin 784 vec2 1 0 +U 4be7acd9 frag u_lake 800 vec4 1 0 +U 4be7acd9 frag u_lake_level 816 float 1 0 +U 4be7acd9 frag u_sea_level 820 float 1 0 +U 4be7acd9 frag u_isle 832 vec4 1 0 +U 4be7acd9 frag u_isle_mode 848 float 1 0 +U 4be7acd9 frag u_dem_blur 852 float 1 0 +T 4be7acd9 u_brdf 2 +T 4be7acd9 u_dem 3 +T 4be7acd9 u_irradiance 4 +T 4be7acd9 u_prefilter 5 +T 4be7acd9 u_shadow 6 +T 4be7acd9 u_tershadow 7 +T 4be7acd9 u_ts_height 8 +P 858f5089 fullscreen.vert ibl_brdf.frag +B 858f5089 frag 0 764 +U 858f5089 frag u_cascade_vp 0 mat4 5 64 +U 858f5089 frag u_cascade_split 320 float 5 16 +U 858f5089 frag u_cascade_range 400 float 5 16 +U 858f5089 frag u_cascade_texel 480 float 5 16 +U 858f5089 frag u_sun_dir 560 vec3 1 0 +U 858f5089 frag u_sun_color 576 vec3 1 0 +U 858f5089 frag u_cam_pos 592 vec3 1 0 +U 858f5089 frag u_prefilter_levels 604 float 1 0 +U 858f5089 frag u_fog_density 608 float 1 0 +U 858f5089 frag u_fog_height_falloff 612 float 1 0 +U 858f5089 frag u_fog_base 616 float 1 0 +U 858f5089 frag u_clip_y 620 float 1 0 +U 858f5089 frag u_spec_scale 624 float 1 0 +U 858f5089 frag u_sky_rot 632 vec2 1 0 +U 858f5089 frag u_ibl_scale 640 vec3 1 0 +U 858f5089 frag u_daylight 652 float 1 0 +U 858f5089 frag u_fire_pos 656 vec3 1 0 +U 858f5089 frag u_fire_color 672 vec3 1 0 +U 858f5089 frag u_hand_pos 688 vec3 1 0 +U 858f5089 frag u_hand_color 704 vec3 1 0 +U 858f5089 frag u_hand_dir 720 vec3 1 0 +U 858f5089 frag u_hand_cone 732 float 1 0 +U 858f5089 frag u_ts_origin 736 vec2 1 0 +U 858f5089 frag u_ts_half 744 float 1 0 +U 858f5089 frag u_ts_on 748 float 1 0 +U 858f5089 frag u_force_cascade 752 int 1 0 +U 858f5089 frag u_cloud_shadow 756 float 1 0 +U 858f5089 frag u_time 760 float 1 0 +T 858f5089 u_brdf 2 +T 858f5089 u_irradiance 3 +T 858f5089 u_prefilter 4 +T 858f5089 u_shadow 5 +T 858f5089 u_tershadow 6 +T 858f5089 u_ts_height 7 +P e18e40c9 fullscreen.vert ibl_irradiance.frag +B e18e40c9 frag 1 768 +U e18e40c9 frag u_cascade_vp 0 mat4 5 64 +U e18e40c9 frag u_cascade_split 320 float 5 16 +U e18e40c9 frag u_cascade_range 400 float 5 16 +U e18e40c9 frag u_cascade_texel 480 float 5 16 +U e18e40c9 frag u_sun_dir 560 vec3 1 0 +U e18e40c9 frag u_sun_color 576 vec3 1 0 +U e18e40c9 frag u_cam_pos 592 vec3 1 0 +U e18e40c9 frag u_prefilter_levels 604 float 1 0 +U e18e40c9 frag u_fog_density 608 float 1 0 +U e18e40c9 frag u_fog_height_falloff 612 float 1 0 +U e18e40c9 frag u_fog_base 616 float 1 0 +U e18e40c9 frag u_clip_y 620 float 1 0 +U e18e40c9 frag u_spec_scale 624 float 1 0 +U e18e40c9 frag u_sky_rot 632 vec2 1 0 +U e18e40c9 frag u_ibl_scale 640 vec3 1 0 +U e18e40c9 frag u_daylight 652 float 1 0 +U e18e40c9 frag u_fire_pos 656 vec3 1 0 +U e18e40c9 frag u_fire_color 672 vec3 1 0 +U e18e40c9 frag u_hand_pos 688 vec3 1 0 +U e18e40c9 frag u_hand_color 704 vec3 1 0 +U e18e40c9 frag u_hand_dir 720 vec3 1 0 +U e18e40c9 frag u_hand_cone 732 float 1 0 +U e18e40c9 frag u_ts_origin 736 vec2 1 0 +U e18e40c9 frag u_ts_half 744 float 1 0 +U e18e40c9 frag u_ts_on 748 float 1 0 +U e18e40c9 frag u_force_cascade 752 int 1 0 +U e18e40c9 frag u_cloud_shadow 756 float 1 0 +U e18e40c9 frag u_time 760 float 1 0 +U e18e40c9 frag u_sun_clip 764 float 1 0 +T e18e40c9 u_brdf 2 +T e18e40c9 u_irradiance 3 +T e18e40c9 u_prefilter 4 +T e18e40c9 u_shadow 5 +T e18e40c9 u_sky 6 +T e18e40c9 u_tershadow 7 +T e18e40c9 u_ts_height 8 +P 638623c2 fullscreen.vert ibl_prefilter.frag +B 638623c2 frag 1 776 +U 638623c2 frag u_cascade_vp 0 mat4 5 64 +U 638623c2 frag u_cascade_split 320 float 5 16 +U 638623c2 frag u_cascade_range 400 float 5 16 +U 638623c2 frag u_cascade_texel 480 float 5 16 +U 638623c2 frag u_sun_dir 560 vec3 1 0 +U 638623c2 frag u_sun_color 576 vec3 1 0 +U 638623c2 frag u_cam_pos 592 vec3 1 0 +U 638623c2 frag u_prefilter_levels 604 float 1 0 +U 638623c2 frag u_fog_density 608 float 1 0 +U 638623c2 frag u_fog_height_falloff 612 float 1 0 +U 638623c2 frag u_fog_base 616 float 1 0 +U 638623c2 frag u_clip_y 620 float 1 0 +U 638623c2 frag u_spec_scale 624 float 1 0 +U 638623c2 frag u_sky_rot 632 vec2 1 0 +U 638623c2 frag u_ibl_scale 640 vec3 1 0 +U 638623c2 frag u_daylight 652 float 1 0 +U 638623c2 frag u_fire_pos 656 vec3 1 0 +U 638623c2 frag u_fire_color 672 vec3 1 0 +U 638623c2 frag u_hand_pos 688 vec3 1 0 +U 638623c2 frag u_hand_color 704 vec3 1 0 +U 638623c2 frag u_hand_dir 720 vec3 1 0 +U 638623c2 frag u_hand_cone 732 float 1 0 +U 638623c2 frag u_ts_origin 736 vec2 1 0 +U 638623c2 frag u_ts_half 744 float 1 0 +U 638623c2 frag u_ts_on 748 float 1 0 +U 638623c2 frag u_force_cascade 752 int 1 0 +U 638623c2 frag u_cloud_shadow 756 float 1 0 +U 638623c2 frag u_time 760 float 1 0 +U 638623c2 frag u_rough 764 float 1 0 +U 638623c2 frag u_sun_clip 768 float 1 0 +U 638623c2 frag u_sky_w 772 float 1 0 +T 638623c2 u_brdf 2 +T 638623c2 u_irradiance 3 +T 638623c2 u_prefilter 4 +T 638623c2 u_shadow 5 +T 638623c2 u_sky 6 +T 638623c2 u_tershadow 7 +T 638623c2 u_ts_height 8 +P 4cf96468 fullscreen.vert sharpen.frag +B 4cf96468 frag 1 784 +U 4cf96468 frag u_cascade_vp 0 mat4 5 64 +U 4cf96468 frag u_cascade_split 320 float 5 16 +U 4cf96468 frag u_cascade_range 400 float 5 16 +U 4cf96468 frag u_cascade_texel 480 float 5 16 +U 4cf96468 frag u_sun_dir 560 vec3 1 0 +U 4cf96468 frag u_sun_color 576 vec3 1 0 +U 4cf96468 frag u_cam_pos 592 vec3 1 0 +U 4cf96468 frag u_prefilter_levels 604 float 1 0 +U 4cf96468 frag u_fog_density 608 float 1 0 +U 4cf96468 frag u_fog_height_falloff 612 float 1 0 +U 4cf96468 frag u_fog_base 616 float 1 0 +U 4cf96468 frag u_clip_y 620 float 1 0 +U 4cf96468 frag u_spec_scale 624 float 1 0 +U 4cf96468 frag u_sky_rot 632 vec2 1 0 +U 4cf96468 frag u_ibl_scale 640 vec3 1 0 +U 4cf96468 frag u_daylight 652 float 1 0 +U 4cf96468 frag u_fire_pos 656 vec3 1 0 +U 4cf96468 frag u_fire_color 672 vec3 1 0 +U 4cf96468 frag u_hand_pos 688 vec3 1 0 +U 4cf96468 frag u_hand_color 704 vec3 1 0 +U 4cf96468 frag u_hand_dir 720 vec3 1 0 +U 4cf96468 frag u_hand_cone 732 float 1 0 +U 4cf96468 frag u_ts_origin 736 vec2 1 0 +U 4cf96468 frag u_ts_half 744 float 1 0 +U 4cf96468 frag u_ts_on 748 float 1 0 +U 4cf96468 frag u_force_cascade 752 int 1 0 +U 4cf96468 frag u_cloud_shadow 756 float 1 0 +U 4cf96468 frag u_time 760 float 1 0 +U 4cf96468 frag u_texel 768 vec2 1 0 +U 4cf96468 frag u_amount 776 float 1 0 +U 4cf96468 frag u_grain 780 float 1 0 +T 4cf96468 u_brdf 2 +T 4cf96468 u_irradiance 3 +T 4cf96468 u_prefilter 4 +T 4cf96468 u_shadow 5 +T 4cf96468 u_src 6 +T 4cf96468 u_tershadow 7 +T 4cf96468 u_ts_height 8 +P 428caa3a fullscreen.vert sky.frag +B 428caa3a frag 1 872 +U 428caa3a frag u_cascade_vp 0 mat4 5 64 +U 428caa3a frag u_cascade_split 320 float 5 16 +U 428caa3a frag u_cascade_range 400 float 5 16 +U 428caa3a frag u_cascade_texel 480 float 5 16 +U 428caa3a frag u_sun_dir 560 vec3 1 0 +U 428caa3a frag u_sun_color 576 vec3 1 0 +U 428caa3a frag u_cam_pos 592 vec3 1 0 +U 428caa3a frag u_prefilter_levels 604 float 1 0 +U 428caa3a frag u_fog_density 608 float 1 0 +U 428caa3a frag u_fog_height_falloff 612 float 1 0 +U 428caa3a frag u_fog_base 616 float 1 0 +U 428caa3a frag u_clip_y 620 float 1 0 +U 428caa3a frag u_spec_scale 624 float 1 0 +U 428caa3a frag u_sky_rot 632 vec2 1 0 +U 428caa3a frag u_ibl_scale 640 vec3 1 0 +U 428caa3a frag u_daylight 652 float 1 0 +U 428caa3a frag u_fire_pos 656 vec3 1 0 +U 428caa3a frag u_fire_color 672 vec3 1 0 +U 428caa3a frag u_hand_pos 688 vec3 1 0 +U 428caa3a frag u_hand_color 704 vec3 1 0 +U 428caa3a frag u_hand_dir 720 vec3 1 0 +U 428caa3a frag u_hand_cone 732 float 1 0 +U 428caa3a frag u_ts_origin 736 vec2 1 0 +U 428caa3a frag u_ts_half 744 float 1 0 +U 428caa3a frag u_ts_on 748 float 1 0 +U 428caa3a frag u_force_cascade 752 int 1 0 +U 428caa3a frag u_cloud_shadow 756 float 1 0 +U 428caa3a frag u_time 760 float 1 0 +U 428caa3a frag u_inv_vp 768 mat4 1 0 +U 428caa3a frag u_sky_gain 832 float 1 0 +U 428caa3a frag u_sky_sat 836 float 1 0 +U 428caa3a frag u_moon_dir 848 vec3 1 0 +U 428caa3a frag u_moon_haze 860 float 1 0 +U 428caa3a frag u_moon_phase 864 float 1 0 +U 428caa3a frag u_moon_illum 868 float 1 0 +T 428caa3a u_brdf 2 +T 428caa3a u_irradiance 3 +T 428caa3a u_prefilter 4 +T 428caa3a u_shadow 5 +T 428caa3a u_sky 6 +T 428caa3a u_tershadow 7 +T 428caa3a u_ts_height 8 +P 3e4b62f9 fullscreen.vert ssao_blur.frag +B 3e4b62f9 frag 1 776 +U 3e4b62f9 frag u_cascade_vp 0 mat4 5 64 +U 3e4b62f9 frag u_cascade_split 320 float 5 16 +U 3e4b62f9 frag u_cascade_range 400 float 5 16 +U 3e4b62f9 frag u_cascade_texel 480 float 5 16 +U 3e4b62f9 frag u_sun_dir 560 vec3 1 0 +U 3e4b62f9 frag u_sun_color 576 vec3 1 0 +U 3e4b62f9 frag u_cam_pos 592 vec3 1 0 +U 3e4b62f9 frag u_prefilter_levels 604 float 1 0 +U 3e4b62f9 frag u_fog_density 608 float 1 0 +U 3e4b62f9 frag u_fog_height_falloff 612 float 1 0 +U 3e4b62f9 frag u_fog_base 616 float 1 0 +U 3e4b62f9 frag u_clip_y 620 float 1 0 +U 3e4b62f9 frag u_spec_scale 624 float 1 0 +U 3e4b62f9 frag u_sky_rot 632 vec2 1 0 +U 3e4b62f9 frag u_ibl_scale 640 vec3 1 0 +U 3e4b62f9 frag u_daylight 652 float 1 0 +U 3e4b62f9 frag u_fire_pos 656 vec3 1 0 +U 3e4b62f9 frag u_fire_color 672 vec3 1 0 +U 3e4b62f9 frag u_hand_pos 688 vec3 1 0 +U 3e4b62f9 frag u_hand_color 704 vec3 1 0 +U 3e4b62f9 frag u_hand_dir 720 vec3 1 0 +U 3e4b62f9 frag u_hand_cone 732 float 1 0 +U 3e4b62f9 frag u_ts_origin 736 vec2 1 0 +U 3e4b62f9 frag u_ts_half 744 float 1 0 +U 3e4b62f9 frag u_ts_on 748 float 1 0 +U 3e4b62f9 frag u_force_cascade 752 int 1 0 +U 3e4b62f9 frag u_cloud_shadow 756 float 1 0 +U 3e4b62f9 frag u_time 760 float 1 0 +U 3e4b62f9 frag u_texel 768 vec2 1 0 +T 3e4b62f9 u_ao 2 +T 3e4b62f9 u_brdf 3 +T 3e4b62f9 u_depth 4 +T 3e4b62f9 u_irradiance 5 +T 3e4b62f9 u_prefilter 6 +T 3e4b62f9 u_shadow 7 +T 3e4b62f9 u_tershadow 8 +T 3e4b62f9 u_ts_height 9 +P 676965ab fullscreen.vert ssgi.frag +B 676965ab frag 1 916 +U 676965ab frag u_cascade_vp 0 mat4 5 64 +U 676965ab frag u_cascade_split 320 float 5 16 +U 676965ab frag u_cascade_range 400 float 5 16 +U 676965ab frag u_cascade_texel 480 float 5 16 +U 676965ab frag u_sun_dir 560 vec3 1 0 +U 676965ab frag u_sun_color 576 vec3 1 0 +U 676965ab frag u_cam_pos 592 vec3 1 0 +U 676965ab frag u_prefilter_levels 604 float 1 0 +U 676965ab frag u_fog_density 608 float 1 0 +U 676965ab frag u_fog_height_falloff 612 float 1 0 +U 676965ab frag u_fog_base 616 float 1 0 +U 676965ab frag u_clip_y 620 float 1 0 +U 676965ab frag u_spec_scale 624 float 1 0 +U 676965ab frag u_sky_rot 632 vec2 1 0 +U 676965ab frag u_ibl_scale 640 vec3 1 0 +U 676965ab frag u_daylight 652 float 1 0 +U 676965ab frag u_fire_pos 656 vec3 1 0 +U 676965ab frag u_fire_color 672 vec3 1 0 +U 676965ab frag u_hand_pos 688 vec3 1 0 +U 676965ab frag u_hand_color 704 vec3 1 0 +U 676965ab frag u_hand_dir 720 vec3 1 0 +U 676965ab frag u_hand_cone 732 float 1 0 +U 676965ab frag u_ts_origin 736 vec2 1 0 +U 676965ab frag u_ts_half 744 float 1 0 +U 676965ab frag u_ts_on 748 float 1 0 +U 676965ab frag u_force_cascade 752 int 1 0 +U 676965ab frag u_cloud_shadow 756 float 1 0 +U 676965ab frag u_time 760 float 1 0 +U 676965ab frag u_inv_proj 768 mat4 1 0 +U 676965ab frag u_proj 832 mat4 1 0 +U 676965ab frag u_texel 896 vec2 1 0 +U 676965ab frag u_radius 904 float 1 0 +U 676965ab frag u_intensity 908 float 1 0 +U 676965ab frag u_frame 912 float 1 0 +T 676965ab u_brdf 2 +T 676965ab u_depth 3 +T 676965ab u_irradiance 4 +T 676965ab u_prefilter 5 +T 676965ab u_prev_color 6 +T 676965ab u_shadow 7 +T 676965ab u_tershadow 8 +T 676965ab u_ts_height 9 +P a45356c7 fullscreen.vert ternormal.frag +B a45356c7 frag 1 768 +U a45356c7 frag u_cascade_vp 0 mat4 5 64 +U a45356c7 frag u_cascade_split 320 float 5 16 +U a45356c7 frag u_cascade_range 400 float 5 16 +U a45356c7 frag u_cascade_texel 480 float 5 16 +U a45356c7 frag u_sun_dir 560 vec3 1 0 +U a45356c7 frag u_sun_color 576 vec3 1 0 +U a45356c7 frag u_cam_pos 592 vec3 1 0 +U a45356c7 frag u_prefilter_levels 604 float 1 0 +U a45356c7 frag u_fog_density 608 float 1 0 +U a45356c7 frag u_fog_height_falloff 612 float 1 0 +U a45356c7 frag u_fog_base 616 float 1 0 +U a45356c7 frag u_clip_y 620 float 1 0 +U a45356c7 frag u_spec_scale 624 float 1 0 +U a45356c7 frag u_sky_rot 632 vec2 1 0 +U a45356c7 frag u_ibl_scale 640 vec3 1 0 +U a45356c7 frag u_daylight 652 float 1 0 +U a45356c7 frag u_fire_pos 656 vec3 1 0 +U a45356c7 frag u_fire_color 672 vec3 1 0 +U a45356c7 frag u_hand_pos 688 vec3 1 0 +U a45356c7 frag u_hand_color 704 vec3 1 0 +U a45356c7 frag u_hand_dir 720 vec3 1 0 +U a45356c7 frag u_hand_cone 732 float 1 0 +U a45356c7 frag u_ts_origin 736 vec2 1 0 +U a45356c7 frag u_ts_half 744 float 1 0 +U a45356c7 frag u_ts_on 748 float 1 0 +U a45356c7 frag u_force_cascade 752 int 1 0 +U a45356c7 frag u_cloud_shadow 756 float 1 0 +U a45356c7 frag u_time 760 float 1 0 +U a45356c7 frag u_half 764 float 1 0 +T a45356c7 u_brdf 2 +T a45356c7 u_irradiance 3 +T a45356c7 u_prefilter 4 +T a45356c7 u_shadow 5 +T a45356c7 u_src 6 +T a45356c7 u_tershadow 7 +T a45356c7 u_ts_height 8 +P 4a8e9f28 fullscreen.vert tershadow.frag #define NOISE_ONLY; +B 4a8e9f28 frag 1 780 +U 4a8e9f28 frag u_cascade_vp 0 mat4 5 64 +U 4a8e9f28 frag u_cascade_split 320 float 5 16 +U 4a8e9f28 frag u_cascade_range 400 float 5 16 +U 4a8e9f28 frag u_cascade_texel 480 float 5 16 +U 4a8e9f28 frag u_sun_dir 560 vec3 1 0 +U 4a8e9f28 frag u_sun_color 576 vec3 1 0 +U 4a8e9f28 frag u_cam_pos 592 vec3 1 0 +U 4a8e9f28 frag u_prefilter_levels 604 float 1 0 +U 4a8e9f28 frag u_fog_density 608 float 1 0 +U 4a8e9f28 frag u_fog_height_falloff 612 float 1 0 +U 4a8e9f28 frag u_fog_base 616 float 1 0 +U 4a8e9f28 frag u_clip_y 620 float 1 0 +U 4a8e9f28 frag u_spec_scale 624 float 1 0 +U 4a8e9f28 frag u_sky_rot 632 vec2 1 0 +U 4a8e9f28 frag u_ibl_scale 640 vec3 1 0 +U 4a8e9f28 frag u_daylight 652 float 1 0 +U 4a8e9f28 frag u_fire_pos 656 vec3 1 0 +U 4a8e9f28 frag u_fire_color 672 vec3 1 0 +U 4a8e9f28 frag u_hand_pos 688 vec3 1 0 +U 4a8e9f28 frag u_hand_color 704 vec3 1 0 +U 4a8e9f28 frag u_hand_dir 720 vec3 1 0 +U 4a8e9f28 frag u_hand_cone 732 float 1 0 +U 4a8e9f28 frag u_ts_origin 736 vec2 1 0 +U 4a8e9f28 frag u_ts_half 744 float 1 0 +U 4a8e9f28 frag u_ts_on 748 float 1 0 +U 4a8e9f28 frag u_force_cascade 752 int 1 0 +U 4a8e9f28 frag u_cloud_shadow 756 float 1 0 +U 4a8e9f28 frag u_time 760 float 1 0 +U 4a8e9f28 frag u_half 764 float 1 0 +U 4a8e9f28 frag u_sun 768 vec3 1 0 +T 4a8e9f28 u_brdf 2 +T 4a8e9f28 u_height 3 +T 4a8e9f28 u_irradiance 4 +T 4a8e9f28 u_prefilter 5 +T 4a8e9f28 u_shadow 6 +T 4a8e9f28 u_tershadow 7 +T 4a8e9f28 u_ts_height 8 +P 725523d9 fullscreen.vert tonemap.frag +B 725523d9 frag 1 852 +U 725523d9 frag u_cascade_vp 0 mat4 5 64 +U 725523d9 frag u_cascade_split 320 float 5 16 +U 725523d9 frag u_cascade_range 400 float 5 16 +U 725523d9 frag u_cascade_texel 480 float 5 16 +U 725523d9 frag u_sun_dir 560 vec3 1 0 +U 725523d9 frag u_sun_color 576 vec3 1 0 +U 725523d9 frag u_cam_pos 592 vec3 1 0 +U 725523d9 frag u_prefilter_levels 604 float 1 0 +U 725523d9 frag u_fog_density 608 float 1 0 +U 725523d9 frag u_fog_height_falloff 612 float 1 0 +U 725523d9 frag u_fog_base 616 float 1 0 +U 725523d9 frag u_clip_y 620 float 1 0 +U 725523d9 frag u_spec_scale 624 float 1 0 +U 725523d9 frag u_sky_rot 632 vec2 1 0 +U 725523d9 frag u_ibl_scale 640 vec3 1 0 +U 725523d9 frag u_daylight 652 float 1 0 +U 725523d9 frag u_fire_pos 656 vec3 1 0 +U 725523d9 frag u_fire_color 672 vec3 1 0 +U 725523d9 frag u_hand_pos 688 vec3 1 0 +U 725523d9 frag u_hand_color 704 vec3 1 0 +U 725523d9 frag u_hand_dir 720 vec3 1 0 +U 725523d9 frag u_hand_cone 732 float 1 0 +U 725523d9 frag u_ts_origin 736 vec2 1 0 +U 725523d9 frag u_ts_half 744 float 1 0 +U 725523d9 frag u_ts_on 748 float 1 0 +U 725523d9 frag u_force_cascade 752 int 1 0 +U 725523d9 frag u_cloud_shadow 756 float 1 0 +U 725523d9 frag u_time 760 float 1 0 +U 725523d9 frag u_ao_strength 764 float 1 0 +U 725523d9 frag u_gi_strength 768 float 1 0 +U 725523d9 frag u_wb 784 vec3 1 0 +U 725523d9 frag u_lift 800 vec3 1 0 +U 725523d9 frag u_gain 816 vec3 1 0 +U 725523d9 frag u_exposure 828 float 1 0 +U 725523d9 frag u_auto 832 float 1 0 +U 725523d9 frag u_bloom_strength 836 float 1 0 +U 725523d9 frag u_vignette 840 float 1 0 +U 725523d9 frag u_saturation 844 float 1 0 +U 725523d9 frag u_contrast 848 float 1 0 +T 725523d9 u_adapt 2 +T 725523d9 u_ao 3 +T 725523d9 u_bloom 4 +T 725523d9 u_brdf 5 +T 725523d9 u_hdr 6 +T 725523d9 u_irradiance 7 +T 725523d9 u_prefilter 8 +T 725523d9 u_shadow 9 +T 725523d9 u_tershadow 10 +T 725523d9 u_ts_height 11 +P 7ed7de52 grass.vert model.frag #define FOLIAGE;#define BLADE; +B 7ed7de52 vert 0 296 +U 7ed7de52 vert u_view 0 mat4 1 0 +U 7ed7de52 vert u_proj 64 mat4 1 0 +U 7ed7de52 vert u_vp 128 mat4 1 0 +U 7ed7de52 vert u_cam_pos 192 vec3 1 0 +U 7ed7de52 vert u_time 204 float 1 0 +U 7ed7de52 vert u_ts_origin 208 vec2 1 0 +U 7ed7de52 vert u_ts_half 216 float 1 0 +U 7ed7de52 vert u_ortho_on 220 float 1 0 +U 7ed7de52 vert u_lake_level 224 float 1 0 +U 7ed7de52 vert u_sea_level 228 float 1 0 +U 7ed7de52 vert u_lake 240 vec4 1 0 +U 7ed7de52 vert u_snow_line 256 float 1 0 +U 7ed7de52 vert u_wind 260 float 1 0 +U 7ed7de52 vert u_tile 264 vec2 1 0 +U 7ed7de52 vert u_tile_cells 272 int 1 0 +U 7ed7de52 vert u_per_cell 276 int 1 0 +U 7ed7de52 vert u_s0 280 float 1 0 +U 7ed7de52 vert u_d0 284 float 1 0 +U 7ed7de52 vert u_radius 288 float 1 0 +U 7ed7de52 vert u_dbg 292 int 1 0 +I 7ed7de52 a_pos 0 vec3 +I 7ed7de52 a_uv 2 vec2 +B 7ed7de52 frag 1 892 +U 7ed7de52 frag u_cascade_vp 0 mat4 5 64 +U 7ed7de52 frag u_cascade_split 320 float 5 16 +U 7ed7de52 frag u_cascade_range 400 float 5 16 +U 7ed7de52 frag u_cascade_texel 480 float 5 16 +U 7ed7de52 frag u_sun_dir 560 vec3 1 0 +U 7ed7de52 frag u_sun_color 576 vec3 1 0 +U 7ed7de52 frag u_cam_pos 592 vec3 1 0 +U 7ed7de52 frag u_prefilter_levels 604 float 1 0 +U 7ed7de52 frag u_fog_density 608 float 1 0 +U 7ed7de52 frag u_fog_height_falloff 612 float 1 0 +U 7ed7de52 frag u_fog_base 616 float 1 0 +U 7ed7de52 frag u_clip_y 620 float 1 0 +U 7ed7de52 frag u_spec_scale 624 float 1 0 +U 7ed7de52 frag u_sky_rot 632 vec2 1 0 +U 7ed7de52 frag u_ibl_scale 640 vec3 1 0 +U 7ed7de52 frag u_daylight 652 float 1 0 +U 7ed7de52 frag u_fire_pos 656 vec3 1 0 +U 7ed7de52 frag u_fire_color 672 vec3 1 0 +U 7ed7de52 frag u_hand_pos 688 vec3 1 0 +U 7ed7de52 frag u_hand_color 704 vec3 1 0 +U 7ed7de52 frag u_hand_dir 720 vec3 1 0 +U 7ed7de52 frag u_hand_cone 732 float 1 0 +U 7ed7de52 frag u_ts_origin 736 vec2 1 0 +U 7ed7de52 frag u_ts_half 744 float 1 0 +U 7ed7de52 frag u_ts_on 748 float 1 0 +U 7ed7de52 frag u_force_cascade 752 int 1 0 +U 7ed7de52 frag u_cloud_shadow 756 float 1 0 +U 7ed7de52 frag u_time 760 float 1 0 +U 7ed7de52 frag u_model_h 764 float 1 0 +U 7ed7de52 frag u_view 768 mat4 1 0 +U 7ed7de52 frag u_tint 832 vec3 1 0 +U 7ed7de52 frag u_rough_scale 844 float 1 0 +U 7ed7de52 frag u_emissive 848 float 1 0 +U 7ed7de52 frag u_blade_base 864 vec3 1 0 +U 7ed7de52 frag u_blade_tip 880 vec3 1 0 +T 7ed7de52 u_arm 2 +T 7ed7de52 u_brdf 3 +T 7ed7de52 u_diff 4 +T 7ed7de52 u_irradiance 5 +T 7ed7de52 u_nrm 6 +T 7ed7de52 u_ortho 7 +T 7ed7de52 u_prefilter 8 +T 7ed7de52 u_shadow 9 +T 7ed7de52 u_tershadow 10 +T 7ed7de52 u_ts_height 11 +P 3733fc38 impostor.vert impostor.frag +B 3733fc38 vert 0 232 +U 3733fc38 vert u_view 0 mat4 1 0 +U 3733fc38 vert u_proj 64 mat4 1 0 +U 3733fc38 vert u_light_vp 128 mat4 1 0 +U 3733fc38 vert u_cam_pos 192 vec3 1 0 +U 3733fc38 vert u_face_dir 208 vec3 1 0 +U 3733fc38 vert u_radius 220 float 1 0 +U 3733fc38 vert u_height 224 float 1 0 +U 3733fc38 vert u_tiles 228 float 1 0 +I 3733fc38 i_pos 3 vec4 +I 3733fc38 i_rot 4 vec4 +I 3733fc38 a_xy 0 vec2 +I 3733fc38 a_uv 1 vec2 +B 3733fc38 frag 1 864 +U 3733fc38 frag u_cascade_vp 0 mat4 5 64 +U 3733fc38 frag u_cascade_split 320 float 5 16 +U 3733fc38 frag u_cascade_range 400 float 5 16 +U 3733fc38 frag u_cascade_texel 480 float 5 16 +U 3733fc38 frag u_sun_dir 560 vec3 1 0 +U 3733fc38 frag u_sun_color 576 vec3 1 0 +U 3733fc38 frag u_cam_pos 592 vec3 1 0 +U 3733fc38 frag u_prefilter_levels 604 float 1 0 +U 3733fc38 frag u_fog_density 608 float 1 0 +U 3733fc38 frag u_fog_height_falloff 612 float 1 0 +U 3733fc38 frag u_fog_base 616 float 1 0 +U 3733fc38 frag u_clip_y 620 float 1 0 +U 3733fc38 frag u_spec_scale 624 float 1 0 +U 3733fc38 frag u_sky_rot 632 vec2 1 0 +U 3733fc38 frag u_ibl_scale 640 vec3 1 0 +U 3733fc38 frag u_daylight 652 float 1 0 +U 3733fc38 frag u_fire_pos 656 vec3 1 0 +U 3733fc38 frag u_fire_color 672 vec3 1 0 +U 3733fc38 frag u_hand_pos 688 vec3 1 0 +U 3733fc38 frag u_hand_color 704 vec3 1 0 +U 3733fc38 frag u_hand_dir 720 vec3 1 0 +U 3733fc38 frag u_hand_cone 732 float 1 0 +U 3733fc38 frag u_ts_origin 736 vec2 1 0 +U 3733fc38 frag u_ts_half 744 float 1 0 +U 3733fc38 frag u_ts_on 748 float 1 0 +U 3733fc38 frag u_force_cascade 752 int 1 0 +U 3733fc38 frag u_cloud_shadow 756 float 1 0 +U 3733fc38 frag u_time 760 float 1 0 +U 3733fc38 frag u_view 768 mat4 1 0 +U 3733fc38 frag u_tiles 832 float 1 0 +U 3733fc38 frag u_tint 848 vec3 1 0 +U 3733fc38 frag u_radius 860 float 1 0 +T 3733fc38 u_atlas_albedo 2 +T 3733fc38 u_atlas_normal 3 +T 3733fc38 u_brdf 4 +T 3733fc38 u_irradiance 5 +T 3733fc38 u_prefilter 6 +T 3733fc38 u_shadow 7 +T 3733fc38 u_tershadow 8 +T 3733fc38 u_ts_height 9 +P 4d4fa91b impostor.vert impostor.frag #define SHADOW_PASS; +B 4d4fa91b vert 0 232 +U 4d4fa91b vert u_view 0 mat4 1 0 +U 4d4fa91b vert u_proj 64 mat4 1 0 +U 4d4fa91b vert u_light_vp 128 mat4 1 0 +U 4d4fa91b vert u_cam_pos 192 vec3 1 0 +U 4d4fa91b vert u_face_dir 208 vec3 1 0 +U 4d4fa91b vert u_radius 220 float 1 0 +U 4d4fa91b vert u_height 224 float 1 0 +U 4d4fa91b vert u_tiles 228 float 1 0 +I 4d4fa91b i_pos 3 vec4 +I 4d4fa91b i_rot 4 vec4 +I 4d4fa91b a_xy 0 vec2 +I 4d4fa91b a_uv 1 vec2 +B 4d4fa91b frag 1 864 +U 4d4fa91b frag u_cascade_vp 0 mat4 5 64 +U 4d4fa91b frag u_cascade_split 320 float 5 16 +U 4d4fa91b frag u_cascade_range 400 float 5 16 +U 4d4fa91b frag u_cascade_texel 480 float 5 16 +U 4d4fa91b frag u_sun_dir 560 vec3 1 0 +U 4d4fa91b frag u_sun_color 576 vec3 1 0 +U 4d4fa91b frag u_cam_pos 592 vec3 1 0 +U 4d4fa91b frag u_prefilter_levels 604 float 1 0 +U 4d4fa91b frag u_fog_density 608 float 1 0 +U 4d4fa91b frag u_fog_height_falloff 612 float 1 0 +U 4d4fa91b frag u_fog_base 616 float 1 0 +U 4d4fa91b frag u_clip_y 620 float 1 0 +U 4d4fa91b frag u_spec_scale 624 float 1 0 +U 4d4fa91b frag u_sky_rot 632 vec2 1 0 +U 4d4fa91b frag u_ibl_scale 640 vec3 1 0 +U 4d4fa91b frag u_daylight 652 float 1 0 +U 4d4fa91b frag u_fire_pos 656 vec3 1 0 +U 4d4fa91b frag u_fire_color 672 vec3 1 0 +U 4d4fa91b frag u_hand_pos 688 vec3 1 0 +U 4d4fa91b frag u_hand_color 704 vec3 1 0 +U 4d4fa91b frag u_hand_dir 720 vec3 1 0 +U 4d4fa91b frag u_hand_cone 732 float 1 0 +U 4d4fa91b frag u_ts_origin 736 vec2 1 0 +U 4d4fa91b frag u_ts_half 744 float 1 0 +U 4d4fa91b frag u_ts_on 748 float 1 0 +U 4d4fa91b frag u_force_cascade 752 int 1 0 +U 4d4fa91b frag u_cloud_shadow 756 float 1 0 +U 4d4fa91b frag u_time 760 float 1 0 +U 4d4fa91b frag u_view 768 mat4 1 0 +U 4d4fa91b frag u_tiles 832 float 1 0 +U 4d4fa91b frag u_tint 848 vec3 1 0 +U 4d4fa91b frag u_radius 860 float 1 0 +T 4d4fa91b u_atlas_albedo 2 +T 4d4fa91b u_atlas_normal 3 +T 4d4fa91b u_brdf 4 +T 4d4fa91b u_irradiance 5 +T 4d4fa91b u_prefilter 6 +T 4d4fa91b u_shadow 7 +T 4d4fa91b u_tershadow 8 +T 4d4fa91b u_ts_height 9 +P 9dce3246 model.vert bake.frag +B 9dce3246 vert 0 232 +U 9dce3246 vert u_view 0 mat4 1 0 +U 9dce3246 vert u_proj 64 mat4 1 0 +U 9dce3246 vert u_light_vp 128 mat4 1 0 +U 9dce3246 vert u_time 192 float 1 0 +U 9dce3246 vert u_wind 196 float 1 0 +U 9dce3246 vert u_card_w 200 float 1 0 +U 9dce3246 vert u_card_h 204 float 1 0 +U 9dce3246 vert u_ground 208 float 1 0 +U 9dce3246 vert u_ts_origin 216 vec2 1 0 +U 9dce3246 vert u_ts_half 224 float 1 0 +U 9dce3246 vert u_model_h 228 float 1 0 +I 9dce3246 i_rot 4 vec4 +I 9dce3246 a_pos 0 vec3 +I 9dce3246 i_pos 3 vec4 +I 9dce3246 a_nrm 1 vec3 +I 9dce3246 a_uv 2 vec2 +B 9dce3246 frag 0 764 +U 9dce3246 frag u_cascade_vp 0 mat4 5 64 +U 9dce3246 frag u_cascade_split 320 float 5 16 +U 9dce3246 frag u_cascade_range 400 float 5 16 +U 9dce3246 frag u_cascade_texel 480 float 5 16 +U 9dce3246 frag u_sun_dir 560 vec3 1 0 +U 9dce3246 frag u_sun_color 576 vec3 1 0 +U 9dce3246 frag u_cam_pos 592 vec3 1 0 +U 9dce3246 frag u_prefilter_levels 604 float 1 0 +U 9dce3246 frag u_fog_density 608 float 1 0 +U 9dce3246 frag u_fog_height_falloff 612 float 1 0 +U 9dce3246 frag u_fog_base 616 float 1 0 +U 9dce3246 frag u_clip_y 620 float 1 0 +U 9dce3246 frag u_spec_scale 624 float 1 0 +U 9dce3246 frag u_sky_rot 632 vec2 1 0 +U 9dce3246 frag u_ibl_scale 640 vec3 1 0 +U 9dce3246 frag u_daylight 652 float 1 0 +U 9dce3246 frag u_fire_pos 656 vec3 1 0 +U 9dce3246 frag u_fire_color 672 vec3 1 0 +U 9dce3246 frag u_hand_pos 688 vec3 1 0 +U 9dce3246 frag u_hand_color 704 vec3 1 0 +U 9dce3246 frag u_hand_dir 720 vec3 1 0 +U 9dce3246 frag u_hand_cone 732 float 1 0 +U 9dce3246 frag u_ts_origin 736 vec2 1 0 +U 9dce3246 frag u_ts_half 744 float 1 0 +U 9dce3246 frag u_ts_on 748 float 1 0 +U 9dce3246 frag u_force_cascade 752 int 1 0 +U 9dce3246 frag u_cloud_shadow 756 float 1 0 +U 9dce3246 frag u_time 760 float 1 0 +T 9dce3246 u_arm 2 +T 9dce3246 u_brdf 3 +T 9dce3246 u_diff 4 +T 9dce3246 u_irradiance 5 +T 9dce3246 u_prefilter 6 +T 9dce3246 u_shadow 7 +T 9dce3246 u_tershadow 8 +T 9dce3246 u_ts_height 9 +P 439a2253 model.vert bake.frag #define CARD; +B 439a2253 vert 0 232 +U 439a2253 vert u_view 0 mat4 1 0 +U 439a2253 vert u_proj 64 mat4 1 0 +U 439a2253 vert u_light_vp 128 mat4 1 0 +U 439a2253 vert u_time 192 float 1 0 +U 439a2253 vert u_wind 196 float 1 0 +U 439a2253 vert u_card_w 200 float 1 0 +U 439a2253 vert u_card_h 204 float 1 0 +U 439a2253 vert u_ground 208 float 1 0 +U 439a2253 vert u_ts_origin 216 vec2 1 0 +U 439a2253 vert u_ts_half 224 float 1 0 +U 439a2253 vert u_model_h 228 float 1 0 +I 439a2253 i_rot 4 vec4 +I 439a2253 a_pos 0 vec3 +I 439a2253 i_pos 3 vec4 +I 439a2253 a_nrm 1 vec3 +I 439a2253 a_uv 2 vec2 +B 439a2253 frag 0 764 +U 439a2253 frag u_cascade_vp 0 mat4 5 64 +U 439a2253 frag u_cascade_split 320 float 5 16 +U 439a2253 frag u_cascade_range 400 float 5 16 +U 439a2253 frag u_cascade_texel 480 float 5 16 +U 439a2253 frag u_sun_dir 560 vec3 1 0 +U 439a2253 frag u_sun_color 576 vec3 1 0 +U 439a2253 frag u_cam_pos 592 vec3 1 0 +U 439a2253 frag u_prefilter_levels 604 float 1 0 +U 439a2253 frag u_fog_density 608 float 1 0 +U 439a2253 frag u_fog_height_falloff 612 float 1 0 +U 439a2253 frag u_fog_base 616 float 1 0 +U 439a2253 frag u_clip_y 620 float 1 0 +U 439a2253 frag u_spec_scale 624 float 1 0 +U 439a2253 frag u_sky_rot 632 vec2 1 0 +U 439a2253 frag u_ibl_scale 640 vec3 1 0 +U 439a2253 frag u_daylight 652 float 1 0 +U 439a2253 frag u_fire_pos 656 vec3 1 0 +U 439a2253 frag u_fire_color 672 vec3 1 0 +U 439a2253 frag u_hand_pos 688 vec3 1 0 +U 439a2253 frag u_hand_color 704 vec3 1 0 +U 439a2253 frag u_hand_dir 720 vec3 1 0 +U 439a2253 frag u_hand_cone 732 float 1 0 +U 439a2253 frag u_ts_origin 736 vec2 1 0 +U 439a2253 frag u_ts_half 744 float 1 0 +U 439a2253 frag u_ts_on 748 float 1 0 +U 439a2253 frag u_force_cascade 752 int 1 0 +U 439a2253 frag u_cloud_shadow 756 float 1 0 +U 439a2253 frag u_time 760 float 1 0 +T 439a2253 u_arm 2 +T 439a2253 u_brdf 3 +T 439a2253 u_diff 4 +T 439a2253 u_irradiance 5 +T 439a2253 u_prefilter 6 +T 439a2253 u_shadow 7 +T 439a2253 u_tershadow 8 +T 439a2253 u_ts_height 9 +P 86f427b0 model.vert bake.frag #define FLOWER; +B 86f427b0 vert 0 232 +U 86f427b0 vert u_view 0 mat4 1 0 +U 86f427b0 vert u_proj 64 mat4 1 0 +U 86f427b0 vert u_light_vp 128 mat4 1 0 +U 86f427b0 vert u_time 192 float 1 0 +U 86f427b0 vert u_wind 196 float 1 0 +U 86f427b0 vert u_card_w 200 float 1 0 +U 86f427b0 vert u_card_h 204 float 1 0 +U 86f427b0 vert u_ground 208 float 1 0 +U 86f427b0 vert u_ts_origin 216 vec2 1 0 +U 86f427b0 vert u_ts_half 224 float 1 0 +U 86f427b0 vert u_model_h 228 float 1 0 +I 86f427b0 i_rot 4 vec4 +I 86f427b0 a_pos 0 vec3 +I 86f427b0 i_pos 3 vec4 +I 86f427b0 a_nrm 1 vec3 +I 86f427b0 a_uv 2 vec2 +B 86f427b0 frag 0 764 +U 86f427b0 frag u_cascade_vp 0 mat4 5 64 +U 86f427b0 frag u_cascade_split 320 float 5 16 +U 86f427b0 frag u_cascade_range 400 float 5 16 +U 86f427b0 frag u_cascade_texel 480 float 5 16 +U 86f427b0 frag u_sun_dir 560 vec3 1 0 +U 86f427b0 frag u_sun_color 576 vec3 1 0 +U 86f427b0 frag u_cam_pos 592 vec3 1 0 +U 86f427b0 frag u_prefilter_levels 604 float 1 0 +U 86f427b0 frag u_fog_density 608 float 1 0 +U 86f427b0 frag u_fog_height_falloff 612 float 1 0 +U 86f427b0 frag u_fog_base 616 float 1 0 +U 86f427b0 frag u_clip_y 620 float 1 0 +U 86f427b0 frag u_spec_scale 624 float 1 0 +U 86f427b0 frag u_sky_rot 632 vec2 1 0 +U 86f427b0 frag u_ibl_scale 640 vec3 1 0 +U 86f427b0 frag u_daylight 652 float 1 0 +U 86f427b0 frag u_fire_pos 656 vec3 1 0 +U 86f427b0 frag u_fire_color 672 vec3 1 0 +U 86f427b0 frag u_hand_pos 688 vec3 1 0 +U 86f427b0 frag u_hand_color 704 vec3 1 0 +U 86f427b0 frag u_hand_dir 720 vec3 1 0 +U 86f427b0 frag u_hand_cone 732 float 1 0 +U 86f427b0 frag u_ts_origin 736 vec2 1 0 +U 86f427b0 frag u_ts_half 744 float 1 0 +U 86f427b0 frag u_ts_on 748 float 1 0 +U 86f427b0 frag u_force_cascade 752 int 1 0 +U 86f427b0 frag u_cloud_shadow 756 float 1 0 +U 86f427b0 frag u_time 760 float 1 0 +T 86f427b0 u_arm 2 +T 86f427b0 u_brdf 3 +T 86f427b0 u_diff 4 +T 86f427b0 u_irradiance 5 +T 86f427b0 u_prefilter 6 +T 86f427b0 u_shadow 7 +T 86f427b0 u_tershadow 8 +T 86f427b0 u_ts_height 9 +P bfa15301 model.vert depth.frag #define FOLIAGE;#define WIND;#define ALPHA_TEST; +B bfa15301 vert 0 232 +U bfa15301 vert u_view 0 mat4 1 0 +U bfa15301 vert u_proj 64 mat4 1 0 +U bfa15301 vert u_light_vp 128 mat4 1 0 +U bfa15301 vert u_time 192 float 1 0 +U bfa15301 vert u_wind 196 float 1 0 +U bfa15301 vert u_card_w 200 float 1 0 +U bfa15301 vert u_card_h 204 float 1 0 +U bfa15301 vert u_ground 208 float 1 0 +U bfa15301 vert u_ts_origin 216 vec2 1 0 +U bfa15301 vert u_ts_half 224 float 1 0 +U bfa15301 vert u_model_h 228 float 1 0 +I bfa15301 i_rot 4 vec4 +I bfa15301 a_pos 0 vec3 +I bfa15301 i_pos 3 vec4 +I bfa15301 a_nrm 1 vec3 +I bfa15301 a_uv 2 vec2 +B bfa15301 frag 1 764 +U bfa15301 frag u_cascade_vp 0 mat4 5 64 +U bfa15301 frag u_cascade_split 320 float 5 16 +U bfa15301 frag u_cascade_range 400 float 5 16 +U bfa15301 frag u_cascade_texel 480 float 5 16 +U bfa15301 frag u_sun_dir 560 vec3 1 0 +U bfa15301 frag u_sun_color 576 vec3 1 0 +U bfa15301 frag u_cam_pos 592 vec3 1 0 +U bfa15301 frag u_prefilter_levels 604 float 1 0 +U bfa15301 frag u_fog_density 608 float 1 0 +U bfa15301 frag u_fog_height_falloff 612 float 1 0 +U bfa15301 frag u_fog_base 616 float 1 0 +U bfa15301 frag u_clip_y 620 float 1 0 +U bfa15301 frag u_spec_scale 624 float 1 0 +U bfa15301 frag u_sky_rot 632 vec2 1 0 +U bfa15301 frag u_ibl_scale 640 vec3 1 0 +U bfa15301 frag u_daylight 652 float 1 0 +U bfa15301 frag u_fire_pos 656 vec3 1 0 +U bfa15301 frag u_fire_color 672 vec3 1 0 +U bfa15301 frag u_hand_pos 688 vec3 1 0 +U bfa15301 frag u_hand_color 704 vec3 1 0 +U bfa15301 frag u_hand_dir 720 vec3 1 0 +U bfa15301 frag u_hand_cone 732 float 1 0 +U bfa15301 frag u_ts_origin 736 vec2 1 0 +U bfa15301 frag u_ts_half 744 float 1 0 +U bfa15301 frag u_ts_on 748 float 1 0 +U bfa15301 frag u_force_cascade 752 int 1 0 +U bfa15301 frag u_cloud_shadow 756 float 1 0 +U bfa15301 frag u_time 760 float 1 0 +T bfa15301 u_brdf 2 +T bfa15301 u_diff 3 +T bfa15301 u_irradiance 4 +T bfa15301 u_prefilter 5 +T bfa15301 u_shadow 6 +T bfa15301 u_tershadow 7 +T bfa15301 u_ts_height 8 +P 01089da8 model.vert model.frag +B 01089da8 vert 0 232 +U 01089da8 vert u_view 0 mat4 1 0 +U 01089da8 vert u_proj 64 mat4 1 0 +U 01089da8 vert u_light_vp 128 mat4 1 0 +U 01089da8 vert u_time 192 float 1 0 +U 01089da8 vert u_wind 196 float 1 0 +U 01089da8 vert u_card_w 200 float 1 0 +U 01089da8 vert u_card_h 204 float 1 0 +U 01089da8 vert u_ground 208 float 1 0 +U 01089da8 vert u_ts_origin 216 vec2 1 0 +U 01089da8 vert u_ts_half 224 float 1 0 +U 01089da8 vert u_model_h 228 float 1 0 +I 01089da8 i_rot 4 vec4 +I 01089da8 a_pos 0 vec3 +I 01089da8 i_pos 3 vec4 +I 01089da8 a_nrm 1 vec3 +I 01089da8 a_uv 2 vec2 +B 01089da8 frag 1 852 +U 01089da8 frag u_cascade_vp 0 mat4 5 64 +U 01089da8 frag u_cascade_split 320 float 5 16 +U 01089da8 frag u_cascade_range 400 float 5 16 +U 01089da8 frag u_cascade_texel 480 float 5 16 +U 01089da8 frag u_sun_dir 560 vec3 1 0 +U 01089da8 frag u_sun_color 576 vec3 1 0 +U 01089da8 frag u_cam_pos 592 vec3 1 0 +U 01089da8 frag u_prefilter_levels 604 float 1 0 +U 01089da8 frag u_fog_density 608 float 1 0 +U 01089da8 frag u_fog_height_falloff 612 float 1 0 +U 01089da8 frag u_fog_base 616 float 1 0 +U 01089da8 frag u_clip_y 620 float 1 0 +U 01089da8 frag u_spec_scale 624 float 1 0 +U 01089da8 frag u_sky_rot 632 vec2 1 0 +U 01089da8 frag u_ibl_scale 640 vec3 1 0 +U 01089da8 frag u_daylight 652 float 1 0 +U 01089da8 frag u_fire_pos 656 vec3 1 0 +U 01089da8 frag u_fire_color 672 vec3 1 0 +U 01089da8 frag u_hand_pos 688 vec3 1 0 +U 01089da8 frag u_hand_color 704 vec3 1 0 +U 01089da8 frag u_hand_dir 720 vec3 1 0 +U 01089da8 frag u_hand_cone 732 float 1 0 +U 01089da8 frag u_ts_origin 736 vec2 1 0 +U 01089da8 frag u_ts_half 744 float 1 0 +U 01089da8 frag u_ts_on 748 float 1 0 +U 01089da8 frag u_force_cascade 752 int 1 0 +U 01089da8 frag u_cloud_shadow 756 float 1 0 +U 01089da8 frag u_time 760 float 1 0 +U 01089da8 frag u_model_h 764 float 1 0 +U 01089da8 frag u_view 768 mat4 1 0 +U 01089da8 frag u_tint 832 vec3 1 0 +U 01089da8 frag u_rough_scale 844 float 1 0 +U 01089da8 frag u_emissive 848 float 1 0 +T 01089da8 u_arm 2 +T 01089da8 u_brdf 3 +T 01089da8 u_diff 4 +T 01089da8 u_irradiance 5 +T 01089da8 u_nrm 6 +T 01089da8 u_prefilter 7 +T 01089da8 u_shadow 8 +T 01089da8 u_tershadow 9 +T 01089da8 u_ts_height 10 +P 254e7887 model.vert model.frag #define CARD;#define CHEAP; +B 254e7887 vert 0 232 +U 254e7887 vert u_view 0 mat4 1 0 +U 254e7887 vert u_proj 64 mat4 1 0 +U 254e7887 vert u_light_vp 128 mat4 1 0 +U 254e7887 vert u_time 192 float 1 0 +U 254e7887 vert u_wind 196 float 1 0 +U 254e7887 vert u_card_w 200 float 1 0 +U 254e7887 vert u_card_h 204 float 1 0 +U 254e7887 vert u_ground 208 float 1 0 +U 254e7887 vert u_ts_origin 216 vec2 1 0 +U 254e7887 vert u_ts_half 224 float 1 0 +U 254e7887 vert u_model_h 228 float 1 0 +I 254e7887 i_rot 4 vec4 +I 254e7887 a_pos 0 vec3 +I 254e7887 i_pos 3 vec4 +I 254e7887 a_nrm 1 vec3 +I 254e7887 a_uv 2 vec2 +B 254e7887 frag 1 856 +U 254e7887 frag u_cascade_vp 0 mat4 5 64 +U 254e7887 frag u_cascade_split 320 float 5 16 +U 254e7887 frag u_cascade_range 400 float 5 16 +U 254e7887 frag u_cascade_texel 480 float 5 16 +U 254e7887 frag u_sun_dir 560 vec3 1 0 +U 254e7887 frag u_sun_color 576 vec3 1 0 +U 254e7887 frag u_cam_pos 592 vec3 1 0 +U 254e7887 frag u_prefilter_levels 604 float 1 0 +U 254e7887 frag u_fog_density 608 float 1 0 +U 254e7887 frag u_fog_height_falloff 612 float 1 0 +U 254e7887 frag u_fog_base 616 float 1 0 +U 254e7887 frag u_clip_y 620 float 1 0 +U 254e7887 frag u_spec_scale 624 float 1 0 +U 254e7887 frag u_sky_rot 632 vec2 1 0 +U 254e7887 frag u_ibl_scale 640 vec3 1 0 +U 254e7887 frag u_daylight 652 float 1 0 +U 254e7887 frag u_fire_pos 656 vec3 1 0 +U 254e7887 frag u_fire_color 672 vec3 1 0 +U 254e7887 frag u_hand_pos 688 vec3 1 0 +U 254e7887 frag u_hand_color 704 vec3 1 0 +U 254e7887 frag u_hand_dir 720 vec3 1 0 +U 254e7887 frag u_hand_cone 732 float 1 0 +U 254e7887 frag u_ts_origin 736 vec2 1 0 +U 254e7887 frag u_ts_half 744 float 1 0 +U 254e7887 frag u_ts_on 748 float 1 0 +U 254e7887 frag u_force_cascade 752 int 1 0 +U 254e7887 frag u_cloud_shadow 756 float 1 0 +U 254e7887 frag u_time 760 float 1 0 +U 254e7887 frag u_model_h 764 float 1 0 +U 254e7887 frag u_view 768 mat4 1 0 +U 254e7887 frag u_tint 832 vec3 1 0 +U 254e7887 frag u_rough_scale 844 float 1 0 +U 254e7887 frag u_emissive 848 float 1 0 +U 254e7887 frag u_cull 852 float 1 0 +T 254e7887 u_arm 2 +T 254e7887 u_brdf 3 +T 254e7887 u_diff 4 +T 254e7887 u_irradiance 5 +T 254e7887 u_nrm 6 +T 254e7887 u_prefilter 7 +T 254e7887 u_shadow 8 +T 254e7887 u_tershadow 9 +T 254e7887 u_ts_height 10 +P 1ce5c5d1 model.vert model.frag #define FOLIAGE;#define WIND;#define ALPHA_TEST; +B 1ce5c5d1 vert 0 232 +U 1ce5c5d1 vert u_view 0 mat4 1 0 +U 1ce5c5d1 vert u_proj 64 mat4 1 0 +U 1ce5c5d1 vert u_light_vp 128 mat4 1 0 +U 1ce5c5d1 vert u_time 192 float 1 0 +U 1ce5c5d1 vert u_wind 196 float 1 0 +U 1ce5c5d1 vert u_card_w 200 float 1 0 +U 1ce5c5d1 vert u_card_h 204 float 1 0 +U 1ce5c5d1 vert u_ground 208 float 1 0 +U 1ce5c5d1 vert u_ts_origin 216 vec2 1 0 +U 1ce5c5d1 vert u_ts_half 224 float 1 0 +U 1ce5c5d1 vert u_model_h 228 float 1 0 +I 1ce5c5d1 i_rot 4 vec4 +I 1ce5c5d1 a_pos 0 vec3 +I 1ce5c5d1 i_pos 3 vec4 +I 1ce5c5d1 a_nrm 1 vec3 +I 1ce5c5d1 a_uv 2 vec2 +B 1ce5c5d1 frag 1 852 +U 1ce5c5d1 frag u_cascade_vp 0 mat4 5 64 +U 1ce5c5d1 frag u_cascade_split 320 float 5 16 +U 1ce5c5d1 frag u_cascade_range 400 float 5 16 +U 1ce5c5d1 frag u_cascade_texel 480 float 5 16 +U 1ce5c5d1 frag u_sun_dir 560 vec3 1 0 +U 1ce5c5d1 frag u_sun_color 576 vec3 1 0 +U 1ce5c5d1 frag u_cam_pos 592 vec3 1 0 +U 1ce5c5d1 frag u_prefilter_levels 604 float 1 0 +U 1ce5c5d1 frag u_fog_density 608 float 1 0 +U 1ce5c5d1 frag u_fog_height_falloff 612 float 1 0 +U 1ce5c5d1 frag u_fog_base 616 float 1 0 +U 1ce5c5d1 frag u_clip_y 620 float 1 0 +U 1ce5c5d1 frag u_spec_scale 624 float 1 0 +U 1ce5c5d1 frag u_sky_rot 632 vec2 1 0 +U 1ce5c5d1 frag u_ibl_scale 640 vec3 1 0 +U 1ce5c5d1 frag u_daylight 652 float 1 0 +U 1ce5c5d1 frag u_fire_pos 656 vec3 1 0 +U 1ce5c5d1 frag u_fire_color 672 vec3 1 0 +U 1ce5c5d1 frag u_hand_pos 688 vec3 1 0 +U 1ce5c5d1 frag u_hand_color 704 vec3 1 0 +U 1ce5c5d1 frag u_hand_dir 720 vec3 1 0 +U 1ce5c5d1 frag u_hand_cone 732 float 1 0 +U 1ce5c5d1 frag u_ts_origin 736 vec2 1 0 +U 1ce5c5d1 frag u_ts_half 744 float 1 0 +U 1ce5c5d1 frag u_ts_on 748 float 1 0 +U 1ce5c5d1 frag u_force_cascade 752 int 1 0 +U 1ce5c5d1 frag u_cloud_shadow 756 float 1 0 +U 1ce5c5d1 frag u_time 760 float 1 0 +U 1ce5c5d1 frag u_model_h 764 float 1 0 +U 1ce5c5d1 frag u_view 768 mat4 1 0 +U 1ce5c5d1 frag u_tint 832 vec3 1 0 +U 1ce5c5d1 frag u_rough_scale 844 float 1 0 +U 1ce5c5d1 frag u_emissive 848 float 1 0 +T 1ce5c5d1 u_arm 2 +T 1ce5c5d1 u_brdf 3 +T 1ce5c5d1 u_diff 4 +T 1ce5c5d1 u_irradiance 5 +T 1ce5c5d1 u_nrm 6 +T 1ce5c5d1 u_prefilter 7 +T 1ce5c5d1 u_shadow 8 +T 1ce5c5d1 u_tershadow 9 +T 1ce5c5d1 u_ts_height 10 +P f4a2b586 model.vert model.frag #define FOLIAGE;#define WIND;#define BLADE; +B f4a2b586 vert 0 248 +U f4a2b586 vert u_view 0 mat4 1 0 +U f4a2b586 vert u_proj 64 mat4 1 0 +U f4a2b586 vert u_light_vp 128 mat4 1 0 +U f4a2b586 vert u_time 192 float 1 0 +U f4a2b586 vert u_wind 196 float 1 0 +U f4a2b586 vert u_card_w 200 float 1 0 +U f4a2b586 vert u_card_h 204 float 1 0 +U f4a2b586 vert u_cam_pos 208 vec3 1 0 +U f4a2b586 vert u_cull 220 float 1 0 +U f4a2b586 vert u_ground 224 float 1 0 +U f4a2b586 vert u_ts_origin 232 vec2 1 0 +U f4a2b586 vert u_ts_half 240 float 1 0 +U f4a2b586 vert u_model_h 244 float 1 0 +I f4a2b586 i_rot 4 vec4 +I f4a2b586 a_pos 0 vec3 +I f4a2b586 i_pos 3 vec4 +I f4a2b586 a_nrm 1 vec3 +I f4a2b586 a_uv 2 vec2 +B f4a2b586 frag 1 892 +U f4a2b586 frag u_cascade_vp 0 mat4 5 64 +U f4a2b586 frag u_cascade_split 320 float 5 16 +U f4a2b586 frag u_cascade_range 400 float 5 16 +U f4a2b586 frag u_cascade_texel 480 float 5 16 +U f4a2b586 frag u_sun_dir 560 vec3 1 0 +U f4a2b586 frag u_sun_color 576 vec3 1 0 +U f4a2b586 frag u_cam_pos 592 vec3 1 0 +U f4a2b586 frag u_prefilter_levels 604 float 1 0 +U f4a2b586 frag u_fog_density 608 float 1 0 +U f4a2b586 frag u_fog_height_falloff 612 float 1 0 +U f4a2b586 frag u_fog_base 616 float 1 0 +U f4a2b586 frag u_clip_y 620 float 1 0 +U f4a2b586 frag u_spec_scale 624 float 1 0 +U f4a2b586 frag u_sky_rot 632 vec2 1 0 +U f4a2b586 frag u_ibl_scale 640 vec3 1 0 +U f4a2b586 frag u_daylight 652 float 1 0 +U f4a2b586 frag u_fire_pos 656 vec3 1 0 +U f4a2b586 frag u_fire_color 672 vec3 1 0 +U f4a2b586 frag u_hand_pos 688 vec3 1 0 +U f4a2b586 frag u_hand_color 704 vec3 1 0 +U f4a2b586 frag u_hand_dir 720 vec3 1 0 +U f4a2b586 frag u_hand_cone 732 float 1 0 +U f4a2b586 frag u_ts_origin 736 vec2 1 0 +U f4a2b586 frag u_ts_half 744 float 1 0 +U f4a2b586 frag u_ts_on 748 float 1 0 +U f4a2b586 frag u_force_cascade 752 int 1 0 +U f4a2b586 frag u_cloud_shadow 756 float 1 0 +U f4a2b586 frag u_time 760 float 1 0 +U f4a2b586 frag u_model_h 764 float 1 0 +U f4a2b586 frag u_view 768 mat4 1 0 +U f4a2b586 frag u_tint 832 vec3 1 0 +U f4a2b586 frag u_rough_scale 844 float 1 0 +U f4a2b586 frag u_emissive 848 float 1 0 +U f4a2b586 frag u_blade_base 864 vec3 1 0 +U f4a2b586 frag u_blade_tip 880 vec3 1 0 +T f4a2b586 u_arm 2 +T f4a2b586 u_brdf 3 +T f4a2b586 u_diff 4 +T f4a2b586 u_irradiance 5 +T f4a2b586 u_nrm 6 +T f4a2b586 u_prefilter 7 +T f4a2b586 u_shadow 8 +T f4a2b586 u_tershadow 9 +T f4a2b586 u_ts_height 10 +P b4587cd4 model.vert model.frag #define FOLIAGE;#define WIND;#define CARD; +B b4587cd4 vert 0 232 +U b4587cd4 vert u_view 0 mat4 1 0 +U b4587cd4 vert u_proj 64 mat4 1 0 +U b4587cd4 vert u_light_vp 128 mat4 1 0 +U b4587cd4 vert u_time 192 float 1 0 +U b4587cd4 vert u_wind 196 float 1 0 +U b4587cd4 vert u_card_w 200 float 1 0 +U b4587cd4 vert u_card_h 204 float 1 0 +U b4587cd4 vert u_ground 208 float 1 0 +U b4587cd4 vert u_ts_origin 216 vec2 1 0 +U b4587cd4 vert u_ts_half 224 float 1 0 +U b4587cd4 vert u_model_h 228 float 1 0 +I b4587cd4 i_rot 4 vec4 +I b4587cd4 a_pos 0 vec3 +I b4587cd4 i_pos 3 vec4 +I b4587cd4 a_nrm 1 vec3 +I b4587cd4 a_uv 2 vec2 +B b4587cd4 frag 1 856 +U b4587cd4 frag u_cascade_vp 0 mat4 5 64 +U b4587cd4 frag u_cascade_split 320 float 5 16 +U b4587cd4 frag u_cascade_range 400 float 5 16 +U b4587cd4 frag u_cascade_texel 480 float 5 16 +U b4587cd4 frag u_sun_dir 560 vec3 1 0 +U b4587cd4 frag u_sun_color 576 vec3 1 0 +U b4587cd4 frag u_cam_pos 592 vec3 1 0 +U b4587cd4 frag u_prefilter_levels 604 float 1 0 +U b4587cd4 frag u_fog_density 608 float 1 0 +U b4587cd4 frag u_fog_height_falloff 612 float 1 0 +U b4587cd4 frag u_fog_base 616 float 1 0 +U b4587cd4 frag u_clip_y 620 float 1 0 +U b4587cd4 frag u_spec_scale 624 float 1 0 +U b4587cd4 frag u_sky_rot 632 vec2 1 0 +U b4587cd4 frag u_ibl_scale 640 vec3 1 0 +U b4587cd4 frag u_daylight 652 float 1 0 +U b4587cd4 frag u_fire_pos 656 vec3 1 0 +U b4587cd4 frag u_fire_color 672 vec3 1 0 +U b4587cd4 frag u_hand_pos 688 vec3 1 0 +U b4587cd4 frag u_hand_color 704 vec3 1 0 +U b4587cd4 frag u_hand_dir 720 vec3 1 0 +U b4587cd4 frag u_hand_cone 732 float 1 0 +U b4587cd4 frag u_ts_origin 736 vec2 1 0 +U b4587cd4 frag u_ts_half 744 float 1 0 +U b4587cd4 frag u_ts_on 748 float 1 0 +U b4587cd4 frag u_force_cascade 752 int 1 0 +U b4587cd4 frag u_cloud_shadow 756 float 1 0 +U b4587cd4 frag u_time 760 float 1 0 +U b4587cd4 frag u_model_h 764 float 1 0 +U b4587cd4 frag u_view 768 mat4 1 0 +U b4587cd4 frag u_tint 832 vec3 1 0 +U b4587cd4 frag u_rough_scale 844 float 1 0 +U b4587cd4 frag u_emissive 848 float 1 0 +U b4587cd4 frag u_cull 852 float 1 0 +T b4587cd4 u_arm 2 +T b4587cd4 u_brdf 3 +T b4587cd4 u_diff 4 +T b4587cd4 u_irradiance 5 +T b4587cd4 u_nrm 6 +T b4587cd4 u_prefilter 7 +T b4587cd4 u_shadow 8 +T b4587cd4 u_tershadow 9 +T b4587cd4 u_ts_height 10 +P 4dda406a model.vert model.frag #define FOLIAGE;#define WIND;#define EQ_PASS; +B 4dda406a vert 0 232 +U 4dda406a vert u_view 0 mat4 1 0 +U 4dda406a vert u_proj 64 mat4 1 0 +U 4dda406a vert u_light_vp 128 mat4 1 0 +U 4dda406a vert u_time 192 float 1 0 +U 4dda406a vert u_wind 196 float 1 0 +U 4dda406a vert u_card_w 200 float 1 0 +U 4dda406a vert u_card_h 204 float 1 0 +U 4dda406a vert u_ground 208 float 1 0 +U 4dda406a vert u_ts_origin 216 vec2 1 0 +U 4dda406a vert u_ts_half 224 float 1 0 +U 4dda406a vert u_model_h 228 float 1 0 +I 4dda406a i_rot 4 vec4 +I 4dda406a a_pos 0 vec3 +I 4dda406a i_pos 3 vec4 +I 4dda406a a_nrm 1 vec3 +I 4dda406a a_uv 2 vec2 +B 4dda406a frag 1 852 +U 4dda406a frag u_cascade_vp 0 mat4 5 64 +U 4dda406a frag u_cascade_split 320 float 5 16 +U 4dda406a frag u_cascade_range 400 float 5 16 +U 4dda406a frag u_cascade_texel 480 float 5 16 +U 4dda406a frag u_sun_dir 560 vec3 1 0 +U 4dda406a frag u_sun_color 576 vec3 1 0 +U 4dda406a frag u_cam_pos 592 vec3 1 0 +U 4dda406a frag u_prefilter_levels 604 float 1 0 +U 4dda406a frag u_fog_density 608 float 1 0 +U 4dda406a frag u_fog_height_falloff 612 float 1 0 +U 4dda406a frag u_fog_base 616 float 1 0 +U 4dda406a frag u_clip_y 620 float 1 0 +U 4dda406a frag u_spec_scale 624 float 1 0 +U 4dda406a frag u_sky_rot 632 vec2 1 0 +U 4dda406a frag u_ibl_scale 640 vec3 1 0 +U 4dda406a frag u_daylight 652 float 1 0 +U 4dda406a frag u_fire_pos 656 vec3 1 0 +U 4dda406a frag u_fire_color 672 vec3 1 0 +U 4dda406a frag u_hand_pos 688 vec3 1 0 +U 4dda406a frag u_hand_color 704 vec3 1 0 +U 4dda406a frag u_hand_dir 720 vec3 1 0 +U 4dda406a frag u_hand_cone 732 float 1 0 +U 4dda406a frag u_ts_origin 736 vec2 1 0 +U 4dda406a frag u_ts_half 744 float 1 0 +U 4dda406a frag u_ts_on 748 float 1 0 +U 4dda406a frag u_force_cascade 752 int 1 0 +U 4dda406a frag u_cloud_shadow 756 float 1 0 +U 4dda406a frag u_time 760 float 1 0 +U 4dda406a frag u_model_h 764 float 1 0 +U 4dda406a frag u_view 768 mat4 1 0 +U 4dda406a frag u_tint 832 vec3 1 0 +U 4dda406a frag u_rough_scale 844 float 1 0 +U 4dda406a frag u_emissive 848 float 1 0 +T 4dda406a u_arm 2 +T 4dda406a u_brdf 3 +T 4dda406a u_diff 4 +T 4dda406a u_irradiance 5 +T 4dda406a u_nrm 6 +T 4dda406a u_prefilter 7 +T 4dda406a u_shadow 8 +T 4dda406a u_tershadow 9 +T 4dda406a u_ts_height 10 +P 3b183d8f model.vert model.frag #define FOLIAGE;#define WIND;#define FLOWER; +B 3b183d8f vert 0 232 +U 3b183d8f vert u_view 0 mat4 1 0 +U 3b183d8f vert u_proj 64 mat4 1 0 +U 3b183d8f vert u_light_vp 128 mat4 1 0 +U 3b183d8f vert u_time 192 float 1 0 +U 3b183d8f vert u_wind 196 float 1 0 +U 3b183d8f vert u_card_w 200 float 1 0 +U 3b183d8f vert u_card_h 204 float 1 0 +U 3b183d8f vert u_ground 208 float 1 0 +U 3b183d8f vert u_ts_origin 216 vec2 1 0 +U 3b183d8f vert u_ts_half 224 float 1 0 +U 3b183d8f vert u_model_h 228 float 1 0 +I 3b183d8f i_rot 4 vec4 +I 3b183d8f a_pos 0 vec3 +I 3b183d8f i_pos 3 vec4 +I 3b183d8f a_nrm 1 vec3 +I 3b183d8f a_uv 2 vec2 +B 3b183d8f frag 1 852 +U 3b183d8f frag u_cascade_vp 0 mat4 5 64 +U 3b183d8f frag u_cascade_split 320 float 5 16 +U 3b183d8f frag u_cascade_range 400 float 5 16 +U 3b183d8f frag u_cascade_texel 480 float 5 16 +U 3b183d8f frag u_sun_dir 560 vec3 1 0 +U 3b183d8f frag u_sun_color 576 vec3 1 0 +U 3b183d8f frag u_cam_pos 592 vec3 1 0 +U 3b183d8f frag u_prefilter_levels 604 float 1 0 +U 3b183d8f frag u_fog_density 608 float 1 0 +U 3b183d8f frag u_fog_height_falloff 612 float 1 0 +U 3b183d8f frag u_fog_base 616 float 1 0 +U 3b183d8f frag u_clip_y 620 float 1 0 +U 3b183d8f frag u_spec_scale 624 float 1 0 +U 3b183d8f frag u_sky_rot 632 vec2 1 0 +U 3b183d8f frag u_ibl_scale 640 vec3 1 0 +U 3b183d8f frag u_daylight 652 float 1 0 +U 3b183d8f frag u_fire_pos 656 vec3 1 0 +U 3b183d8f frag u_fire_color 672 vec3 1 0 +U 3b183d8f frag u_hand_pos 688 vec3 1 0 +U 3b183d8f frag u_hand_color 704 vec3 1 0 +U 3b183d8f frag u_hand_dir 720 vec3 1 0 +U 3b183d8f frag u_hand_cone 732 float 1 0 +U 3b183d8f frag u_ts_origin 736 vec2 1 0 +U 3b183d8f frag u_ts_half 744 float 1 0 +U 3b183d8f frag u_ts_on 748 float 1 0 +U 3b183d8f frag u_force_cascade 752 int 1 0 +U 3b183d8f frag u_cloud_shadow 756 float 1 0 +U 3b183d8f frag u_time 760 float 1 0 +U 3b183d8f frag u_model_h 764 float 1 0 +U 3b183d8f frag u_view 768 mat4 1 0 +U 3b183d8f frag u_tint 832 vec3 1 0 +U 3b183d8f frag u_rough_scale 844 float 1 0 +U 3b183d8f frag u_emissive 848 float 1 0 +T 3b183d8f u_arm 2 +T 3b183d8f u_brdf 3 +T 3b183d8f u_diff 4 +T 3b183d8f u_irradiance 5 +T 3b183d8f u_nrm 6 +T 3b183d8f u_prefilter 7 +T 3b183d8f u_shadow 8 +T 3b183d8f u_tershadow 9 +T 3b183d8f u_ts_height 10 +P 79b77ed9 model.vert model.frag #define SHADOW_PASS;#define WIND;#define CARD; +B 79b77ed9 vert 0 232 +U 79b77ed9 vert u_view 0 mat4 1 0 +U 79b77ed9 vert u_proj 64 mat4 1 0 +U 79b77ed9 vert u_light_vp 128 mat4 1 0 +U 79b77ed9 vert u_time 192 float 1 0 +U 79b77ed9 vert u_wind 196 float 1 0 +U 79b77ed9 vert u_card_w 200 float 1 0 +U 79b77ed9 vert u_card_h 204 float 1 0 +U 79b77ed9 vert u_ground 208 float 1 0 +U 79b77ed9 vert u_ts_origin 216 vec2 1 0 +U 79b77ed9 vert u_ts_half 224 float 1 0 +U 79b77ed9 vert u_model_h 228 float 1 0 +I 79b77ed9 i_rot 4 vec4 +I 79b77ed9 a_pos 0 vec3 +I 79b77ed9 i_pos 3 vec4 +I 79b77ed9 a_nrm 1 vec3 +I 79b77ed9 a_uv 2 vec2 +B 79b77ed9 frag 1 856 +U 79b77ed9 frag u_cascade_vp 0 mat4 5 64 +U 79b77ed9 frag u_cascade_split 320 float 5 16 +U 79b77ed9 frag u_cascade_range 400 float 5 16 +U 79b77ed9 frag u_cascade_texel 480 float 5 16 +U 79b77ed9 frag u_sun_dir 560 vec3 1 0 +U 79b77ed9 frag u_sun_color 576 vec3 1 0 +U 79b77ed9 frag u_cam_pos 592 vec3 1 0 +U 79b77ed9 frag u_prefilter_levels 604 float 1 0 +U 79b77ed9 frag u_fog_density 608 float 1 0 +U 79b77ed9 frag u_fog_height_falloff 612 float 1 0 +U 79b77ed9 frag u_fog_base 616 float 1 0 +U 79b77ed9 frag u_clip_y 620 float 1 0 +U 79b77ed9 frag u_spec_scale 624 float 1 0 +U 79b77ed9 frag u_sky_rot 632 vec2 1 0 +U 79b77ed9 frag u_ibl_scale 640 vec3 1 0 +U 79b77ed9 frag u_daylight 652 float 1 0 +U 79b77ed9 frag u_fire_pos 656 vec3 1 0 +U 79b77ed9 frag u_fire_color 672 vec3 1 0 +U 79b77ed9 frag u_hand_pos 688 vec3 1 0 +U 79b77ed9 frag u_hand_color 704 vec3 1 0 +U 79b77ed9 frag u_hand_dir 720 vec3 1 0 +U 79b77ed9 frag u_hand_cone 732 float 1 0 +U 79b77ed9 frag u_ts_origin 736 vec2 1 0 +U 79b77ed9 frag u_ts_half 744 float 1 0 +U 79b77ed9 frag u_ts_on 748 float 1 0 +U 79b77ed9 frag u_force_cascade 752 int 1 0 +U 79b77ed9 frag u_cloud_shadow 756 float 1 0 +U 79b77ed9 frag u_time 760 float 1 0 +U 79b77ed9 frag u_model_h 764 float 1 0 +U 79b77ed9 frag u_view 768 mat4 1 0 +U 79b77ed9 frag u_tint 832 vec3 1 0 +U 79b77ed9 frag u_rough_scale 844 float 1 0 +U 79b77ed9 frag u_emissive 848 float 1 0 +U 79b77ed9 frag u_cull 852 float 1 0 +T 79b77ed9 u_arm 2 +T 79b77ed9 u_brdf 3 +T 79b77ed9 u_diff 4 +T 79b77ed9 u_irradiance 5 +T 79b77ed9 u_nrm 6 +T 79b77ed9 u_prefilter 7 +T 79b77ed9 u_shadow 8 +T 79b77ed9 u_tershadow 9 +T 79b77ed9 u_ts_height 10 +P b9fc2041 model.vert model.frag #define WIND; +B b9fc2041 vert 0 232 +U b9fc2041 vert u_view 0 mat4 1 0 +U b9fc2041 vert u_proj 64 mat4 1 0 +U b9fc2041 vert u_light_vp 128 mat4 1 0 +U b9fc2041 vert u_time 192 float 1 0 +U b9fc2041 vert u_wind 196 float 1 0 +U b9fc2041 vert u_card_w 200 float 1 0 +U b9fc2041 vert u_card_h 204 float 1 0 +U b9fc2041 vert u_ground 208 float 1 0 +U b9fc2041 vert u_ts_origin 216 vec2 1 0 +U b9fc2041 vert u_ts_half 224 float 1 0 +U b9fc2041 vert u_model_h 228 float 1 0 +I b9fc2041 i_rot 4 vec4 +I b9fc2041 a_pos 0 vec3 +I b9fc2041 i_pos 3 vec4 +I b9fc2041 a_nrm 1 vec3 +I b9fc2041 a_uv 2 vec2 +B b9fc2041 frag 1 852 +U b9fc2041 frag u_cascade_vp 0 mat4 5 64 +U b9fc2041 frag u_cascade_split 320 float 5 16 +U b9fc2041 frag u_cascade_range 400 float 5 16 +U b9fc2041 frag u_cascade_texel 480 float 5 16 +U b9fc2041 frag u_sun_dir 560 vec3 1 0 +U b9fc2041 frag u_sun_color 576 vec3 1 0 +U b9fc2041 frag u_cam_pos 592 vec3 1 0 +U b9fc2041 frag u_prefilter_levels 604 float 1 0 +U b9fc2041 frag u_fog_density 608 float 1 0 +U b9fc2041 frag u_fog_height_falloff 612 float 1 0 +U b9fc2041 frag u_fog_base 616 float 1 0 +U b9fc2041 frag u_clip_y 620 float 1 0 +U b9fc2041 frag u_spec_scale 624 float 1 0 +U b9fc2041 frag u_sky_rot 632 vec2 1 0 +U b9fc2041 frag u_ibl_scale 640 vec3 1 0 +U b9fc2041 frag u_daylight 652 float 1 0 +U b9fc2041 frag u_fire_pos 656 vec3 1 0 +U b9fc2041 frag u_fire_color 672 vec3 1 0 +U b9fc2041 frag u_hand_pos 688 vec3 1 0 +U b9fc2041 frag u_hand_color 704 vec3 1 0 +U b9fc2041 frag u_hand_dir 720 vec3 1 0 +U b9fc2041 frag u_hand_cone 732 float 1 0 +U b9fc2041 frag u_ts_origin 736 vec2 1 0 +U b9fc2041 frag u_ts_half 744 float 1 0 +U b9fc2041 frag u_ts_on 748 float 1 0 +U b9fc2041 frag u_force_cascade 752 int 1 0 +U b9fc2041 frag u_cloud_shadow 756 float 1 0 +U b9fc2041 frag u_time 760 float 1 0 +U b9fc2041 frag u_model_h 764 float 1 0 +U b9fc2041 frag u_view 768 mat4 1 0 +U b9fc2041 frag u_tint 832 vec3 1 0 +U b9fc2041 frag u_rough_scale 844 float 1 0 +U b9fc2041 frag u_emissive 848 float 1 0 +T b9fc2041 u_arm 2 +T b9fc2041 u_brdf 3 +T b9fc2041 u_diff 4 +T b9fc2041 u_irradiance 5 +T b9fc2041 u_nrm 6 +T b9fc2041 u_prefilter 7 +T b9fc2041 u_shadow 8 +T b9fc2041 u_tershadow 9 +T b9fc2041 u_ts_height 10 +P f34dce08 model.vert shadow.frag #define SHADOW_PASS; +B f34dce08 vert 0 232 +U f34dce08 vert u_view 0 mat4 1 0 +U f34dce08 vert u_proj 64 mat4 1 0 +U f34dce08 vert u_light_vp 128 mat4 1 0 +U f34dce08 vert u_time 192 float 1 0 +U f34dce08 vert u_wind 196 float 1 0 +U f34dce08 vert u_card_w 200 float 1 0 +U f34dce08 vert u_card_h 204 float 1 0 +U f34dce08 vert u_ground 208 float 1 0 +U f34dce08 vert u_ts_origin 216 vec2 1 0 +U f34dce08 vert u_ts_half 224 float 1 0 +U f34dce08 vert u_model_h 228 float 1 0 +I f34dce08 i_rot 4 vec4 +I f34dce08 a_pos 0 vec3 +I f34dce08 i_pos 3 vec4 +I f34dce08 a_nrm 1 vec3 +I f34dce08 a_uv 2 vec2 +B f34dce08 frag 0 764 +U f34dce08 frag u_cascade_vp 0 mat4 5 64 +U f34dce08 frag u_cascade_split 320 float 5 16 +U f34dce08 frag u_cascade_range 400 float 5 16 +U f34dce08 frag u_cascade_texel 480 float 5 16 +U f34dce08 frag u_sun_dir 560 vec3 1 0 +U f34dce08 frag u_sun_color 576 vec3 1 0 +U f34dce08 frag u_cam_pos 592 vec3 1 0 +U f34dce08 frag u_prefilter_levels 604 float 1 0 +U f34dce08 frag u_fog_density 608 float 1 0 +U f34dce08 frag u_fog_height_falloff 612 float 1 0 +U f34dce08 frag u_fog_base 616 float 1 0 +U f34dce08 frag u_clip_y 620 float 1 0 +U f34dce08 frag u_spec_scale 624 float 1 0 +U f34dce08 frag u_sky_rot 632 vec2 1 0 +U f34dce08 frag u_ibl_scale 640 vec3 1 0 +U f34dce08 frag u_daylight 652 float 1 0 +U f34dce08 frag u_fire_pos 656 vec3 1 0 +U f34dce08 frag u_fire_color 672 vec3 1 0 +U f34dce08 frag u_hand_pos 688 vec3 1 0 +U f34dce08 frag u_hand_color 704 vec3 1 0 +U f34dce08 frag u_hand_dir 720 vec3 1 0 +U f34dce08 frag u_hand_cone 732 float 1 0 +U f34dce08 frag u_ts_origin 736 vec2 1 0 +U f34dce08 frag u_ts_half 744 float 1 0 +U f34dce08 frag u_ts_on 748 float 1 0 +U f34dce08 frag u_force_cascade 752 int 1 0 +U f34dce08 frag u_cloud_shadow 756 float 1 0 +U f34dce08 frag u_time 760 float 1 0 +T f34dce08 u_brdf 2 +T f34dce08 u_diff 3 +T f34dce08 u_irradiance 4 +T f34dce08 u_prefilter 5 +T f34dce08 u_shadow 6 +T f34dce08 u_tershadow 7 +T f34dce08 u_ts_height 8 +P 512004a1 model.vert shadow.frag #define SHADOW_PASS;#define WIND; +B 512004a1 vert 0 232 +U 512004a1 vert u_view 0 mat4 1 0 +U 512004a1 vert u_proj 64 mat4 1 0 +U 512004a1 vert u_light_vp 128 mat4 1 0 +U 512004a1 vert u_time 192 float 1 0 +U 512004a1 vert u_wind 196 float 1 0 +U 512004a1 vert u_card_w 200 float 1 0 +U 512004a1 vert u_card_h 204 float 1 0 +U 512004a1 vert u_ground 208 float 1 0 +U 512004a1 vert u_ts_origin 216 vec2 1 0 +U 512004a1 vert u_ts_half 224 float 1 0 +U 512004a1 vert u_model_h 228 float 1 0 +I 512004a1 i_rot 4 vec4 +I 512004a1 a_pos 0 vec3 +I 512004a1 i_pos 3 vec4 +I 512004a1 a_nrm 1 vec3 +I 512004a1 a_uv 2 vec2 +B 512004a1 frag 0 764 +U 512004a1 frag u_cascade_vp 0 mat4 5 64 +U 512004a1 frag u_cascade_split 320 float 5 16 +U 512004a1 frag u_cascade_range 400 float 5 16 +U 512004a1 frag u_cascade_texel 480 float 5 16 +U 512004a1 frag u_sun_dir 560 vec3 1 0 +U 512004a1 frag u_sun_color 576 vec3 1 0 +U 512004a1 frag u_cam_pos 592 vec3 1 0 +U 512004a1 frag u_prefilter_levels 604 float 1 0 +U 512004a1 frag u_fog_density 608 float 1 0 +U 512004a1 frag u_fog_height_falloff 612 float 1 0 +U 512004a1 frag u_fog_base 616 float 1 0 +U 512004a1 frag u_clip_y 620 float 1 0 +U 512004a1 frag u_spec_scale 624 float 1 0 +U 512004a1 frag u_sky_rot 632 vec2 1 0 +U 512004a1 frag u_ibl_scale 640 vec3 1 0 +U 512004a1 frag u_daylight 652 float 1 0 +U 512004a1 frag u_fire_pos 656 vec3 1 0 +U 512004a1 frag u_fire_color 672 vec3 1 0 +U 512004a1 frag u_hand_pos 688 vec3 1 0 +U 512004a1 frag u_hand_color 704 vec3 1 0 +U 512004a1 frag u_hand_dir 720 vec3 1 0 +U 512004a1 frag u_hand_cone 732 float 1 0 +U 512004a1 frag u_ts_origin 736 vec2 1 0 +U 512004a1 frag u_ts_half 744 float 1 0 +U 512004a1 frag u_ts_on 748 float 1 0 +U 512004a1 frag u_force_cascade 752 int 1 0 +U 512004a1 frag u_cloud_shadow 756 float 1 0 +U 512004a1 frag u_time 760 float 1 0 +T 512004a1 u_brdf 2 +T 512004a1 u_diff 3 +T 512004a1 u_irradiance 4 +T 512004a1 u_prefilter 5 +T 512004a1 u_shadow 6 +T 512004a1 u_tershadow 7 +T 512004a1 u_ts_height 8 +P b964507f model.vert shadow.frag #define SHADOW_PASS;#define WIND;#define ALPHA_TEST; +B b964507f vert 0 232 +U b964507f vert u_view 0 mat4 1 0 +U b964507f vert u_proj 64 mat4 1 0 +U b964507f vert u_light_vp 128 mat4 1 0 +U b964507f vert u_time 192 float 1 0 +U b964507f vert u_wind 196 float 1 0 +U b964507f vert u_card_w 200 float 1 0 +U b964507f vert u_card_h 204 float 1 0 +U b964507f vert u_ground 208 float 1 0 +U b964507f vert u_ts_origin 216 vec2 1 0 +U b964507f vert u_ts_half 224 float 1 0 +U b964507f vert u_model_h 228 float 1 0 +I b964507f i_rot 4 vec4 +I b964507f a_pos 0 vec3 +I b964507f i_pos 3 vec4 +I b964507f a_nrm 1 vec3 +I b964507f a_uv 2 vec2 +B b964507f frag 0 764 +U b964507f frag u_cascade_vp 0 mat4 5 64 +U b964507f frag u_cascade_split 320 float 5 16 +U b964507f frag u_cascade_range 400 float 5 16 +U b964507f frag u_cascade_texel 480 float 5 16 +U b964507f frag u_sun_dir 560 vec3 1 0 +U b964507f frag u_sun_color 576 vec3 1 0 +U b964507f frag u_cam_pos 592 vec3 1 0 +U b964507f frag u_prefilter_levels 604 float 1 0 +U b964507f frag u_fog_density 608 float 1 0 +U b964507f frag u_fog_height_falloff 612 float 1 0 +U b964507f frag u_fog_base 616 float 1 0 +U b964507f frag u_clip_y 620 float 1 0 +U b964507f frag u_spec_scale 624 float 1 0 +U b964507f frag u_sky_rot 632 vec2 1 0 +U b964507f frag u_ibl_scale 640 vec3 1 0 +U b964507f frag u_daylight 652 float 1 0 +U b964507f frag u_fire_pos 656 vec3 1 0 +U b964507f frag u_fire_color 672 vec3 1 0 +U b964507f frag u_hand_pos 688 vec3 1 0 +U b964507f frag u_hand_color 704 vec3 1 0 +U b964507f frag u_hand_dir 720 vec3 1 0 +U b964507f frag u_hand_cone 732 float 1 0 +U b964507f frag u_ts_origin 736 vec2 1 0 +U b964507f frag u_ts_half 744 float 1 0 +U b964507f frag u_ts_on 748 float 1 0 +U b964507f frag u_force_cascade 752 int 1 0 +U b964507f frag u_cloud_shadow 756 float 1 0 +U b964507f frag u_time 760 float 1 0 +T b964507f u_brdf 2 +T b964507f u_diff 3 +T b964507f u_irradiance 4 +T b964507f u_prefilter 5 +T b964507f u_shadow 6 +T b964507f u_tershadow 7 +T b964507f u_ts_height 8 +P 1b654972 overlay.vert overlay.frag +B 1b654972 vert 0 8 +U 1b654972 vert u_screen 0 vec2 1 0 +I 1b654972 a_pos 0 vec2 +I 1b654972 a_uv 1 vec2 +I 1b654972 a_col 2 vec4 +B 1b654972 frag 1 768 +U 1b654972 frag u_cascade_vp 0 mat4 5 64 +U 1b654972 frag u_cascade_split 320 float 5 16 +U 1b654972 frag u_cascade_range 400 float 5 16 +U 1b654972 frag u_cascade_texel 480 float 5 16 +U 1b654972 frag u_sun_dir 560 vec3 1 0 +U 1b654972 frag u_sun_color 576 vec3 1 0 +U 1b654972 frag u_cam_pos 592 vec3 1 0 +U 1b654972 frag u_prefilter_levels 604 float 1 0 +U 1b654972 frag u_fog_density 608 float 1 0 +U 1b654972 frag u_fog_height_falloff 612 float 1 0 +U 1b654972 frag u_fog_base 616 float 1 0 +U 1b654972 frag u_clip_y 620 float 1 0 +U 1b654972 frag u_spec_scale 624 float 1 0 +U 1b654972 frag u_sky_rot 632 vec2 1 0 +U 1b654972 frag u_ibl_scale 640 vec3 1 0 +U 1b654972 frag u_daylight 652 float 1 0 +U 1b654972 frag u_fire_pos 656 vec3 1 0 +U 1b654972 frag u_fire_color 672 vec3 1 0 +U 1b654972 frag u_hand_pos 688 vec3 1 0 +U 1b654972 frag u_hand_color 704 vec3 1 0 +U 1b654972 frag u_hand_dir 720 vec3 1 0 +U 1b654972 frag u_hand_cone 732 float 1 0 +U 1b654972 frag u_ts_origin 736 vec2 1 0 +U 1b654972 frag u_ts_half 744 float 1 0 +U 1b654972 frag u_ts_on 748 float 1 0 +U 1b654972 frag u_force_cascade 752 int 1 0 +U 1b654972 frag u_cloud_shadow 756 float 1 0 +U 1b654972 frag u_time 760 float 1 0 +U 1b654972 frag u_is_font 764 float 1 0 +T 1b654972 u_brdf 2 +T 1b654972 u_irradiance 3 +T 1b654972 u_prefilter 4 +T 1b654972 u_shadow 5 +T 1b654972 u_tershadow 6 +T 1b654972 u_tex 7 +T 1b654972 u_ts_height 8 +P 1fde9cd2 skin.vert model.frag +B 1fde9cd2 vert 0 3344 +U 1fde9cd2 vert u_model 0 mat4 1 0 +U 1fde9cd2 vert u_bones 64 mat4 48 64 +U 1fde9cd2 vert u_skinned 3136 float 1 0 +U 1fde9cd2 vert u_view 3152 mat4 1 0 +U 1fde9cd2 vert u_proj 3216 mat4 1 0 +U 1fde9cd2 vert u_light_vp 3280 mat4 1 0 +I 1fde9cd2 a_weights 6 vec4 +I 1fde9cd2 a_joints 5 vec4 +I 1fde9cd2 a_pos 0 vec3 +I 1fde9cd2 a_nrm 1 vec3 +I 1fde9cd2 a_uv 2 vec2 +B 1fde9cd2 frag 1 852 +U 1fde9cd2 frag u_cascade_vp 0 mat4 5 64 +U 1fde9cd2 frag u_cascade_split 320 float 5 16 +U 1fde9cd2 frag u_cascade_range 400 float 5 16 +U 1fde9cd2 frag u_cascade_texel 480 float 5 16 +U 1fde9cd2 frag u_sun_dir 560 vec3 1 0 +U 1fde9cd2 frag u_sun_color 576 vec3 1 0 +U 1fde9cd2 frag u_cam_pos 592 vec3 1 0 +U 1fde9cd2 frag u_prefilter_levels 604 float 1 0 +U 1fde9cd2 frag u_fog_density 608 float 1 0 +U 1fde9cd2 frag u_fog_height_falloff 612 float 1 0 +U 1fde9cd2 frag u_fog_base 616 float 1 0 +U 1fde9cd2 frag u_clip_y 620 float 1 0 +U 1fde9cd2 frag u_spec_scale 624 float 1 0 +U 1fde9cd2 frag u_sky_rot 632 vec2 1 0 +U 1fde9cd2 frag u_ibl_scale 640 vec3 1 0 +U 1fde9cd2 frag u_daylight 652 float 1 0 +U 1fde9cd2 frag u_fire_pos 656 vec3 1 0 +U 1fde9cd2 frag u_fire_color 672 vec3 1 0 +U 1fde9cd2 frag u_hand_pos 688 vec3 1 0 +U 1fde9cd2 frag u_hand_color 704 vec3 1 0 +U 1fde9cd2 frag u_hand_dir 720 vec3 1 0 +U 1fde9cd2 frag u_hand_cone 732 float 1 0 +U 1fde9cd2 frag u_ts_origin 736 vec2 1 0 +U 1fde9cd2 frag u_ts_half 744 float 1 0 +U 1fde9cd2 frag u_ts_on 748 float 1 0 +U 1fde9cd2 frag u_force_cascade 752 int 1 0 +U 1fde9cd2 frag u_cloud_shadow 756 float 1 0 +U 1fde9cd2 frag u_time 760 float 1 0 +U 1fde9cd2 frag u_model_h 764 float 1 0 +U 1fde9cd2 frag u_view 768 mat4 1 0 +U 1fde9cd2 frag u_tint 832 vec3 1 0 +U 1fde9cd2 frag u_rough_scale 844 float 1 0 +U 1fde9cd2 frag u_emissive 848 float 1 0 +T 1fde9cd2 u_arm 2 +T 1fde9cd2 u_brdf 3 +T 1fde9cd2 u_diff 4 +T 1fde9cd2 u_irradiance 5 +T 1fde9cd2 u_nrm 6 +T 1fde9cd2 u_prefilter 7 +T 1fde9cd2 u_shadow 8 +T 1fde9cd2 u_tershadow 9 +T 1fde9cd2 u_ts_height 10 +P a5ad521e skin.vert model.frag #define ALPHA_TEST; +B a5ad521e vert 0 3344 +U a5ad521e vert u_model 0 mat4 1 0 +U a5ad521e vert u_bones 64 mat4 48 64 +U a5ad521e vert u_skinned 3136 float 1 0 +U a5ad521e vert u_view 3152 mat4 1 0 +U a5ad521e vert u_proj 3216 mat4 1 0 +U a5ad521e vert u_light_vp 3280 mat4 1 0 +I a5ad521e a_weights 6 vec4 +I a5ad521e a_joints 5 vec4 +I a5ad521e a_pos 0 vec3 +I a5ad521e a_nrm 1 vec3 +I a5ad521e a_uv 2 vec2 +B a5ad521e frag 1 852 +U a5ad521e frag u_cascade_vp 0 mat4 5 64 +U a5ad521e frag u_cascade_split 320 float 5 16 +U a5ad521e frag u_cascade_range 400 float 5 16 +U a5ad521e frag u_cascade_texel 480 float 5 16 +U a5ad521e frag u_sun_dir 560 vec3 1 0 +U a5ad521e frag u_sun_color 576 vec3 1 0 +U a5ad521e frag u_cam_pos 592 vec3 1 0 +U a5ad521e frag u_prefilter_levels 604 float 1 0 +U a5ad521e frag u_fog_density 608 float 1 0 +U a5ad521e frag u_fog_height_falloff 612 float 1 0 +U a5ad521e frag u_fog_base 616 float 1 0 +U a5ad521e frag u_clip_y 620 float 1 0 +U a5ad521e frag u_spec_scale 624 float 1 0 +U a5ad521e frag u_sky_rot 632 vec2 1 0 +U a5ad521e frag u_ibl_scale 640 vec3 1 0 +U a5ad521e frag u_daylight 652 float 1 0 +U a5ad521e frag u_fire_pos 656 vec3 1 0 +U a5ad521e frag u_fire_color 672 vec3 1 0 +U a5ad521e frag u_hand_pos 688 vec3 1 0 +U a5ad521e frag u_hand_color 704 vec3 1 0 +U a5ad521e frag u_hand_dir 720 vec3 1 0 +U a5ad521e frag u_hand_cone 732 float 1 0 +U a5ad521e frag u_ts_origin 736 vec2 1 0 +U a5ad521e frag u_ts_half 744 float 1 0 +U a5ad521e frag u_ts_on 748 float 1 0 +U a5ad521e frag u_force_cascade 752 int 1 0 +U a5ad521e frag u_cloud_shadow 756 float 1 0 +U a5ad521e frag u_time 760 float 1 0 +U a5ad521e frag u_model_h 764 float 1 0 +U a5ad521e frag u_view 768 mat4 1 0 +U a5ad521e frag u_tint 832 vec3 1 0 +U a5ad521e frag u_rough_scale 844 float 1 0 +U a5ad521e frag u_emissive 848 float 1 0 +T a5ad521e u_arm 2 +T a5ad521e u_brdf 3 +T a5ad521e u_diff 4 +T a5ad521e u_irradiance 5 +T a5ad521e u_nrm 6 +T a5ad521e u_prefilter 7 +T a5ad521e u_shadow 8 +T a5ad521e u_tershadow 9 +T a5ad521e u_ts_height 10 +P 9068df1c skin.vert outline.frag #define OUTLINE; +B 9068df1c vert 0 3348 +U 9068df1c vert u_model 0 mat4 1 0 +U 9068df1c vert u_bones 64 mat4 48 64 +U 9068df1c vert u_skinned 3136 float 1 0 +U 9068df1c vert u_view 3152 mat4 1 0 +U 9068df1c vert u_proj 3216 mat4 1 0 +U 9068df1c vert u_light_vp 3280 mat4 1 0 +U 9068df1c vert u_outline 3344 float 1 0 +I 9068df1c a_weights 6 vec4 +I 9068df1c a_joints 5 vec4 +I 9068df1c a_pos 0 vec3 +I 9068df1c a_nrm 1 vec3 +I 9068df1c a_uv 2 vec2 +B 9068df1c frag 1 780 +U 9068df1c frag u_cascade_vp 0 mat4 5 64 +U 9068df1c frag u_cascade_split 320 float 5 16 +U 9068df1c frag u_cascade_range 400 float 5 16 +U 9068df1c frag u_cascade_texel 480 float 5 16 +U 9068df1c frag u_sun_dir 560 vec3 1 0 +U 9068df1c frag u_sun_color 576 vec3 1 0 +U 9068df1c frag u_cam_pos 592 vec3 1 0 +U 9068df1c frag u_prefilter_levels 604 float 1 0 +U 9068df1c frag u_fog_density 608 float 1 0 +U 9068df1c frag u_fog_height_falloff 612 float 1 0 +U 9068df1c frag u_fog_base 616 float 1 0 +U 9068df1c frag u_clip_y 620 float 1 0 +U 9068df1c frag u_spec_scale 624 float 1 0 +U 9068df1c frag u_sky_rot 632 vec2 1 0 +U 9068df1c frag u_ibl_scale 640 vec3 1 0 +U 9068df1c frag u_daylight 652 float 1 0 +U 9068df1c frag u_fire_pos 656 vec3 1 0 +U 9068df1c frag u_fire_color 672 vec3 1 0 +U 9068df1c frag u_hand_pos 688 vec3 1 0 +U 9068df1c frag u_hand_color 704 vec3 1 0 +U 9068df1c frag u_hand_dir 720 vec3 1 0 +U 9068df1c frag u_hand_cone 732 float 1 0 +U 9068df1c frag u_ts_origin 736 vec2 1 0 +U 9068df1c frag u_ts_half 744 float 1 0 +U 9068df1c frag u_ts_on 748 float 1 0 +U 9068df1c frag u_force_cascade 752 int 1 0 +U 9068df1c frag u_cloud_shadow 756 float 1 0 +U 9068df1c frag u_time 760 float 1 0 +U 9068df1c frag u_outline_col 768 vec3 1 0 +T 9068df1c u_brdf 2 +T 9068df1c u_diff 3 +T 9068df1c u_irradiance 4 +T 9068df1c u_prefilter 5 +T 9068df1c u_shadow 6 +T 9068df1c u_tershadow 7 +T 9068df1c u_ts_height 8 +P e9b6300c skin.vert outline.frag #define OUTLINE;#define ALPHA_TEST; +B e9b6300c vert 0 3348 +U e9b6300c vert u_model 0 mat4 1 0 +U e9b6300c vert u_bones 64 mat4 48 64 +U e9b6300c vert u_skinned 3136 float 1 0 +U e9b6300c vert u_view 3152 mat4 1 0 +U e9b6300c vert u_proj 3216 mat4 1 0 +U e9b6300c vert u_light_vp 3280 mat4 1 0 +U e9b6300c vert u_outline 3344 float 1 0 +I e9b6300c a_weights 6 vec4 +I e9b6300c a_joints 5 vec4 +I e9b6300c a_pos 0 vec3 +I e9b6300c a_nrm 1 vec3 +I e9b6300c a_uv 2 vec2 +B e9b6300c frag 1 780 +U e9b6300c frag u_cascade_vp 0 mat4 5 64 +U e9b6300c frag u_cascade_split 320 float 5 16 +U e9b6300c frag u_cascade_range 400 float 5 16 +U e9b6300c frag u_cascade_texel 480 float 5 16 +U e9b6300c frag u_sun_dir 560 vec3 1 0 +U e9b6300c frag u_sun_color 576 vec3 1 0 +U e9b6300c frag u_cam_pos 592 vec3 1 0 +U e9b6300c frag u_prefilter_levels 604 float 1 0 +U e9b6300c frag u_fog_density 608 float 1 0 +U e9b6300c frag u_fog_height_falloff 612 float 1 0 +U e9b6300c frag u_fog_base 616 float 1 0 +U e9b6300c frag u_clip_y 620 float 1 0 +U e9b6300c frag u_spec_scale 624 float 1 0 +U e9b6300c frag u_sky_rot 632 vec2 1 0 +U e9b6300c frag u_ibl_scale 640 vec3 1 0 +U e9b6300c frag u_daylight 652 float 1 0 +U e9b6300c frag u_fire_pos 656 vec3 1 0 +U e9b6300c frag u_fire_color 672 vec3 1 0 +U e9b6300c frag u_hand_pos 688 vec3 1 0 +U e9b6300c frag u_hand_color 704 vec3 1 0 +U e9b6300c frag u_hand_dir 720 vec3 1 0 +U e9b6300c frag u_hand_cone 732 float 1 0 +U e9b6300c frag u_ts_origin 736 vec2 1 0 +U e9b6300c frag u_ts_half 744 float 1 0 +U e9b6300c frag u_ts_on 748 float 1 0 +U e9b6300c frag u_force_cascade 752 int 1 0 +U e9b6300c frag u_cloud_shadow 756 float 1 0 +U e9b6300c frag u_time 760 float 1 0 +U e9b6300c frag u_outline_col 768 vec3 1 0 +T e9b6300c u_brdf 2 +T e9b6300c u_diff 3 +T e9b6300c u_irradiance 4 +T e9b6300c u_prefilter 5 +T e9b6300c u_shadow 6 +T e9b6300c u_tershadow 7 +T e9b6300c u_ts_height 8 +P b79a1f4e skin.vert shadow.frag #define SHADOW_PASS; +B b79a1f4e vert 0 3344 +U b79a1f4e vert u_model 0 mat4 1 0 +U b79a1f4e vert u_bones 64 mat4 48 64 +U b79a1f4e vert u_skinned 3136 float 1 0 +U b79a1f4e vert u_view 3152 mat4 1 0 +U b79a1f4e vert u_proj 3216 mat4 1 0 +U b79a1f4e vert u_light_vp 3280 mat4 1 0 +I b79a1f4e a_weights 6 vec4 +I b79a1f4e a_joints 5 vec4 +I b79a1f4e a_pos 0 vec3 +I b79a1f4e a_nrm 1 vec3 +I b79a1f4e a_uv 2 vec2 +B b79a1f4e frag 0 764 +U b79a1f4e frag u_cascade_vp 0 mat4 5 64 +U b79a1f4e frag u_cascade_split 320 float 5 16 +U b79a1f4e frag u_cascade_range 400 float 5 16 +U b79a1f4e frag u_cascade_texel 480 float 5 16 +U b79a1f4e frag u_sun_dir 560 vec3 1 0 +U b79a1f4e frag u_sun_color 576 vec3 1 0 +U b79a1f4e frag u_cam_pos 592 vec3 1 0 +U b79a1f4e frag u_prefilter_levels 604 float 1 0 +U b79a1f4e frag u_fog_density 608 float 1 0 +U b79a1f4e frag u_fog_height_falloff 612 float 1 0 +U b79a1f4e frag u_fog_base 616 float 1 0 +U b79a1f4e frag u_clip_y 620 float 1 0 +U b79a1f4e frag u_spec_scale 624 float 1 0 +U b79a1f4e frag u_sky_rot 632 vec2 1 0 +U b79a1f4e frag u_ibl_scale 640 vec3 1 0 +U b79a1f4e frag u_daylight 652 float 1 0 +U b79a1f4e frag u_fire_pos 656 vec3 1 0 +U b79a1f4e frag u_fire_color 672 vec3 1 0 +U b79a1f4e frag u_hand_pos 688 vec3 1 0 +U b79a1f4e frag u_hand_color 704 vec3 1 0 +U b79a1f4e frag u_hand_dir 720 vec3 1 0 +U b79a1f4e frag u_hand_cone 732 float 1 0 +U b79a1f4e frag u_ts_origin 736 vec2 1 0 +U b79a1f4e frag u_ts_half 744 float 1 0 +U b79a1f4e frag u_ts_on 748 float 1 0 +U b79a1f4e frag u_force_cascade 752 int 1 0 +U b79a1f4e frag u_cloud_shadow 756 float 1 0 +U b79a1f4e frag u_time 760 float 1 0 +T b79a1f4e u_brdf 2 +T b79a1f4e u_diff 3 +T b79a1f4e u_irradiance 4 +T b79a1f4e u_prefilter 5 +T b79a1f4e u_shadow 6 +T b79a1f4e u_tershadow 7 +T b79a1f4e u_ts_height 8 +P a64015f2 skin.vert shadow.frag #define SHADOW_PASS;#define ALPHA_TEST; +B a64015f2 vert 0 3344 +U a64015f2 vert u_model 0 mat4 1 0 +U a64015f2 vert u_bones 64 mat4 48 64 +U a64015f2 vert u_skinned 3136 float 1 0 +U a64015f2 vert u_view 3152 mat4 1 0 +U a64015f2 vert u_proj 3216 mat4 1 0 +U a64015f2 vert u_light_vp 3280 mat4 1 0 +I a64015f2 a_weights 6 vec4 +I a64015f2 a_joints 5 vec4 +I a64015f2 a_pos 0 vec3 +I a64015f2 a_nrm 1 vec3 +I a64015f2 a_uv 2 vec2 +B a64015f2 frag 0 764 +U a64015f2 frag u_cascade_vp 0 mat4 5 64 +U a64015f2 frag u_cascade_split 320 float 5 16 +U a64015f2 frag u_cascade_range 400 float 5 16 +U a64015f2 frag u_cascade_texel 480 float 5 16 +U a64015f2 frag u_sun_dir 560 vec3 1 0 +U a64015f2 frag u_sun_color 576 vec3 1 0 +U a64015f2 frag u_cam_pos 592 vec3 1 0 +U a64015f2 frag u_prefilter_levels 604 float 1 0 +U a64015f2 frag u_fog_density 608 float 1 0 +U a64015f2 frag u_fog_height_falloff 612 float 1 0 +U a64015f2 frag u_fog_base 616 float 1 0 +U a64015f2 frag u_clip_y 620 float 1 0 +U a64015f2 frag u_spec_scale 624 float 1 0 +U a64015f2 frag u_sky_rot 632 vec2 1 0 +U a64015f2 frag u_ibl_scale 640 vec3 1 0 +U a64015f2 frag u_daylight 652 float 1 0 +U a64015f2 frag u_fire_pos 656 vec3 1 0 +U a64015f2 frag u_fire_color 672 vec3 1 0 +U a64015f2 frag u_hand_pos 688 vec3 1 0 +U a64015f2 frag u_hand_color 704 vec3 1 0 +U a64015f2 frag u_hand_dir 720 vec3 1 0 +U a64015f2 frag u_hand_cone 732 float 1 0 +U a64015f2 frag u_ts_origin 736 vec2 1 0 +U a64015f2 frag u_ts_half 744 float 1 0 +U a64015f2 frag u_ts_on 748 float 1 0 +U a64015f2 frag u_force_cascade 752 int 1 0 +U a64015f2 frag u_cloud_shadow 756 float 1 0 +U a64015f2 frag u_time 760 float 1 0 +T a64015f2 u_brdf 2 +T a64015f2 u_diff 3 +T a64015f2 u_irradiance 4 +T a64015f2 u_prefilter 5 +T a64015f2 u_shadow 6 +T a64015f2 u_tershadow 7 +T a64015f2 u_ts_height 8 +P 2e2908c8 terrain.vert terrain.frag +B 2e2908c8 vert 0 204 +U 2e2908c8 vert u_half 0 float 1 0 +U 2e2908c8 vert u_view 16 mat4 1 0 +U 2e2908c8 vert u_proj 80 mat4 1 0 +U 2e2908c8 vert u_origin 144 vec2 1 0 +U 2e2908c8 vert u_cam_pos 160 vec3 1 0 +U 2e2908c8 vert u_node 176 vec3 1 0 +U 2e2908c8 vert u_morph 192 vec2 1 0 +U 2e2908c8 vert u_grid 200 float 1 0 +I 2e2908c8 a_xz 0 vec2 +B 2e2908c8 frag 1 872 +U 2e2908c8 frag u_cascade_vp 0 mat4 5 64 +U 2e2908c8 frag u_cascade_split 320 float 5 16 +U 2e2908c8 frag u_cascade_range 400 float 5 16 +U 2e2908c8 frag u_cascade_texel 480 float 5 16 +U 2e2908c8 frag u_sun_dir 560 vec3 1 0 +U 2e2908c8 frag u_sun_color 576 vec3 1 0 +U 2e2908c8 frag u_cam_pos 592 vec3 1 0 +U 2e2908c8 frag u_prefilter_levels 604 float 1 0 +U 2e2908c8 frag u_fog_density 608 float 1 0 +U 2e2908c8 frag u_fog_height_falloff 612 float 1 0 +U 2e2908c8 frag u_fog_base 616 float 1 0 +U 2e2908c8 frag u_clip_y 620 float 1 0 +U 2e2908c8 frag u_spec_scale 624 float 1 0 +U 2e2908c8 frag u_sky_rot 632 vec2 1 0 +U 2e2908c8 frag u_ibl_scale 640 vec3 1 0 +U 2e2908c8 frag u_daylight 652 float 1 0 +U 2e2908c8 frag u_fire_pos 656 vec3 1 0 +U 2e2908c8 frag u_fire_color 672 vec3 1 0 +U 2e2908c8 frag u_hand_pos 688 vec3 1 0 +U 2e2908c8 frag u_hand_color 704 vec3 1 0 +U 2e2908c8 frag u_hand_dir 720 vec3 1 0 +U 2e2908c8 frag u_hand_cone 732 float 1 0 +U 2e2908c8 frag u_ts_origin 736 vec2 1 0 +U 2e2908c8 frag u_ts_half 744 float 1 0 +U 2e2908c8 frag u_ts_on 748 float 1 0 +U 2e2908c8 frag u_force_cascade 752 int 1 0 +U 2e2908c8 frag u_cloud_shadow 756 float 1 0 +U 2e2908c8 frag u_time 760 float 1 0 +U 2e2908c8 frag u_half 764 float 1 0 +U 2e2908c8 frag u_texel 768 float 1 0 +U 2e2908c8 frag u_ortho_on 772 float 1 0 +U 2e2908c8 frag u_carpet_on 776 float 1 0 +U 2e2908c8 frag u_snow_line 780 float 1 0 +U 2e2908c8 frag u_lake_level 784 float 1 0 +U 2e2908c8 frag u_sea_level 788 float 1 0 +U 2e2908c8 frag u_origin 792 vec2 1 0 +U 2e2908c8 frag u_view 800 mat4 1 0 +U 2e2908c8 frag u_far_split 864 float 1 0 +U 2e2908c8 frag u_far_band 868 float 1 0 +T 2e2908c8 u_brdf 2 +T 2e2908c8 u_carpet 3 +T 2e2908c8 u_grass_a 4 +T 2e2908c8 u_grass_d 5 +T 2e2908c8 u_grass_n 6 +T 2e2908c8 u_height 7 +T 2e2908c8 u_irradiance 8 +T 2e2908c8 u_ortho 9 +T 2e2908c8 u_prefilter 10 +T 2e2908c8 u_rock_a 11 +T 2e2908c8 u_rock_d 12 +T 2e2908c8 u_rock_n 13 +T 2e2908c8 u_shadow 14 +T 2e2908c8 u_snow_d 15 +T 2e2908c8 u_sunshadow 16 +T 2e2908c8 u_tershadow 17 +T 2e2908c8 u_ts_height 18 +P 1f95f31b terrain.vert terrain.frag #define FAR_ONLY; +B 1f95f31b vert 0 204 +U 1f95f31b vert u_half 0 float 1 0 +U 1f95f31b vert u_view 16 mat4 1 0 +U 1f95f31b vert u_proj 80 mat4 1 0 +U 1f95f31b vert u_origin 144 vec2 1 0 +U 1f95f31b vert u_cam_pos 160 vec3 1 0 +U 1f95f31b vert u_node 176 vec3 1 0 +U 1f95f31b vert u_morph 192 vec2 1 0 +U 1f95f31b vert u_grid 200 float 1 0 +I 1f95f31b a_xz 0 vec2 +B 1f95f31b frag 1 872 +U 1f95f31b frag u_cascade_vp 0 mat4 5 64 +U 1f95f31b frag u_cascade_split 320 float 5 16 +U 1f95f31b frag u_cascade_range 400 float 5 16 +U 1f95f31b frag u_cascade_texel 480 float 5 16 +U 1f95f31b frag u_sun_dir 560 vec3 1 0 +U 1f95f31b frag u_sun_color 576 vec3 1 0 +U 1f95f31b frag u_cam_pos 592 vec3 1 0 +U 1f95f31b frag u_prefilter_levels 604 float 1 0 +U 1f95f31b frag u_fog_density 608 float 1 0 +U 1f95f31b frag u_fog_height_falloff 612 float 1 0 +U 1f95f31b frag u_fog_base 616 float 1 0 +U 1f95f31b frag u_clip_y 620 float 1 0 +U 1f95f31b frag u_spec_scale 624 float 1 0 +U 1f95f31b frag u_sky_rot 632 vec2 1 0 +U 1f95f31b frag u_ibl_scale 640 vec3 1 0 +U 1f95f31b frag u_daylight 652 float 1 0 +U 1f95f31b frag u_fire_pos 656 vec3 1 0 +U 1f95f31b frag u_fire_color 672 vec3 1 0 +U 1f95f31b frag u_hand_pos 688 vec3 1 0 +U 1f95f31b frag u_hand_color 704 vec3 1 0 +U 1f95f31b frag u_hand_dir 720 vec3 1 0 +U 1f95f31b frag u_hand_cone 732 float 1 0 +U 1f95f31b frag u_ts_origin 736 vec2 1 0 +U 1f95f31b frag u_ts_half 744 float 1 0 +U 1f95f31b frag u_ts_on 748 float 1 0 +U 1f95f31b frag u_force_cascade 752 int 1 0 +U 1f95f31b frag u_cloud_shadow 756 float 1 0 +U 1f95f31b frag u_time 760 float 1 0 +U 1f95f31b frag u_half 764 float 1 0 +U 1f95f31b frag u_texel 768 float 1 0 +U 1f95f31b frag u_ortho_on 772 float 1 0 +U 1f95f31b frag u_carpet_on 776 float 1 0 +U 1f95f31b frag u_snow_line 780 float 1 0 +U 1f95f31b frag u_lake_level 784 float 1 0 +U 1f95f31b frag u_sea_level 788 float 1 0 +U 1f95f31b frag u_origin 792 vec2 1 0 +U 1f95f31b frag u_view 800 mat4 1 0 +U 1f95f31b frag u_far_split 864 float 1 0 +U 1f95f31b frag u_far_band 868 float 1 0 +T 1f95f31b u_brdf 2 +T 1f95f31b u_carpet 3 +T 1f95f31b u_grass_a 4 +T 1f95f31b u_grass_d 5 +T 1f95f31b u_grass_n 6 +T 1f95f31b u_height 7 +T 1f95f31b u_irradiance 8 +T 1f95f31b u_ortho 9 +T 1f95f31b u_prefilter 10 +T 1f95f31b u_rock_a 11 +T 1f95f31b u_rock_d 12 +T 1f95f31b u_rock_n 13 +T 1f95f31b u_shadow 14 +T 1f95f31b u_snow_d 15 +T 1f95f31b u_sunshadow 16 +T 1f95f31b u_tershadow 17 +T 1f95f31b u_ts_height 18 +P f4382918 terrain.vert terrain.frag #define NEAR_ONLY; +B f4382918 vert 0 204 +U f4382918 vert u_half 0 float 1 0 +U f4382918 vert u_view 16 mat4 1 0 +U f4382918 vert u_proj 80 mat4 1 0 +U f4382918 vert u_origin 144 vec2 1 0 +U f4382918 vert u_cam_pos 160 vec3 1 0 +U f4382918 vert u_node 176 vec3 1 0 +U f4382918 vert u_morph 192 vec2 1 0 +U f4382918 vert u_grid 200 float 1 0 +I f4382918 a_xz 0 vec2 +B f4382918 frag 1 872 +U f4382918 frag u_cascade_vp 0 mat4 5 64 +U f4382918 frag u_cascade_split 320 float 5 16 +U f4382918 frag u_cascade_range 400 float 5 16 +U f4382918 frag u_cascade_texel 480 float 5 16 +U f4382918 frag u_sun_dir 560 vec3 1 0 +U f4382918 frag u_sun_color 576 vec3 1 0 +U f4382918 frag u_cam_pos 592 vec3 1 0 +U f4382918 frag u_prefilter_levels 604 float 1 0 +U f4382918 frag u_fog_density 608 float 1 0 +U f4382918 frag u_fog_height_falloff 612 float 1 0 +U f4382918 frag u_fog_base 616 float 1 0 +U f4382918 frag u_clip_y 620 float 1 0 +U f4382918 frag u_spec_scale 624 float 1 0 +U f4382918 frag u_sky_rot 632 vec2 1 0 +U f4382918 frag u_ibl_scale 640 vec3 1 0 +U f4382918 frag u_daylight 652 float 1 0 +U f4382918 frag u_fire_pos 656 vec3 1 0 +U f4382918 frag u_fire_color 672 vec3 1 0 +U f4382918 frag u_hand_pos 688 vec3 1 0 +U f4382918 frag u_hand_color 704 vec3 1 0 +U f4382918 frag u_hand_dir 720 vec3 1 0 +U f4382918 frag u_hand_cone 732 float 1 0 +U f4382918 frag u_ts_origin 736 vec2 1 0 +U f4382918 frag u_ts_half 744 float 1 0 +U f4382918 frag u_ts_on 748 float 1 0 +U f4382918 frag u_force_cascade 752 int 1 0 +U f4382918 frag u_cloud_shadow 756 float 1 0 +U f4382918 frag u_time 760 float 1 0 +U f4382918 frag u_half 764 float 1 0 +U f4382918 frag u_texel 768 float 1 0 +U f4382918 frag u_ortho_on 772 float 1 0 +U f4382918 frag u_carpet_on 776 float 1 0 +U f4382918 frag u_snow_line 780 float 1 0 +U f4382918 frag u_lake_level 784 float 1 0 +U f4382918 frag u_sea_level 788 float 1 0 +U f4382918 frag u_origin 792 vec2 1 0 +U f4382918 frag u_view 800 mat4 1 0 +U f4382918 frag u_far_split 864 float 1 0 +U f4382918 frag u_far_band 868 float 1 0 +T f4382918 u_brdf 2 +T f4382918 u_carpet 3 +T f4382918 u_grass_a 4 +T f4382918 u_grass_d 5 +T f4382918 u_grass_n 6 +T f4382918 u_height 7 +T f4382918 u_irradiance 8 +T f4382918 u_ortho 9 +T f4382918 u_prefilter 10 +T f4382918 u_rock_a 11 +T f4382918 u_rock_d 12 +T f4382918 u_rock_n 13 +T f4382918 u_shadow 14 +T f4382918 u_snow_d 15 +T f4382918 u_sunshadow 16 +T f4382918 u_tershadow 17 +T f4382918 u_ts_height 18 +P bf3151c8 terrain.vert tersun.frag +B bf3151c8 vert 0 204 +U bf3151c8 vert u_half 0 float 1 0 +U bf3151c8 vert u_view 16 mat4 1 0 +U bf3151c8 vert u_proj 80 mat4 1 0 +U bf3151c8 vert u_origin 144 vec2 1 0 +U bf3151c8 vert u_cam_pos 160 vec3 1 0 +U bf3151c8 vert u_node 176 vec3 1 0 +U bf3151c8 vert u_morph 192 vec2 1 0 +U bf3151c8 vert u_grid 200 float 1 0 +I bf3151c8 a_xz 0 vec2 +B bf3151c8 frag 1 840 +U bf3151c8 frag u_cascade_vp 0 mat4 5 64 +U bf3151c8 frag u_cascade_split 320 float 5 16 +U bf3151c8 frag u_cascade_range 400 float 5 16 +U bf3151c8 frag u_cascade_texel 480 float 5 16 +U bf3151c8 frag u_sun_dir 560 vec3 1 0 +U bf3151c8 frag u_sun_color 576 vec3 1 0 +U bf3151c8 frag u_cam_pos 592 vec3 1 0 +U bf3151c8 frag u_prefilter_levels 604 float 1 0 +U bf3151c8 frag u_fog_density 608 float 1 0 +U bf3151c8 frag u_fog_height_falloff 612 float 1 0 +U bf3151c8 frag u_fog_base 616 float 1 0 +U bf3151c8 frag u_clip_y 620 float 1 0 +U bf3151c8 frag u_spec_scale 624 float 1 0 +U bf3151c8 frag u_sky_rot 632 vec2 1 0 +U bf3151c8 frag u_ibl_scale 640 vec3 1 0 +U bf3151c8 frag u_daylight 652 float 1 0 +U bf3151c8 frag u_fire_pos 656 vec3 1 0 +U bf3151c8 frag u_fire_color 672 vec3 1 0 +U bf3151c8 frag u_hand_pos 688 vec3 1 0 +U bf3151c8 frag u_hand_color 704 vec3 1 0 +U bf3151c8 frag u_hand_dir 720 vec3 1 0 +U bf3151c8 frag u_hand_cone 732 float 1 0 +U bf3151c8 frag u_ts_origin 736 vec2 1 0 +U bf3151c8 frag u_ts_half 744 float 1 0 +U bf3151c8 frag u_ts_on 748 float 1 0 +U bf3151c8 frag u_force_cascade 752 int 1 0 +U bf3151c8 frag u_cloud_shadow 756 float 1 0 +U bf3151c8 frag u_time 760 float 1 0 +U bf3151c8 frag u_view 768 mat4 1 0 +U bf3151c8 frag u_far_split 832 float 1 0 +U bf3151c8 frag u_far_band 836 float 1 0 +T bf3151c8 u_brdf 2 +T bf3151c8 u_height 3 +T bf3151c8 u_irradiance 4 +T bf3151c8 u_prefilter 5 +T bf3151c8 u_shadow 6 +T bf3151c8 u_tershadow 7 +T bf3151c8 u_ts_height 8 +P 46e2325c water.vert water.frag +B 46e2325c vert 0 152 +U 46e2325c vert u_view 0 mat4 1 0 +U 46e2325c vert u_proj 64 mat4 1 0 +U 46e2325c vert u_level 128 float 1 0 +U 46e2325c vert u_center 136 vec2 1 0 +U 46e2325c vert u_extent 144 vec2 1 0 +I 46e2325c a_xz 0 vec2 +B 46e2325c frag 1 932 +U 46e2325c frag u_cascade_vp 0 mat4 5 64 +U 46e2325c frag u_cascade_split 320 float 5 16 +U 46e2325c frag u_cascade_range 400 float 5 16 +U 46e2325c frag u_cascade_texel 480 float 5 16 +U 46e2325c frag u_sun_dir 560 vec3 1 0 +U 46e2325c frag u_sun_color 576 vec3 1 0 +U 46e2325c frag u_cam_pos 592 vec3 1 0 +U 46e2325c frag u_prefilter_levels 604 float 1 0 +U 46e2325c frag u_fog_density 608 float 1 0 +U 46e2325c frag u_fog_height_falloff 612 float 1 0 +U 46e2325c frag u_fog_base 616 float 1 0 +U 46e2325c frag u_clip_y 620 float 1 0 +U 46e2325c frag u_spec_scale 624 float 1 0 +U 46e2325c frag u_sky_rot 632 vec2 1 0 +U 46e2325c frag u_ibl_scale 640 vec3 1 0 +U 46e2325c frag u_daylight 652 float 1 0 +U 46e2325c frag u_fire_pos 656 vec3 1 0 +U 46e2325c frag u_fire_color 672 vec3 1 0 +U 46e2325c frag u_hand_pos 688 vec3 1 0 +U 46e2325c frag u_hand_color 704 vec3 1 0 +U 46e2325c frag u_hand_dir 720 vec3 1 0 +U 46e2325c frag u_hand_cone 732 float 1 0 +U 46e2325c frag u_ts_origin 736 vec2 1 0 +U 46e2325c frag u_ts_half 744 float 1 0 +U 46e2325c frag u_ts_on 748 float 1 0 +U 46e2325c frag u_force_cascade 752 int 1 0 +U 46e2325c frag u_cloud_shadow 756 float 1 0 +U 46e2325c frag u_time 760 float 1 0 +U 46e2325c frag u_view 768 mat4 1 0 +U 46e2325c frag u_inv_vp 832 mat4 1 0 +U 46e2325c frag u_screen 896 vec2 1 0 +U 46e2325c frag u_refl_on 904 float 1 0 +U 46e2325c frag u_center 912 vec2 1 0 +U 46e2325c frag u_extent 920 vec2 1 0 +U 46e2325c frag u_clip_ellipse 928 float 1 0 +T 46e2325c u_brdf 2 +T 46e2325c u_depth 3 +T 46e2325c u_irradiance 4 +T 46e2325c u_prefilter 5 +T 46e2325c u_refl 6 +T 46e2325c u_scene 7 +T 46e2325c u_shadow 8 +T 46e2325c u_tershadow 9 +T 46e2325c u_ts_height 10 diff --git a/packages/ludic.render3d/shaders/variants.list b/packages/ludic.render3d/shaders/variants.list new file mode 100644 index 00000000..c135d04d --- /dev/null +++ b/packages/ludic.render3d/shaders/variants.list @@ -0,0 +1,49 @@ +# variants.list - every program render3d builds: vertex|fragment|defines (one line; newlines +# in the defines are written as ";"). A backend that cannot compile shaders at run time +# (Vulkan: SPIR-V is built ahead) must cover all of them. Regenerate by running the game and +# its self-tests with R3D_PROGRAMS_LOG= and sorting the result. +fullscreen.vert|adapt.frag| +fullscreen.vert|bloom_down.frag| +fullscreen.vert|bloom_up.frag| +fullscreen.vert|heightgen.frag|#define DEM; +fullscreen.vert|ibl_brdf.frag| +fullscreen.vert|ibl_irradiance.frag| +fullscreen.vert|ibl_prefilter.frag| +fullscreen.vert|sharpen.frag| +fullscreen.vert|sky.frag| +fullscreen.vert|ssao_blur.frag| +fullscreen.vert|ssgi.frag| +fullscreen.vert|ternormal.frag| +fullscreen.vert|tershadow.frag|#define NOISE_ONLY; +fullscreen.vert|tonemap.frag| +grass.vert|model.frag|#define FOLIAGE;#define BLADE; +impostor.vert|impostor.frag| +impostor.vert|impostor.frag|#define SHADOW_PASS; +model.vert|bake.frag| +model.vert|bake.frag|#define CARD; +model.vert|bake.frag|#define FLOWER; +model.vert|depth.frag|#define FOLIAGE;#define WIND;#define ALPHA_TEST; +model.vert|model.frag| +model.vert|model.frag|#define CARD;#define CHEAP; +model.vert|model.frag|#define FOLIAGE;#define WIND;#define ALPHA_TEST; +model.vert|model.frag|#define FOLIAGE;#define WIND;#define BLADE; +model.vert|model.frag|#define FOLIAGE;#define WIND;#define CARD; +model.vert|model.frag|#define FOLIAGE;#define WIND;#define EQ_PASS; +model.vert|model.frag|#define FOLIAGE;#define WIND;#define FLOWER; +model.vert|model.frag|#define SHADOW_PASS;#define WIND;#define CARD; +model.vert|model.frag|#define WIND; +model.vert|shadow.frag|#define SHADOW_PASS; +model.vert|shadow.frag|#define SHADOW_PASS;#define WIND; +model.vert|shadow.frag|#define SHADOW_PASS;#define WIND;#define ALPHA_TEST; +overlay.vert|overlay.frag| +skin.vert|model.frag| +skin.vert|model.frag|#define ALPHA_TEST; +skin.vert|outline.frag|#define OUTLINE; +skin.vert|outline.frag|#define OUTLINE;#define ALPHA_TEST; +skin.vert|shadow.frag|#define SHADOW_PASS; +skin.vert|shadow.frag|#define SHADOW_PASS;#define ALPHA_TEST; +terrain.vert|terrain.frag| +terrain.vert|terrain.frag|#define FAR_ONLY; +terrain.vert|terrain.frag|#define NEAR_ONLY; +terrain.vert|tersun.frag| +water.vert|water.frag| diff --git a/tools/ludic-cli/dev.ludic b/tools/ludic-cli/dev.ludic index b35f5148..d137febd 100644 --- a/tools/ludic-cli/dev.ludic +++ b/tools/ludic-cli/dev.ludic @@ -34,6 +34,7 @@ program LudicDev { import "docgen_check.ludic" import "glgen.ludic" import "vkgen.ludic" + import "shaders.ludic" import "assets.ludic" import "release.ludic" import "pkg.ludic" @@ -71,6 +72,7 @@ program LudicDev { print(" docs-palette [--check] regenerate emit_color.ludic + palette.json from the palette table") print(" glgen [--check] regenerate gl_api.ludic + gl_thunks.ll from the platform gl3.h") print(" vkgen [--xml f] [--check] regenerate vk_api.ludic + vk_thunks.ll from the Vulkan registry") + print(" shaders [--check] build render3d's shader variants to SPIR-V + manifest (Vulkan SDK)") print("") print("release:") print(" release [major|minor|patch] [--dry-run] [--publish]") @@ -109,6 +111,7 @@ program LudicDev { if (cmd == "docs-palette") { return cmd_docs_palette() } if (cmd == "glgen") { return cmd_glgen() } if (cmd == "vkgen") { return cmd_vkgen() } + if (cmd == "shaders") { return cmd_shaders() } if (cmd == "fetch-assets") { return cmd_fetch_assets() } if (cmd == "docs-gen") { return cmd_docs_gen() } if (cmd == "docs-check") { return cmd_docs_check() } diff --git a/tools/ludic-cli/shaders.ludic b/tools/ludic-cli/shaders.ludic new file mode 100644 index 00000000..e33d7cab --- /dev/null +++ b/tools/ludic-cli/shaders.ludic @@ -0,0 +1,223 @@ +# shaders.ludic — render3d's shaders as Vulkan SPIR-V, built ahead of time. +# +# ludic-dev shaders [--check] +# read packages/ludic.render3d/shaders/variants.list and write, per variant, +# packages/ludic.render3d/shaders/spv/.vert.spv and .frag.spv +# and one packages/ludic.render3d/shaders/spv/manifest.txt the renderer reads: +# P a program (defines with ';' for newlines) +# B a stage's uniform block +# U +# T a sampler, the same binding in both stages +# I a vertex input +# +# OpenGL compiles GLSL when the game starts; Vulkan cannot, so every program the renderer +# builds (variants.list, from R3D_PROGRAMS_LOG) is compiled here. The GLSL is the renderer's +# own, assembled exactly as programs.ludic assembles it, through glslang's relaxed Vulkan mode: +# the loose uniforms of each stage land in one uniform block whose offsets come from the +# reflection, which is what gpu_uniform / u_* write through on Vulkan. +# +# Bindings are assigned here, not by glslang: its automatic numbering gave several samplers of +# one stage the same binding. The vertex stage's block is 0, the fragment stage's is 1, and the +# samplers of both stages are numbered from 2 in name order, so a sampler both stages use has +# one binding and one pipeline layout covers the program. +# +# Needs the Vulkan SDK (glslangValidator, spirv-cross, spirv-val): $VULKAN_SDK/bin, else the +# newest ~/VulkanSDK/*/macOS/bin, else C:/VulkanSDK/*/Bin. The outputs are tracked, so building a +# game never runs this. + +var shd_bin: pointer = null + +function shd_find_sdk() -> bool { + let sdk = getenv_or("VULKAN_SDK", "") + if sdk != "" and file_exists(`{sdk}/bin/glslangValidator`) { shd_bin = `{sdk}/bin`; return true } + if sdk != "" and file_exists(`{sdk}/Bin/glslangValidator.exe`) { shd_bin = `{sdk}/Bin`; return true } + let found = Text.trim(capture("ls -d $HOME/VulkanSDK/*/macOS/bin /c/VulkanSDK/*/Bin 2>/dev/null | tail -1")) + if found != "" { shd_bin = found; return true } + return false +} + +# FNV-1a over the variant line, as eight hex digits: the id is stable across runs and machines +function shd_id(line: pointer) -> pointer { + var h = 0x811C9DC5 + let n = slen(line) + var i = 0 + while i < n { h = (h ^ line[i]) * 16777619; i += 1 } + let hex = "0123456789abcdef" + let b = sb_new() + var k = 0 + while k < 8 { sb_putc(b, hex[(h >> (28 - k * 4)) & 15]); k += 1 } + return sb_str(b) +} + +function shd_is_ident(c: int) -> bool { return (c >= 'a' and c <= 'z') or (c >= 'A' and c <= 'Z') or (c >= '0' and c <= '9') or c == '_' } + +# the sampler declarations of a source: names (in order met) into shd_names, deduplicated +var shd_names: []pointer = null +function shd_note_name(n: pointer) -> void { + var i = 0 + while i < len(shd_names) { if shd_names[i] == n { return }; i += 1 } + push(shd_names, n) +} + +# Rewrite every `uniform <[iu]sampler...> [...];` anywhere in the text (several share a line +# in terrain.frag) as `layout(set = 0, binding = N) uniform ...`. With `collect`, only record names. +function shd_bind_samplers(src: pointer, collect: bool) -> pointer { + let b = sb_new() + let n = slen(src) + var i = 0 + while i < n { + let at = s_index(src, "uniform", i) + if at < 0 { sb_puts(b, str_sub(src, i, n)); break } + sb_puts(b, str_sub(src, i, at)) + # a whole word "uniform", then whitespace, then a sampler type + var ok = (at == 0 or not shd_is_ident(src[at - 1])) and at + 7 < n and str_space(src[at + 7]) + var p = at + 7 + while ok and p < n and str_space(src[p]) { p += 1 } + let ts = p + while ok and p < n and shd_is_ident(src[p]) { p += 1 } + let ty = str_sub(src, ts, p) + if ok { ok = s_starts(ty, "sampler") or s_starts(ty, "isampler") or s_starts(ty, "usampler") } + while ok and p < n and str_space(src[p]) { p += 1 } + let ns = p + while ok and p < n and shd_is_ident(src[p]) { p += 1 } + let name = str_sub(src, ns, p) + if ok { ok = slen(name) > 0 } + if not ok { sb_puts(b, "uniform"); i = at + 7; continue } + if collect { shd_note_name(name) } + var bind = 0 + var k = 0 + while k < len(shd_names) { if shd_names[k] == name { bind = k + 2 }; k += 1 } + sb_puts(b, `layout(set = 0, binding = {string(bind)}) uniform {ty} {name}`) + i = p + } + return sb_str(b) +} + +var shd_noise: pointer = null +var shd_lighting: pointer = null +function shd_file(name: pointer) -> pointer { + let s = read_file(`packages/ludic.render3d/shaders/{name}`) + if s == null { err(`shaders: missing packages/ludic.render3d/shaders/{name}\n`); return "" } + return s +} + +function shd_q(p: pointer) -> pointer { return `"{p}"` } + +function shd_reflect_stage(mf: pointer, id: pointer, stage: pointer, spv: pointer, tmp: pointer) -> bool { + let js = `{tmp}/{id}.{stage}.json` + if not shq(`{shd_q(shd_bin + "/spirv-cross")} {shd_q(spv)} --reflect > {shd_q(js)} 2>/dev/null`) { err(`shaders: spirv-cross failed on {spv}\n`); return false } + let d = json_parse(read_file(js)) + let ubos = j_get(d, "ubos") + if ubos.t == JV_ARR and len(ubos.kids) > 0 { + let u = ubos.kids[0] + sb_puts(mf, `B {id} {stage} {string(j_get(u, "binding").num)} {string(j_get(u, "block_size").num)}\n`) + let ty = j_get(j_get(d, "types"), j_get(u, "type").s) + let mem = j_get(ty, "members") + var i = 0 + while i < len(mem.kids) { + let m = mem.kids[i] + var count = 1 + let arr = j_get(m, "array") + if arr.t == JV_ARR and len(arr.kids) > 0 { count = arr.kids[0].num } + var stride = 0 + let st = j_get(m, "array_stride") + if st.t == JV_NUM { stride = st.num } + sb_puts(mf, `U {id} {stage} {j_get(m, "name").s} {string(j_get(m, "offset").num)} {j_get(m, "type").s} {string(count)} {string(stride)}\n`) + i += 1 + } + } + if stage == "vert" { + let ins = j_get(d, "inputs") + var i = 0 + while i < len(ins.kids) { + let v = ins.kids[i] + sb_puts(mf, `I {id} {j_get(v, "name").s} {string(j_get(v, "location").num)} {j_get(v, "type").s}\n`) + i += 1 + } + } + return true +} + +function cmd_shaders() -> int { + var check = false + var ai = 2 + while ai < arg_count() { if arg(ai) == "--check" { check = true }; ai += 1 } + if not shd_find_sdk() { err("shaders: no Vulkan SDK (glslangValidator); set VULKAN_SDK\n"); return 1 } + let list = read_file("packages/ludic.render3d/shaders/variants.list") + if list == null { err("shaders: no packages/ludic.render3d/shaders/variants.list\n"); return 1 } + shd_noise = shd_file("noise.glsl") + shd_lighting = shd_file("lighting.glsl") + var outdir = "packages/ludic.render3d/shaders/spv" + let tmp = tmp_path("shaders") + if check { outdir = tmp_path("shaders-check") } + shell(`rm -rf {shd_q(tmp)} && mkdir -p {shd_q(tmp)} {shd_q(outdir)}`) + if not check { shell(`rm -f {shd_q(outdir)}/*.spv`) } + let mf = sb_new() + sb_puts(mf, "# manifest.txt - GENERATED by `ludic-dev shaders` from variants.list. Do not edit.\n") + let lines = Text.split(list, "\n") + var made = 0 + var li = 0 + while li < len(lines) { + let line = Text.trim(lines[li]) + li += 1 + if slen(line) == 0 or line[0] == '#' { continue } + let parts = Text.split(line, "|") + if len(parts) < 2 { err(`shaders: bad variant line: {line}\n`); return 1 } + var defs = "" + if len(parts) > 2 { defs = parts[2] } + let id = shd_id(line) + let defines = Text.replace(defs, ";", "\n") + let vsrc = "#version 460\n" + defines + shd_file(parts[0]) + let fsrc = "#version 460\n" + defines + shd_noise + shd_lighting + shd_file(parts[1]) + # one binding table for both stages + shd_names = new []pointer + shd_bind_samplers(vsrc, true) + shd_bind_samplers(fsrc, true) + # name order, so the table does not depend on which stage met a sampler first + var x = 0 + while x < len(shd_names) { + var y = x + 1 + while y < len(shd_names) { + if str_cmp(shd_names[y], shd_names[x]) < 0 { let t = shd_names[x]; shd_names[x] = shd_names[y]; shd_names[y] = t } + y += 1 + } + x += 1 + } + sb_puts(mf, `P {id} {parts[0]} {parts[1]} {defs}\n`) + let stages = Text.split("vert frag", " ") + var si = 0 + while si < 2 { + let stage = stages[si] + var src = vsrc + if stage == "frag" { src = fsrc } + let glsl = `{tmp}/{id}.{stage}.glsl` + if not write_file(glsl, shd_bind_samplers(src, false)) { err(`shaders: cannot write {glsl}\n`); return 1 } + let spv = `{outdir}/{id}.{stage}.spv` + var extra = "" + if stage == "frag" { extra = " --shift-UBO-binding frag 1" } + let logf = `{tmp}/{id}.{stage}.log` + if not shq(`{shd_q(shd_bin + "/glslangValidator")} -V -R --auto-map-bindings --auto-map-locations{extra} -S {stage} {shd_q(glsl)} -o {shd_q(spv)} > {shd_q(logf)} 2>&1`) { + err(`shaders: {parts[0]} + {parts[1]} [{defs}] ({stage}) did not compile:\n{capture("grep ERROR " + shd_q(logf) + " | head -5")}\n`) + return 1 + } + if not shq(`{shd_q(shd_bin + "/spirv-val")} --target-env vulkan1.3 {shd_q(spv)} > /dev/null 2>&1`) { err(`shaders: {spv} fails spirv-val\n`); return 1 } + if not shd_reflect_stage(mf, id, stage, spv, tmp) { return 1 } + si += 1 + } + var t = 0 + while t < len(shd_names) { + sb_puts(mf, `T {id} {shd_names[t]} {string(t + 2)}\n`) + t += 1 + } + made += 1 + } + if not write_file(`{outdir}/manifest.txt`, sb_str(mf)) { err("shaders: cannot write manifest.txt\n"); return 1 } + if check { + let real = "packages/ludic.render3d/shaders/spv" + if not shq(`diff -r {shd_q(outdir)} {shd_q(real)} > /dev/null 2>&1`) { err("shaders: spv/ drifted from variants.list and the GLSL (run: ludic-dev shaders)\n"); return 1 } + } + var note = "" + if check { note = " (unchanged)" } + print(`OK {string(made)} programs, {string(made * 2)} SPIR-V stages{note}`) + return 0 +} diff --git a/tools/ludic-cli/test.ludic b/tools/ludic-cli/test.ludic index 75ebc0bf..c4058d64 100644 --- a/tools/ludic-cli/test.ludic +++ b/tools/ludic-cli/test.ludic @@ -817,5 +817,13 @@ function cmd_dev_test() -> int { } else { bad2("ludic-dev vkgen --check", capture_line(`tail -1 {tmp_dir()}/vkgen.out`)) } } else { skip("ludic-dev vkgen --check (needs the Vulkan SDK's vk.xml)") } + # render3d's shader variants as SPIR-V: tracked, so a change to a shader or to variants.list + # that nobody rebuilt fails here, wherever the Vulkan SDK (glslangValidator) is installed + if shq("ls $VULKAN_SDK/bin/glslangValidator $HOME/VulkanSDK/*/macOS/bin/glslangValidator 2>/dev/null | grep -q glslangValidator") { + if shq(`bin/ludic-dev shaders --check > {tmp_dir()}/shaders.out 2>&1`) { + ok("ludic-dev shaders rebuilds render3d's SPIR-V byte-identically") + } else { bad2("ludic-dev shaders --check", capture_line(`tail -1 {tmp_dir()}/shaders.out`)) } + } else { skip("ludic-dev shaders --check (needs the Vulkan SDK's glslangValidator)") } + return report() }