From 9dff8f21bdd39dae8ca175d856d142d1950a467a Mon Sep 17 00:00:00 2001 From: Orkuncakilkaya Date: Sat, 19 Sep 2026 18:24:43 +0300 Subject: [PATCH] feat(render3d): one wind, and everything in the valley is moved by it The grass had a gust built from two sines; the trees had no gust term AT ALL, only a per-instance wobble. So the meadow rippled and the canopy above it swayed to an unrelated rhythm, and nothing ever crossed the valley. wind.glsl is prepended to every stage (programs.ludic, and shaders.ludic for the SPIR-V build) so grass, crowns and water read the same field at the same world position. It declares no uniforms on purpose: u_time and u_wind already exist in several of those files and redeclaring them is a compile error in whichever stage includes both. The wavelength is what made it work. At 0.030 the front was 209 m crest to crest - longer than the meadow you can see - so the whole frame sat in one phase and the gust read as everything breathing together. At 0.085 it is 74 m and a front crosses a view in a couple of seconds. R3D_DEBUG_WIND=1 paints the field on the ground. It is the only honest way to show a gust in a still image, and two shots 0.3 s apart move by 39/255. 400 frames: GL 6.9 s, VK 7.2 s. Backends agree to 0.68/255. Co-Authored-By: Claude Opus 5 --- changes/one-wind.md | 25 ++++++++++ packages/ludic.render3d/programs.ludic | 7 ++- packages/ludic.render3d/shaders/grass.vert | 6 ++- packages/ludic.render3d/shaders/model.vert | 6 ++- .../shaders/spv/01089da8.frag.spv | Bin 41440 -> 41492 bytes .../shaders/spv/01089da8.vert.spv | Bin 9628 -> 9680 bytes .../shaders/spv/1b654972.frag.spv | Bin 4748 -> 4800 bytes .../shaders/spv/1b654972.vert.spv | Bin 2028 -> 2080 bytes .../shaders/spv/1ce5c5d1.frag.spv | Bin 45008 -> 45060 bytes .../shaders/spv/1ce5c5d1.vert.spv | Bin 11024 -> 12992 bytes .../shaders/spv/1f95f31b.frag.spv | Bin 88828 -> 88864 bytes .../shaders/spv/1f95f31b.vert.spv | Bin 7988 -> 8040 bytes .../shaders/spv/1fde9cd2.frag.spv | Bin 41440 -> 41492 bytes .../shaders/spv/1fde9cd2.vert.spv | Bin 5144 -> 5196 bytes .../shaders/spv/254e7887.frag.spv | Bin 38720 -> 38772 bytes .../shaders/spv/254e7887.vert.spv | Bin 9972 -> 10024 bytes .../shaders/spv/2e2908c8.frag.spv | Bin 90728 -> 90764 bytes .../shaders/spv/2e2908c8.vert.spv | Bin 7988 -> 8040 bytes .../shaders/spv/2ee6d2e3.frag.spv | Bin 4940 -> 4992 bytes .../shaders/spv/2ee6d2e3.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/3733fc38.frag.spv | Bin 46544 -> 46596 bytes .../shaders/spv/3733fc38.vert.spv | Bin 4400 -> 4452 bytes .../shaders/spv/3b183d8f.frag.spv | Bin 43760 -> 43812 bytes .../shaders/spv/3b183d8f.vert.spv | Bin 11024 -> 12992 bytes .../shaders/spv/3e4b62f9.frag.spv | Bin 5164 -> 5216 bytes .../shaders/spv/3e4b62f9.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/428caa3a.frag.spv | Bin 18684 -> 18720 bytes .../shaders/spv/428caa3a.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/439a2253.frag.spv | Bin 4500 -> 4552 bytes .../shaders/spv/439a2253.vert.spv | Bin 9972 -> 10024 bytes .../shaders/spv/46e2325c.frag.spv | Bin 40628 -> 40680 bytes .../shaders/spv/46e2325c.vert.spv | Bin 2556 -> 2608 bytes .../shaders/spv/4a8e9f28.frag.spv | Bin 9020 -> 9072 bytes .../shaders/spv/4a8e9f28.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/4be7acd9.frag.spv | Bin 17292 -> 17344 bytes .../shaders/spv/4be7acd9.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/4cf96468.frag.spv | Bin 11688 -> 11740 bytes .../shaders/spv/4cf96468.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/4d4fa91b.frag.spv | Bin 4476 -> 4528 bytes .../shaders/spv/4d4fa91b.vert.spv | Bin 4300 -> 4352 bytes .../shaders/spv/4dda406a.frag.spv | Bin 44212 -> 44264 bytes .../shaders/spv/4dda406a.vert.spv | Bin 11024 -> 12992 bytes .../shaders/spv/512004a1.frag.spv | Bin 2988 -> 3040 bytes .../shaders/spv/512004a1.vert.spv | Bin 10968 -> 12936 bytes .../shaders/spv/5161e6ba.frag.spv | Bin 7376 -> 7428 bytes .../shaders/spv/5161e6ba.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/5e4589a1.frag.spv | Bin 103492 -> 103528 bytes .../shaders/spv/5e4589a1.vert.spv | Bin 7988 -> 8040 bytes .../shaders/spv/638623c2.frag.spv | Bin 11704 -> 11756 bytes .../shaders/spv/638623c2.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/676965ab.frag.spv | Bin 13456 -> 13508 bytes .../shaders/spv/676965ab.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/725523d9.frag.spv | Bin 8696 -> 8748 bytes .../shaders/spv/725523d9.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/74258189.frag.spv | Bin 18136 -> 18188 bytes .../shaders/spv/74258189.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/79b77ed9.frag.spv | Bin 43832 -> 43884 bytes .../shaders/spv/79b77ed9.vert.spv | Bin 11312 -> 13280 bytes .../shaders/spv/7ed7de52.frag.spv | Bin 48064 -> 48116 bytes .../shaders/spv/7ed7de52.vert.spv | Bin 23644 -> 25008 bytes .../shaders/spv/7f096322.frag.spv | Bin 48064 -> 48116 bytes .../shaders/spv/7f096322.vert.spv | Bin 23976 -> 25340 bytes .../shaders/spv/858f5089.frag.spv | Bin 8872 -> 8924 bytes .../shaders/spv/858f5089.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/86f427b0.frag.spv | Bin 6552 -> 6604 bytes .../shaders/spv/86f427b0.vert.spv | Bin 9628 -> 9680 bytes .../shaders/spv/9068df1c.frag.spv | Bin 3292 -> 3344 bytes .../shaders/spv/9068df1c.vert.spv | Bin 5760 -> 5812 bytes .../shaders/spv/9d3e2ddd.frag.spv | Bin 9196 -> 9248 bytes .../shaders/spv/9d3e2ddd.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/9dce3246.frag.spv | Bin 4500 -> 4552 bytes .../shaders/spv/9dce3246.vert.spv | Bin 9628 -> 9680 bytes .../shaders/spv/a0f2dbac.frag.spv | Bin 103492 -> 103528 bytes .../shaders/spv/a0f2dbac.vert.spv | Bin 7988 -> 8040 bytes .../shaders/spv/a45356c7.frag.spv | Bin 8060 -> 8112 bytes .../shaders/spv/a45356c7.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/a4683767.frag.spv | Bin 11240 -> 11292 bytes .../shaders/spv/a4683767.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/a5ad521e.frag.spv | Bin 42112 -> 42164 bytes .../shaders/spv/a5ad521e.vert.spv | Bin 5144 -> 5196 bytes .../shaders/spv/a64015f2.frag.spv | Bin 3588 -> 3640 bytes .../shaders/spv/a64015f2.vert.spv | Bin 5072 -> 5124 bytes .../shaders/spv/b4587cd4.frag.spv | Bin 50884 -> 50936 bytes .../shaders/spv/b4587cd4.vert.spv | Bin 11368 -> 13336 bytes .../shaders/spv/b79a1f4e.frag.spv | Bin 2988 -> 3040 bytes .../shaders/spv/b79a1f4e.vert.spv | Bin 5072 -> 5124 bytes .../shaders/spv/b964507f.frag.spv | Bin 3588 -> 3640 bytes .../shaders/spv/b964507f.vert.spv | Bin 10968 -> 12936 bytes .../shaders/spv/b9fc2041.frag.spv | Bin 41440 -> 41492 bytes .../shaders/spv/b9fc2041.vert.spv | Bin 11024 -> 12992 bytes .../shaders/spv/bf3151c8.frag.spv | Bin 19280 -> 19332 bytes .../shaders/spv/bf3151c8.vert.spv | Bin 7988 -> 8040 bytes .../shaders/spv/bfa15301.frag.spv | Bin 4240 -> 4292 bytes .../shaders/spv/bfa15301.vert.spv | Bin 11024 -> 12992 bytes .../shaders/spv/c57b4f14.frag.spv | Bin 5428 -> 5480 bytes .../shaders/spv/c57b4f14.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/d48d6a48.frag.spv | Bin 48064 -> 48116 bytes .../shaders/spv/d48d6a48.vert.spv | Bin 27260 -> 27312 bytes .../shaders/spv/e18e40c9.frag.spv | Bin 8732 -> 8784 bytes .../shaders/spv/e18e40c9.vert.spv | Bin 1612 -> 1664 bytes .../shaders/spv/e86f78e8.frag.spv | Bin 6720 -> 6772 bytes .../shaders/spv/e86f78e8.vert.spv | Bin 2028 -> 2080 bytes .../shaders/spv/e9b6300c.frag.spv | Bin 3604 -> 3656 bytes .../shaders/spv/e9b6300c.vert.spv | Bin 5760 -> 5812 bytes .../shaders/spv/f2952361.frag.spv | Bin 105360 -> 105396 bytes .../shaders/spv/f2952361.vert.spv | Bin 7988 -> 8040 bytes .../shaders/spv/f34dce08.frag.spv | Bin 2988 -> 3040 bytes .../shaders/spv/f34dce08.vert.spv | Bin 9572 -> 9624 bytes .../shaders/spv/f4382918.frag.spv | Bin 88828 -> 88864 bytes .../shaders/spv/f4382918.vert.spv | Bin 7988 -> 8040 bytes .../shaders/spv/f4a2b586.frag.spv | Bin 48064 -> 48116 bytes .../shaders/spv/f4a2b586.vert.spv | Bin 12040 -> 14008 bytes packages/ludic.render3d/shaders/terrain.frag | 5 ++ packages/ludic.render3d/shaders/wind.glsl | 44 ++++++++++++++++++ packages/ludic.render3d/terrain.ludic | 1 + tools/ludic-cli/shaders.ludic | 8 ++-- 116 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 changes/one-wind.md create mode 100644 packages/ludic.render3d/shaders/wind.glsl diff --git a/changes/one-wind.md b/changes/one-wind.md new file mode 100644 index 00000000..2c718318 --- /dev/null +++ b/changes/one-wind.md @@ -0,0 +1,25 @@ +bump: minor +type: feat +One wind, and everything in the valley is moved by it. + +The grass had a gust built from two sines and the trees had NO gust term at all - just a +per-instance wobble - so the meadow rippled and the canopy above it swayed to an unrelated +rhythm and nothing ever crossed the valley. A real gust is a WAVE: you watch it come over +the grass, it reaches you, and it goes on into the trees behind you. + +wind.glsl is prepended to EVERY stage, so the grass's vertex shader, the crown's vertex +shader and the water's fragment shader read the same field at the same world position and +cannot drift apart. No uniforms are declared in it on purpose - u_time and u_wind already +exist in several of those files and redeclaring them is a compile error in whichever stage +includes both - so the caller passes what it already has. + +Two numbers mattered. The gust's WAVELENGTH has to fit inside a view or nothing is ever +seen to travel: the first cut was 209 m crest to crest, longer than the meadow you can see, +so the whole frame sat in one phase and read as everything breathing together. It is 74 m +now and a front crosses a normal view in a couple of seconds. And `stiff` lets one field +move a blade a long way and a bole hardly at all. + +R3D_DEBUG_WIND=1 paints the field on the ground, which is the only way to SEE a gust in a +still: two shots a moment apart show the fronts and show them moving. + +Measured: no cost. 400 frames, GL 6.9 s, VK 7.2 s. diff --git a/packages/ludic.render3d/programs.ludic b/packages/ludic.render3d/programs.ludic index d3ffe198..665c7104 100644 --- a/packages/ludic.render3d/programs.ludic +++ b/packages/ludic.render3d/programs.ludic @@ -17,6 +17,7 @@ var r3d_root_found: bool = false var r3d_global_defs: string = "" var r3d_noise_src: string = null var r3d_lighting_src: string = null +var r3d_wind_src: string = null function r3d_set_paths(root: string, assets: string) -> void { r3d_root = root; r3d_assets = assets } @@ -51,7 +52,11 @@ function r3d_shader_file(name: string) -> string { function r3d_shader_src(name: string, defines: string, is_frag: bool) -> string { if r3d_noise_src == null { r3d_noise_src = r3d_shader_file("noise.glsl") } if r3d_lighting_src == null { r3d_lighting_src = r3d_shader_file("lighting.glsl") } - var s = "#version 410 core\n" + r3d_global_defs + defines + # the wind goes to BOTH stages: the grass and the crowns move in the vertex shader, the water + # ripples in the fragment one, and they have to be reading the same field or the meadow and + # the lake disagree about the weather + if r3d_wind_src == null { r3d_wind_src = r3d_shader_file("wind.glsl") } + var s = "#version 410 core\n" + r3d_global_defs + defines + r3d_wind_src if is_frag { s = s + r3d_noise_src + r3d_lighting_src } return s + r3d_shader_file(name) } diff --git a/packages/ludic.render3d/shaders/grass.vert b/packages/ludic.render3d/shaders/grass.vert index d9ac3c1a..3a7132ff 100644 --- a/packages/ludic.render3d/shaders/grass.vert +++ b/packages/ludic.render3d/shaders/grass.vert @@ -148,9 +148,11 @@ void main() { if (far) { bw = max(bw, spacing * 0.35); tall = min(tall, spacing * 0.3); } vec3 p = vec3(a_pos.x * bw, a_pos.y * tall, a_pos.z * tall * (0.6 + 0.8 * h4)); vec3 n = vec3(0.0, 0.3, 1.0); - float gust = sin(xz.x * 0.09 + u_time * 1.1) * 0.5 + sin(xz.y * 0.13 - u_time * 0.8 + xz.x * 0.05) * 0.5; + // The shared field (wind.glsl), so the gust that crosses this meadow is the same gust that + // reaches the trees behind it a moment later. The two sines that used to live here were a + // standing wobble: the grass moved, but nothing ever travelled. float ph = u_time * 1.7 + seed * 6.2831 + xz.x * 0.05 + xz.y * 0.07; - float sway = (sin(ph) * 0.6 + sin(ph * 2.3 + 1.0) * 0.4 + gust) * u_wind; + float sway = windSway(xz, u_time, ph, 0.0) * u_wind; float hgt = max(p.y, 0.0); p.x += sway * hgt * hgt * 0.35; p.z += sway * hgt * hgt * 0.15 * cos(ph * 0.7); diff --git a/packages/ludic.render3d/shaders/model.vert b/packages/ludic.render3d/shaders/model.vert index e0bf27b8..8f121ca6 100644 --- a/packages/ludic.render3d/shaders/model.vert +++ b/packages/ludic.render3d/shaders/model.vert @@ -76,7 +76,11 @@ void main() { // sway grows with height above the base; gust phase from the instance seed float hgt = max(p.y, 0.0); float ph = u_time * 1.7 + i_rot.z * 6.2831 + i_pos.x * 0.05 + i_pos.z * 0.07; - float sway = (sin(ph) * 0.6 + sin(ph * 2.3 + 1.0) * 0.4) * u_wind * i_rot.w; + // A crown had NO gust at all - only this per-instance wobble - so the canopy swayed to a + // rhythm of its own while the meadow under it rippled to another. It is the same field now, + // read at the tree's own place in the world, so a gust crosses the grass and goes on into + // the trees. `stiff` is 0.35 because a bole resists what a blade cannot. + float sway = windSway(i_pos.xz, u_time, ph, 0.35) * u_wind * i_rot.w; p.x += sway * hgt * hgt * 0.35; p.z += sway * hgt * hgt * 0.15 * cos(ph * 0.7); #endif diff --git a/packages/ludic.render3d/shaders/spv/01089da8.frag.spv b/packages/ludic.render3d/shaders/spv/01089da8.frag.spv index f3afbb868ea1af5e2045b94af0f67ecf2d0eb8e5..57af6fcd3a0d5dd1b06a2fc43cef708ba165b513 100644 GIT binary patch delta 164 zcmaEGm}$xpCSGPHWp)MzMh0#M4u+c(dGi@>Y^#J{n5s&qM@uQreglwr66B))0H*u(f&f&7?$CVL$QRtBJ5 f4A+2skQ$J#J{?Es&qM@q&1NF1}FrQ1_2P?AIQGCIZ|tPIRIyo7X1JK diff --git a/packages/ludic.render3d/shaders/spv/01089da8.vert.spv b/packages/ludic.render3d/shaders/spv/01089da8.vert.spv index ec6859ea29a99146e10a1b70d6bb8d061a31d756..96c9159854ebb1df79f89912ab06d7c4e85c7157 100644 GIT binary patch delta 184 zcmbQ^eZiZTnMs+Qfq{{Mn}LI2;zZth)_z6?h6x)dva?8nSm`pl~nyZkAYWAd?L!)D4vWrV(Qgcdgw2IK+L8eI(;n>r delta 132 zcmccMJ;$4unMs+Qfq{{Mn}LI&Zz69!YY!s>L+{3k>@1QXR(ei+SZYy8YK3QBN@@iI z11keNL+|E|ET@?SLDJj|3=CR8?9RXf6z*l;&7!FQWOf6kfQUg9h^?V~kaCb1jNiL? IDUY@!03XK~e*gdg diff --git a/packages/ludic.render3d/shaders/spv/1b654972.frag.spv b/packages/ludic.render3d/shaders/spv/1b654972.frag.spv index ce47f9ca4bf58c44914c285c9ae039694f1f4f40..70b6b282c012a8f528f7c44484b8ccc7f2dc5e29 100644 GIT binary patch literal 4800 zcmZvfTXPgu5XXls2|i?#N_k-Ajb>12#|{jvkxBVpC9ZhS-eh+*<9>a+EYtY!E#wniOr8EjnEy zt|ZSv@QV%(3-!++k4m?kRby>VkDryWx01`HV5b-)Z1JCkl`PHLPUfx^WbNorVH?)6 zW*4~>%u5#QbPG<`jc+=6B)I0}q}`6HNz|+q_YVh44sW&NT9S6-{GN)#mfF=CzJ`Ok zlRJ&5ntd)-$Y_vhuczU;xEA%&?v-Xz%i7Cl)2wnMP)64|J+{5D5_Kw3H4ax=$fhH& z16`+;Cf&Y{{0(&Ns9BHuI;t|z>G#E{bR+IQa@`9%y=GWV+Tsl#?&Enb4Ie3dEr+eF zl$%VZ*;?2l%`otnHZlSH551t@mL{#xwW-~=(czs|TnUxR)YZ<;Jeuon+zQ(nwYM{y9A0l{y=FCx zQp()djjhs!jij&J?CTnd3&ebGS*4>HERM&VE?G*85Dnkz@M?4`B^v|#Z4R#`?Kn@q z-LZXu=f#q2zIHfWBhoK&1+z2m&4dpB-Sw)6mtSm*Vx$;=SW``EZ-mSJne zgUyOD48LG^Jgih;_dSf#0|+vQ=*6|lV?##{j_ zdl>H$?4XA+N5CdLtXyD|9=5;0ri9V=%nmS?$p>=L$;=b<^bdMuU(akoPv4+NHvQIM zNdKYdFQokK?hr?RmL08ie(?>qQ|Ivm&$+T>dT)&g{A3~1dtloo({p7J>u@2{bLcrw zufgLJJv%+5HDfZp5(KxWv8VRL!+qwDI%WA87M_vqxSQeek@CkrDm z;z4G{v(V3JCl3}6`UMfoe)q@X|Cm_p=W$W;;x|JxlbVU-?-LO=;C2UdpGC}}c7Bt^ zxOyk%>(XOKOp$ihbrJrMmqaY{U&%%1zbfAR;~Qexj(>f21MKi$L#YLZKjb=q)-K5n z?c{@+S`8BM%;3F3`Nm)ahI~Ui_nU0r7?bTAgG?{;KN)2a@$FM5@m;|uemILgePD#| zhtc|n*jWGAS%1d|XUrFI7;iiIX$j|D5*PVFW`2NKPw+SRZ(|FyCU+!%d-v|N$^5%a!>N1#j)v0-AGI;BF?BMSsfv8SSiplq+;ki;jq>13Z2vv_B_erf~11X3fyY&zGTjUTW+s9UjMi~fA1eS{=pi2SYUn)J`%=x?9t=jYJkqK0k!b^pLg)D IvUNiAA8f_8w*UYD literal 4748 zcmZveO>-1g6o#7&2|*$O`4+?pK?R8z6%YkNKs1S>1QAg|JDr)HnU>DUuy1D0l&$;KGKIh&ul!hiZ1i`vsQ!pB= z2Km?;42cQEjktC0;+2a>JKgHhW5=hl*c_CcAvWXMw_YoAB}$qoHfcVuIi?-b!LQmlEY{xx9+hq-tHxTK9zUyL&xJLty}N`#*y2A6D_NSg9peyo-)hITB<;reIZKXPZdYsg8V;%s zcN$SO`%$K9O+t-o5fvz1j>v3O4RR%hJUz|!e;?5)2y|B}3hSj7k+4$i;pXbu}k;2zX*vdN2 zKL0N2*bDnP3DbBrPGw-RQ$zAz536yrlXP#py&GK&8~eIOoYWiLuok6hR#PSi@jTYI zS&llYgvG;M(6^;YE5v30yfMdjT5%;*DpOZG+w*v?yLmfoXVl(e-0b*zJL@&8VU#Wl z_I2ZHbYUau>$dp1M&bf7pIg`HxC|D@6Hb>br$vayZ*zP#x}B1Zf&F&J*OGReC*RK4 zG2ruJ37fB-PS=R^MXq4B$Gw@*@&DVid$7k{3iGvRz*n*+_bb0cPddKa3A1)m*Hbrs zuknp2rI;gn1-yZM#%I{(_x>rz=|NOtyZwFLey6LXS+5$}i!xtN=f08^cPDaR<-%7z zOqwcwmp5uLP4souxD$01Q7LfENj&eC`_K!uqc{kzmvfykzn;OI`Uv-qxENsij*q7b z%$r3|-{EZDqTvIQ8DM%3dftg)Ur#SW&wE7=_Vx56^t@a2U|+u^jDAQHJ=oXNuh8?p z(Sv<`z0l1T`bL4d``9OI@aGTVlB+vs&&!rOz#!In{WVMv!Jp4f3NwsbCmC*5f^qnT zyX$eKf_va`;QVY&UWMH)kE2h)-SIg36Wm>oBbRXBdmQ};?gx*f55fK9ar7X#Up$Wf19#u!=sj@1 zc^o|l?t#bAZ{Ys$IQk46kHYFfkAWNWIQk3R7LTL1!0q-p`U>1WkE5@^l|7Dk3U|=s z=p%54Jg!`DQyw=_aMR+r_w)`phT#J_beMjEp8JCy?Ca?*=(#uO!KU994CxZL1tfBn7g-56aG|zxqEOsgt>ENO~#P|bLY^rpSy;PPxP$Z zA&s+!xhp|%X9jy}PduDw{-`sA_P4hrd@O;}3g_>qLR~DB9NwJwE(lc&~Q8E(La+cd9UgBOWk4o`HT& zD|xVZ&@X5*%>H@~1J1u8nfUCywJYa;Dm`}i|4b_b4u4>JKEwPkITSemk!16a???Gx z7LOhND_R+F_yhBsz}PLUpIi5B)W`B!lT1I|Cw*NjHgMpER?at^tikqsfu4JLQ)^k1 zIQQ#T@Ed_o{IC~$YHAbTkD41FVPki}_WCP6*kitk!(>~@&x&~77;%vwFuefI?sX>l z_wj{U!!6_G8N)JM%@!{+ZLlaO9gaU)IXtOmr`4zNLvDWIOYiWX`-K zZ``lrns7`8wc-9)o?n%WJ$=$*IVl+)Oz%6RdAh*lZ$^`xT~mJe&a;}>z+W!%J}ViX z`)Tz#CmG+fnr3%iGBGlYdqXlDu^M-w;D~)ux0!R_)MP*Q=<#p4Mn|s68#y9Z_C0S) zUMMi%^NyzfJr{+sfydvxRyfP?yORAJzb6dGWLS>P{*pL+SWOn449X=lf4cDD+4Ex?Fv-`5?27~aRbtf XKr95r)=)mk3Xm9#@3Fa+HJu3n)WH;N delta 114 zcmZ1=@P?n4nMs+Qfq{{Mn}LJDZ6a?xs|y1IgX_k^Y(_?x$#)sW8C^Gj1(JdwVQwJS r0%CUt76#YNvds2OnhHRsGf;>Th=qXI8p;PL2Z_P>uA6tVrZWKm?!6Ca diff --git a/packages/ludic.render3d/shaders/spv/1ce5c5d1.frag.spv b/packages/ludic.render3d/shaders/spv/1ce5c5d1.frag.spv index ab98010678593bf2757b3cef8336aba569ef8bb2..24306b426cfebff02155ad5e3eeb1bd8b56edc41 100644 GIT binary patch delta 178 zcmca`pQ+^m6E8E9GCKnUBLg=B2SfEl-h9TYjkWn=qLo0w()g0%_>9!d^o$Y)Rt6S^ zs?Chz{;Y~1DMbbb1}-3W2MUAuN*(TDu4t?4M^M?sOJq(3}hq-fcXAEL#j5<)HZJc0A1i5_y7O^ delta 126 zcmZp9z;xk06E8E9GCKnUBLg=B2Sdd~-h9ULjkWn=qGdqA()g0%_>9!d^o$Y)Rt6S^ z^39Cm{;Y~1DMbbb1}-3W2MUAuN9gAA FEdWkZ7U2K@ diff --git a/packages/ludic.render3d/shaders/spv/1ce5c5d1.vert.spv b/packages/ludic.render3d/shaders/spv/1ce5c5d1.vert.spv index 9b3f16fa25e66632bbea7bca4c09cb70e3d083bb..289c8479bfc9146b211d0ed028c8764386933e3c 100644 GIT binary patch literal 12992 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 literal 11024 zcmZXZ34oS$oyT7pKopb|FVYk|3dKytGek$!JR(8KBU4{SW`I}cpt(?!98$`xyeqW} z%T6;h+chw2Gy+XbJ9fABba&hPKH84mYCoUneZIr9&pyo0|M&a-9sm28cV0Ut9ky$u zu}fomV_M@!yEKYtuf`;lM#J`a+Ubp{1wVJm@+HR%4R;@N!imQkxM!oortr;d%qs9? z{@d5p>X&TBwqo0`9oS3Qg%o}SdlY*NdmMWL+l>7H`ytlBze(nRr!*$>Z)eRZjB_S@ zO;2m}n&IVr0|Ucr<_#Tx+``dS$1g;mLhc^4!#&p*cu(-isQOgq(`fXLbhlPESNAp@ z+#oKCX=~5HD!si^VLSF;{?x%J{3r zW&AbZfl_zD21@-&V=(9L8n&8)0~yoP@RfzHqwy^5+5%55*14;>b|87Kd251qG+uz) zhc(@cu4eyWU&-B<(Mlg~=$h5T#n>l<*RC;dT4O4hl{>p4i+cxF zUe{oCSz-J>BhArP&$^wO@dp zR)6=-{3(UDvTLxrNl!cVsXKK>y;J9qQ)Bhuz=&0L>eC8+c&Irr*jml8&G>eUzNV|! zGZ20ELhl>s?&)pXf%`kHoVROxFnDNP*A2MvO)k#+Xmia-Z*M#HGW;vqK=W3B2YY%8 z+$|n#=M00}8SS`@a3^WbU4?HHJf*P-%vudK+m``la^oSiwOxZ<*<0`0Xmee0F!X!x zMk{;o9UN_XL)v|NAG<2tyE)n%>gi$CyhBgIIRndj1~2Uy^pf$oHtIh528LS0tpV3^ z*Fx7-=&krv z=l6FzqAAq&J%WCIf4gSsX*AAd4ZKqaW1cJd){@f{+`FUS{`GrbniX zHvQfO(q;?}5Cd@OKpF+F0kFvp*f~R)BKdR)OZTWm`79+OCTq>9+-Vfyd%)w?ib}P<;-2SUi z_<_W`Pww9w`g4DL)b@wFrsi8)zkM64K9~8=pw(}lzI}<=mv#TC4efdo#cMj{p&cS}Ir+*A{ zypHcyT7B+8`r8QhG5_nd#u~S<8t;Mj-~&II*z>*M^JYHZ8UKFp7k4aK6n-H5 z$Sd!h;B$-o*%SGP!xt==HIYBB$lr0g`Hp8k+&QP-$wmAVh2L>4hCleg>)pz!ZlbTqw< zQ(!&Z^XT|&GoRbxo~!VC;of7%dmq@n$aoyz{b=4>$8Wm{?vrsn48QZ)pPgp@7s1YL z95Y_-dsQv`(F*s>`Cip;{#U^K6#W}7_dTm7cl~_N8h;S{cfqdh7MHZTa`%{1oTIdUD^vYT>?v0m*J^rzo#==HDiCxY)-+Pk2U=p%g1;7$;5d!{JTo*JAO~hdHR{g zHBs~LD9>KFe@j*Qp*4O)jnAv`Q)>Kz8uxFkYJLCCs`9IA{F)l?FS+aL9oYwSj@@wU z>|biDS(5|6vrEl=8z9De^y*S~EuFvIdioB+T&M8YfQ@mF^!s_j81-ePHV5pUX}6Tx zT(GfoF#B;`)l&B`u-XiE&bo(VY-xe@nd924C+D@`YR>E6=C}^}%yECzlXDc_>181=+lSc_Q-H%>icSq83;!QSbtMK`#<7CmUj=}X=!u;UD04R&m~ zGi$)csAnuKu(kB1ziYvVl$N;b;Ku4p{a)}aEcN@q#;H56YiQLHKLD=IYb`wUN7NOTWWlW7Jb;1Z*vRnb#<|KCg9X#_CJ`>%rA|-2gXE-FfxXsu@3x z_C{`dKX4XVDr>3=QrK0wC};}Pv0bL zBX$w}+Q)k_{XXgEHn3-)I+pjr)xGED-Hw^7o;kfAT%FSg;Lf{R=Yw$d^mPZgKBqg; z)HA2Mz~-rEPIrUtPhWjb_n_(bNk8|3-T&%X?t`mmP9FlBtG=O}=ZC@0RbOg-1nl~Z zVcCcK!Ro2?0N7mhtj~ks>iT>X?%bl0x0tj{OG=Ba0WHi7L= zUwwTZLfeG-q@PcL>wErbH1*8sVX(RCnbT*$)j53@Uf=W2p{b{@&zCV{w3*Wv!0MUP z7s2MKXHJiR?N48QPG3UP?~{HW1=sid%V_GE(_>(B)i;!T{uQuu)t6e2gRM1&Wz1g% ztEbizU~|<|>uX@og1+A{YI#13JBPh6pAO8=+h!m3OC;Gva9(UD||ZsyK4NQlDno`@IQrZ#;WK48>Q|$ z)A`F2|4p#*V_5d!TVQqLT_3r=aoX=-Te0Ln2i}Hl$CCd%Sl!Qj^M^ACt&OR7)#6_g4I*!kHF@sZz%7W9{y)w`@fle zm`eK!rj{Ci4zADZFVNI8p1%aYf~lwOPr=po`75|}s`L75xO(dR4cI*O%d=bypV{rMNTb*l6DSGaoW z{2SOj^~~en!PeK8wfzsUwZ^dY_n%<(@SlOJ`}1FLwbb}IxIV96ps8m(zXY47p1QvR zSJ&si;q`g_51M-F{2FYYdgk>Tu=Vw2e|`&gzRpFz`(thOjC&W}FP?`nEMuC4rapr= zm1nU-PCF0Nw~^Lbiu$azJMDDL?>GHUGqq-vdd9vdTx}1`ye-t43EoUw-OE>@sV8r5 zu$te0X3n#~*3*|-`+&Dmt9rinMN?0${lRK}cbZxUfUT!5wPu5@RUOx>(bQAxAh4R> zyQbD_z}C~}I!&fk%bFYlR`dG_*LMz>pW-utzSKSxtZy!s+{3`;CgupR+TmFGe=S)3 zNNT2!*TMNI`p}>JBfHz|B=R&%J#E*uCA3 zCGS`?_2eA~Hdo#C@^`FS;*STbg)aa*ndF}UHby-$CxWXnC&7(VPu?kD^^-BjyPlL& z!QO}J`FSInde&zlSk3(8od!;xbC4UC@hk#Y=Wsf_I=(ZE#nhA2S&KOnZk&4Na28m7 zF_yfu!IQDXya}v!4wmz9E|{O<`#AlHJr8V6{h8bO;QH^33((ZFCT|9-nV-BR;N-a` za^u7o(t19P^?WVEJYP$(%;Ta`-$KlC@LMspi?N?m<5F6mU-3Ir-zAuup9#gOeL1*Z z`)z3I#&}Mz0DIS~=k)Dp>RFpB!RDz)yBe&16_)pIv+(oTw``rSpA*%c+c^DnfnA&M zYv9KC-HHB{U}MzHUqP#u_#Uv@Qr^+K6Tb?qruj_5ve&E8low;hWnI>Q>+8}&Q_s3w z3$Cxrb!h5YgI=(C>e2ea>U~&#kE{jrQ~Vy$KY;n&!c??(fE}kX&bOOZEoWg6tTuyh z0*oI5^HY4cs?Xm^o~N8G{m#KVJpy*Es&{%6uAZ26Wy~1y>GOIt^~~u8u-YNSB=1JJ zwX44)-U(OFdAJE|f9C7kQ10=&!1~r>?$tPTZwB*Id=IJL`3%#lXYa?r{vHqC05>N6 zy&LRZkGW>nz6Fh+;(KLlm}hMIz7@<*(YLYoZ9nS2PeJ1a1xWjQ;_!dG})( z|AS!loU4z5FUHjKchASb>RP^k`#9J>^d;^SVCSv5rjF~AXvXSuP4A*r%eX%UR@3(o zt^8EZ-&Arx4W3E6iB_L;Q~wND-@}-5^Im-x?B0)IncL^k)E$d?p9h<(p1d!B-DmS0 zgWNdJSoX=*n&ZTL32eNvkI>5F`!d)ws_#*-JoEf2_;F0%W3+O|;QRh-;QD9I-$7G1 z{s~&S@lVly19Km@VAh{P`!uGWm~VoO*^l~(`4(LL9_pAgj+v*PIXnY)e))d!S+JT< zv~QQ1axWa8GwKl2qQP&)U9VT z1W73Zg@6=;I|B;?h_3`v0|X#`Bvf7q#^2m&;xD184U}R73IzkDWBQrwb$})UEoBG+ z@)vVK#3dOx8A2!D^-(qq1B!+Mu>w$6IFJSbkeD@;53&>lK>WEtIxWa8GwKl2*Wqu)U9VT z1W73Zg@6=;I|B;?h_3`v0|X#`I8ALwy-f^8x^)%^9iy diff --git a/packages/ludic.render3d/shaders/spv/1f95f31b.vert.spv b/packages/ludic.render3d/shaders/spv/1f95f31b.vert.spv index 7051758fe160bee276d12aeb800f612c5c42e0e2..c19cd525b900043bd23915d8fdf59c40c651a077 100644 GIT binary patch delta 166 zcmdmD_ri{snMs+Qfq{{Mn}LHNY$9(wYX~C)L+HjreP+gx$qSjq8ACVkWPZ&k2omOI zU|`S!Vs{1>hS1GhS=TeiY6F>UK%oGj^f!$ddl)|u$dBn~ve#i?W#9tJ2LbsYH6U>X dpq^kL4MYs0Kx_@=gRB6F!T6z@dpVbj0sz@j7f}EJ delta 114 zcmaE1x5bW^nMs+Qfq{{Mn}LHNcp`5+Yak;7L(s-TeP+hM$qSjq8G|hM>(`S=TdbDgc=QKq(+%5CvjuC?BL8BnIOLZ9d4kToeF&ni2{C diff --git a/packages/ludic.render3d/shaders/spv/1fde9cd2.frag.spv b/packages/ludic.render3d/shaders/spv/1fde9cd2.frag.spv index f3afbb868ea1af5e2045b94af0f67ecf2d0eb8e5..57af6fcd3a0d5dd1b06a2fc43cef708ba165b513 100644 GIT binary patch delta 164 zcmaEGm}$xpCSGPHWp)MzMh0#M4u+c(dGi@>Y^#J{n5s&qM@uQreglwr66B))0H*u(f&f&7?$CVL$QRtBJ5 f4A+2skQ$J#J{?Es&qM@q&1NF1}FrQ1_2P?AIQGCIZ|tPIRIyo7X1JK diff --git a/packages/ludic.render3d/shaders/spv/1fde9cd2.vert.spv b/packages/ludic.render3d/shaders/spv/1fde9cd2.vert.spv index fb69f940cef95ba2d447247495d56d1880ef1da5..66c22c3a44ba9f40b5b1bfa69990382214741439 100644 GIT binary patch delta 166 zcmbQCaYloenMs+Qfq{{Mn}LJj@I>Bn)`JWT42L#$1~V}poP3u_obk}+uT1lq1VO^w zK&%DC?hGsphc+)|ozEPr4PH6#!)z;(^3BjTn0vKLN;(>1VRn0lER`QienzAEX8(F3G^jkTm(InzCauke39+ n3P4j*fHVkz#H^uwkfT5V#Ls4B06U5i%6A4b(l=|Wix&U@r354| delta 224 zcmeyej_JTUCSGPHWp)MzMh0#M4u;f;yxEM&8!JBxsV1>8FqFm@XC$WNmooqXD+3Ed zGEl56z9_#0%1_xmQP`N(5u{WRD8vE8?m%TAz7miP0w6v}n;ekM0_CSb)ic5Pn^`4y z^Rh}Za5BVC{;8(ym;h7|55x*UEr~!H1VCceP(H{45CHMBSsB0igYoBY JKFX6U1psv+8U+9V diff --git a/packages/ludic.render3d/shaders/spv/2e2908c8.frag.spv b/packages/ludic.render3d/shaders/spv/2e2908c8.frag.spv index d08281d2698e856374ab03fa22a332fe24b65948..5b723d7554934f2655d25b8f356f2bc93fb17300 100644 GIT binary patch delta 211 zcmaEHgtg}=D=#yXGCKnUBLg=B2g9O`ywCMS7w|DKl*SilB&Ot-GXMcA5H8%zsb9}# z2$E6+3IQnwcLo*)5MK$T1_(g>g;04R7=QCl(`pG#ZJ-nzP-r$#I;Nk=UI%C*&{Bpu zK>lJbh`1yJC&S#ymVU~H^MImrfmi{kYd(+$0g#wAln=5L1VH?`Kzd`A~Tw7=QCl(`pG;Nd``a*^^`alnv(q70d==1)$=& eKpF%hS1GhS=TeiY6F>UK%oGj^f!$ddl)|u$dBn~ve#i?W#9tJ2LbsYH6U>X dpq^kL4MYs0Kx_@=gRB6F!T6z@dpVbj0sz@j7f}EJ delta 114 zcmaE1x5bW^nMs+Qfq{{Mn}LHNcp`5+Yak;7L(s-TeP+hM$qSjq8G|hM>(`S=TdbDgc=QKq(+%5CvjuC?BL8BnIOLZ9d4kToeF&ni2{C diff --git a/packages/ludic.render3d/shaders/spv/2ee6d2e3.frag.spv b/packages/ludic.render3d/shaders/spv/2ee6d2e3.frag.spv index 0240782cd2f0ecd65732ac2335babce63b370449..93fab39704b99517a71d8862b52ed35a9c07373f 100644 GIT binary patch delta 676 zcmYk2%TB^j5QY!5RlL+LbmPhkiAux=Py?tNLtMEuA%Q{*ts<9RbYTp>fiYd-)}@Jw z;Wc~%pTdnBH~#;jC7ot+`prKxXU=@>JniaAHa{;!Ml6Y(xO>qrGU4adyIN`qA;P-r zd8Xx>y_O9W8orK<4?Mf=b_3f(L=}#VH9f06&FMy`+G@d*QRMiJY4z`AwLgvdb;ou) zP9Uqp$)onCjCkP|T!EjXDR~=CBlBYFYKqf3hoGK~b#hwo#yTD=`;k-nnc%!^kc$(@ zsRY5d$mf!Cb;&TtrYQS1OH8U1J3v{YL;>G&9rq~ zVnsiCzQny-@J(c3yV4kA1({o+B^~%`8auer7r(m$eZ4Dks}OiH1JUPZtQ#Dy{V3Z^UEx->B{ zeGT8hM{(mhr6nCQnSOI-hPm^)_p@6vvO7y68CjKrjNVGu8U20pX`VGjWMV6=9alO1 zwg;3Per}W>YOkYuV^1Sv3dM=t(r#y7qk@ZEr8bDNs2TZ=J9vt^hx6RX_C3}0$5FQq zUvhuOv*TbqVjYi-=8;qSrEp&kD8vQiRDp1J z>dUcCPU|{6TKO=lC)ltEsR^f5(cmEFgTrzqI4u_&Ef6!CsB9zBm}4iIFQp}uqT7Qx z2^W?;JVVFC^=TJh%yOEKNMnxOWWJNO4`$~b{MTxnCwvcnpUvtC_rT9tl zGTef;+CU~7Q0OR7`kO|KJ&b=0$dBn~ve#i?WdJf6jspph8j!d(P){)<1JH;>-TV#! DOZ64q delta 69 zcmZp9!*t;_6E8E9GCKnUBLg=B2g9+Ayz=6VM>p$=^Ro&b1qv%NFfeceu{#3`!_m#Y UGTefk)<9-4BLk2-RX4u_0P|uFM*si- diff --git a/packages/ludic.render3d/shaders/spv/3733fc38.vert.spv b/packages/ludic.render3d/shaders/spv/3733fc38.vert.spv index 04572ebad278581bd274d6026f394358b601c170..81fee82670d8b15e35d28b402cb65658f8ccf80f 100644 GIT binary patch delta 166 zcmdm>^hAl5nMs+Qfq{{Mn}LI2{zTq<*0~G}4D&WN&SqkqJ6V=loN?Y}Q)YiAL69&v z5NiRkI|B>Dyv delta 114 zcmaE&v_XlNnMs+Qfq{{Mn}LI2&P3jP)>#Y;46`>j&SqkqHCdKfoN@MMQ)YiAL69&v t5NiRkI|B>D?9EeIqnR}ofXtadAx0n;17d3^AEX>42IJ4(?8_<60RXoe5|jV{ diff --git a/packages/ludic.render3d/shaders/spv/3b183d8f.frag.spv b/packages/ludic.render3d/shaders/spv/3b183d8f.frag.spv index 7862a9acb74f08a212d9c9d442fa6de70a29883b..ce385608daf316f81caff8bdd62496ec093bfafb 100644 GIT binary patch delta 336 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 literal 11024 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 diff --git a/packages/ludic.render3d/shaders/spv/3e4b62f9.vert.spv b/packages/ludic.render3d/shaders/spv/3e4b62f9.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)46m^ddmW$+yg>dHAb&R_MBEyv#u>;5xfujte2|+#K$3xz;rir-Qp%1ufFjp{ hSOKWxCR7$A2GRlIgIo;)FcUzoMCRYw%qsm|7XVmOIp6>Q delta 362 zcmZ25iSf@wMqXwnWp)MzMh0#M4u;zsdBwSGFEcSPl*VTk6(y!*CgvrlG5`T90}I0y zuy|5YN*ajI%5VeBFV09z$uEbfVP&{EIgv}4@z&;2u6&kykU@$-8D=1M2O0q4D}hu3 z0f-MW5F`(z;Cy6xkOd%lR;WCPk1T%^Di3r&SU-r5Brn8p3#xzvssQLNes*qEYoOiE zKq-)WKmf)Exd#L!88{iPPChE7?05|*autXbfI6;2WkF&f9Uwl)MIZn(0ptQ?{;kcL H(%*Ffd)qYg diff --git a/packages/ludic.render3d/shaders/spv/428caa3a.vert.spv b/packages/ludic.render3d/shaders/spv/428caa3a.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)4W|p6FiIEWS|-tP#F~YzEMJP!f*T25kpaV~!&E~aj{nAcp~qrp4QrrnHc+0A0!n&3kT zitkKZkGg5+YAdO0`O|4uy%FdJRy#em-LM+9t5Gcud&^+caSsDsdpS)yeI4gJ(B)C9 z5%+c6;y~AlZ^fx}V{Sd}q8qlmEuDET+4#{uU(M1i@AG4&ucdG~Ydia5U)*yy?4L=P z#=SU|fyKVY>FZe|ti`Q%(z)&Cu5~eR|J@K>Gfo=KPFRo9G$R8B@jTMES&Z7c35#=` zEtR-^2=C*i8Dm z4Zg0KxIk>*RU zOw^Ae*J^P)>L{Y&U_l&>TEV4vL(M1`f~yu>yG&0pBd%Wc!kg|)!R)UWw&PfZ?3^$; z##($|hWALOfyoQ@#diy)j)M8d!PHc88#^#H3_T4@{qpUpU94yR!2WvFGW2}c%m@2= zY8raJZ}ebaPt8S7EkO_V_0&7`)B*HhUw>5?-*f8d-zzcS4*1#%{Qd)Y*yYWTxbw0l zhiL5OynYR{HvW8$bEO%#N;2G>1mo}vch}?CC)|CH<1XQ*HNoZ*1Kga)u}`>pk0Um? z1&^a9!d>?`Y9U0ZanvrjUp$VQ1$W=$s8?{mc^q{Lj-<5vphm%sdmQx% zZiB~Bo8Y#49CZn9m&Z|;;3^)+cL%rEKt4L-ZJbpM+)&vs=c(UZsKU2#1Ll55P z=?_W9H$KsWsp)VQ*9($^;Lfb+sqyH+oEtTrX8W9TXfXe*@bCK*| zJ{jzF?+iZi!(8mi2kY$ZVV$#IX#>XAcz=Xvj`<=ElWpXDJ`&G&!u!YhfT<^NmIEJ4 z{&nKQoZ(M|zq)sC#&9V7>E`eH_`2|cg^8Idtw>CfI&-kQu5S0bD4AxsT0n>SHmEzC z8*#>^OzhZ$>m_$gw?(|%A&q?hQw(>AE%k=lX5URk^6nD9Dm`_C_lz0>=G=IXs1euX zg?YS1*uc+d1^mIClAij&+X6@3zz1>iw!r@&8@_4Y3pi@WAM(MwK>J(v=y*Heh#mPK z?H(BppPc1h^-1;d@@$`$%o)9|j*i&a8$5GZcfa~R^>0gjpyY_*pkx{`z(1=F$GXV2 z?v!NwepbfuoMbp#5B!(r*jz^Da(2_|oXsWO1bcYChiwa?G9AO00EEo%z_KrydgHVU6f)KPM!!pD(l~F}eoKXJ{jb5D} literal 4500 zcmZve%aRmD6o!kr0WvZmcR_3z6cB_FxhV<*;sA;;h=>=orlz~PyMmgoiM|XFF2olw z*kZVF>B?~F!i5ju!o3?F!JU`T2>&lDPj@m`$ty^_O{6Ou$y zm8_F5w%SyyVeJ$}KP%9v*f7SZbgQMSNzgs1xfj>6dcDN#u@v`~G)X@k?b3Y3tw-G6 zOL42c;P9Bsqmjom?V{D4Nvc_^fzPPRt%#F+KCKlpbsV`CajR%ABzeh=M6YSli<5r5 z8HclWJE>(!tD2T}qtRQAUu>uKEbpdm#T$v9;DnsfF@8 zpVpIJ-o4Sv>e~KXUQ};KdV!Trk8LlmCY@?hOXH#m;>Dul?8|fU&b_#QCvl!G zrMV0&_f<|`FB)+zZFRElJ?FdH<-q&*VsyF6aa&oz#( z=GkIQ$o_ugj_)j{)mT@VySFo+vc@{M@5Sw+8~ChsK8<$KYt<+h!G64nWxBYT^>yn) zT{Clu*tx0SUhHE^M=@9)PdQySpZgSz-{AOKaxdpL2KE~rU(ecUdHJ@-rU73*maxUz z>~zgUCvp#FK3fL-|9rL%bgn2Y*0up(En3u9Swl}dzT1h5cGgg9Fn+u7%_QeB$MmJ} z4eT(!z_zUWXB?*wqMBOu_jNm+u9_FUT5MmG#d@}kl`XiMC}UN8tVW!*^!Q!AQOk+` zQPx^5?Ic}gG#q^>jzO=8HTPn9_>JJ^O0MI}Q_P6#b4&3Zcc)-_-csC2Q#G;+zK^jN z-95!`z$Y|=&7R)HeijcL?lu3V!+Ys;O+(-eGcw^z|r5}9t0eB3HNotQIBxn z1RQ+~?)!kFhr#_AaP%*@p8}5F1@}w9(X-$l1>6?T{T6WaDeNdpdk=aP+<3szpWxO7 z9K8u{YrxT$;C2KYeF?4-aC~=gdjgI=1h+5XDxNzSaJxJ=C62nM_rNg>?=GRk^dt1t z3VLv;pA$w;-Jl1D`b0SF8&!|BeY7DO(m(w9A6nTvHfu%wRwP>#kGcg@`xX5q4>)9- zcBMAauaJbp@OH(cRdz*Th2)-W%u-X-#Zm zq6Z)LoaJ>yIEwC{F+DvVA29buPiNRUryUyTXFTRzE@;hp$eFQx=3Op|$Bz6jVWa`a zeqeqB7`8t>pF#Y~nk_!D9~b`}@z@dnie?5J@xWIhG`0%QYUXaJGdtfkt?92j#Pa)r z4IJ2hKMdRNhhh8u08=OLYpzJhb7!>2{bmr8IQU}E+nR8;#|d?~+y;!T@!<@QkHsPn zTieY2d?22h=eLae0n;1ctUf-{`qzm|(}q75{_5ew(}r&ef41?vKK?{_|E-DB2el(P zeJa5RJ9PH0vDOU3a}Jf5I!`3r8+p$AHMwICu6pjcUWigYoBY JKFX6U1psv+8U+9V diff --git a/packages/ludic.render3d/shaders/spv/46e2325c.frag.spv b/packages/ludic.render3d/shaders/spv/46e2325c.frag.spv index 218eff0a51d5cbaa4e3bb3553ec1d7e400668c88..77f7a592d3167b352fd037c15eaf4b84aafd7b65 100644 GIT binary patch delta 185 zcmdn8m+8e`CSGPHWp)MzMh0#M4u+i@dG`woZf9d)D2-1lN=aj2U~NSYgnwSd^2fdwc$mpPv)RvXCV01AZz@i&badl)|g$dBn~veyBc m!3ShVLe+r86@Yr8fHWfz3jwh;ln=53BnIQhY&K;(&I|xP{~CV) delta 132 zcmdlW@<*7LnMs+Qfq{{Mn}LHNY9eniYXk!WL*&NPenv?UD?KMZEVZa4wZbzmCAETq zft7)sA#yV>Q$3>~NSYgnwSd^2fdwc$mpPwFQvt{f2MRF)u@DejL-`=(ATby}a&soz Gab^H6))f)} diff --git a/packages/ludic.render3d/shaders/spv/4a8e9f28.frag.spv b/packages/ludic.render3d/shaders/spv/4a8e9f28.frag.spv index d48b6a529e541d9a647234789c2661f15520720d..f133b21f5f004965e73740c7e9c4fc36cce053be 100644 GIT binary patch delta 599 zcmYk2%}T>i5QQgc6Dy^(1x0kFX49JZ)B10;5rj$?eS?4~ZBbB^sJL*^wJR4{)n^c) zWa}&V1ipkTm*P3$-jacP;X7w$?#%sc|Flav)0q-6q$mYB9G3#yaO18$*IhS69?$Ng z{^08Rp&yAQdD%#{i>Nmcuq9h5-(Q~hZl44}?I6`qp=4@)GPaZ4(1o>xv^>r!Zt^ng z5M(|{-^y^-=kxSU<&(2M$Dwa4pPccV>1<5E!s&yYHIpDdn0`U|ellA;u{thhW6v7w z-&z=Gu7kr@Gw?7mTdshaL)}NsA2jaBn3rks;+u+dv|;OCi-3GadHVY%gD>v#0o W2eXEG@D?Vc@&6clR6lvCCe?p%#67J5 delta 547 zcmYk2!Ab&A6o${JGZ`W_kVvko**IxdW;GF65Ew0dgCGi(f}ofZ7cG2NPDUZvM?L`FBy@nHDy z_&SKim7HvA?Jn*Q1?wm{ha&Sy z`mV*c&*$l9j8C?G#-Z;SpKSRposA7xSU-Fxi39#NiFQ#-+vyGIwCr!Q86_{w-ad vr@Rk-pH4d|x500#Ukg3}hu5V}1Jj?FKLm4zeekM_X#5wfG-{-NeC7WG@)tNa diff --git a/packages/ludic.render3d/shaders/spv/4a8e9f28.vert.spv b/packages/ludic.render3d/shaders/spv/4a8e9f28.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)40zPJ9T-o(7K;dI2#kNbliZPNRUwZIpv3uX&q#1CCtX2 zC$N8JoT}yy*f~m7%UF>uPr=NgzJQt!Xxx!e6jQpvV8UKJhtkEFM8<`3sj-60TVUu8 z+>*f#{lF~Ptt%*f9Co-?E;Uw=xi>@4c?*8GYD=2$z|HZeispOptYcNm*zy~758y9D Ugn9JzB)l%f$iEOqFNL?#FEO-Hxc~qF delta 537 zcmYk1y-EX75QS%BVse$Rg+C#kx|PJrP9(ujddMk$`snjHb!IocdZ23 z7w|1CG_{B?;W^iP-#KR{GjCn*wCj~eazRnVlW{4@^J{rmRnK!GM;om;4x?7M zx78F>0iS+yrY4rIw7VHc+kfh<=7XIu+CR3*C#@YeVO40t z1j!@#81*IGxb~coTk=E5{m%KPd;9gDx?||`wumO9l9i7yr)z70e`XhJx0=Y&=APGT z?{p4Zo>*eaU94?+&9;Cod5Za9yV2Y|76i3^tf3;2sfE$6JutcftXZTP_%_gvJjXf& znIq|&DNg$wPhU@ba@yxQ^sU4vr~H+8Hzwf1@j&jHN{|ptKb!brbej7%YfIQD1L*?x z--26FdZ($KNkeZY|_yFF4yP-8WjZ^2NzKZ6JP>bl|=a4!hTieJGe6Q4tV h124MyatU)C^mzxfhI#O&hHLUo8EWk?+8S6oqe^#8fntN=4L-nw2On+_(^nJ8|I?R1l>t3W5?97b01^a204xZT)X_ zB}g8@$EYvh(l_v&VN&M85WaKny>li%wU3%_7XnYjk})aD`WWI=%Z(w2;H+19QauD^PbaA-hLA%sALFOA+OW+ZF zpTL9C_GZq{;7*cMbAAC|RX&IO3SQhTRhKdCWBv`y8TP@O8Ajv3VC7NMtUs|f`wtjD BNyq>I diff --git a/packages/ludic.render3d/shaders/spv/4cf96468.vert.spv b/packages/ludic.render3d/shaders/spv/4cf96468.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)4xq`?3LqQD{gkqbacM`;j=-aY#R0h z)l-&n1H`iQ3mgZb7V-T~5NthG1&^#s|2?cNdtMjUzU7w}w6$rSH_{yZPgS!h%hHg0 znsQ6FIQ&(r4F8lStJ@+x_m%lv7Qsg)%z6>uiS;3LdMV39IaD2I2D>`prQ4n?f{$vL zUD gNm)LHu|4xCFoQ?3EWa!z4%emle82emNqHmxA4=|4r~m)} delta 796 zcmYk4O-mb56oyYS6OA7+3tLJzMU$22T98uFg_PKjSmQ^c(Lv2<0zxE7Q`#=FbS+t> z|DmNNKgVCurQpK%xy;BMINUtvJ@?#u-^t(NVck(nJUPyV%T z{ZwiA-+#6CN&Gdq>4cZ9>t5KgjQRH2)y_MOOA}{o*KxOb)@XmzPgkoBH#75FHK+8t zK{IS!HG6J1r}Tqv7&hqi-HH9+`x#r|6RqvwqJ7=wvI4xrP2LJhm$&wK$j(M9-PnzR*f36Q3IT4Fy6|5sYr*DI`4j?Oh-CS!|{c9 zH%#!LQ?1PN9D6E^e@}bf%eT_jRKoz`wNBg~KIDq;K8UuJ3+niYq@czQ7>kH_0u~TV zC=Y9M#leoKtYpF$Bn35gz?ecTi!r*Qyw8_5V%`(~8jaRt-WUIT@#mQj#7p)3`igdA z^r4bH^hp~$Uk!7K_^Oymz_VI0GnHV>gt>TKE2ia@^uw4-EuM$D#H#*cd=Nf@+4x6( GHT?vY$WLJa diff --git a/packages/ludic.render3d/shaders/spv/4d4fa91b.vert.spv b/packages/ludic.render3d/shaders/spv/4d4fa91b.vert.spv index aaff3b9ebcd543d170f0b1508ee9542f81aada7d..6727ab28e6997249615e2d0cb14875208c30ea45 100644 GIT binary patch delta 166 zcmX@3*r3GA%%sfDz`)4B&A`DhYa(wx>kI}4hM5~1XEQO*m@LaI&Ny?kDYHM5AV`=S zh_!&&oq>g6=H{ua-psMuKqd!JXbKR2(}=N$@uvd$G5t*TIt;7~Awc#ts2Y&C0#MI% aAk7HGVnA#S<%6sMiNW|YH*<0xW(NR1ni+lo delta 114 zcmZorI-|(T%%sfDz`)4B&A`DheIjo@>r@5?hG`ocXEQNQoh-{N&NyweDYHM5AV`=S th_!&&oq>g6+UBXO-prZ`K;{&n5F-$a0kJid4^j>igYln+a delta 126 zcmaEHlWEIMCSGPHWp)MzMh0#M4u+tKy!niQ8*9DAL<4|=rST=j@foR^=@}&qtPCs+ zft&A&`Lim5q!bw#7`TAg9ViUqD*@Rc0OAL3_Lce1Cut32z5xn>q(K10cVlA!O3&2x GZv+5g$rm61 diff --git a/packages/ludic.render3d/shaders/spv/4dda406a.vert.spv b/packages/ludic.render3d/shaders/spv/4dda406a.vert.spv index 9b3f16fa25e66632bbea7bca4c09cb70e3d083bb..289c8479bfc9146b211d0ed028c8764386933e3c 100644 GIT binary patch literal 12992 zcmZ9S34m2)8HTS6n~0*ZFX8~oB4jFV#I7b@DP`Awr9LR7lJ~>8?^Wub@kNW5EVdt!TG`(X!T)3F-<<5t>9Y`;=p{@Y!%Uui&TZ}|H1 znubN4?HyCQnhu}cbl7YpVr%GYsdUc93LXsZ$n=4wVcgAGy1srx=8mPSTU$Gtr?ww{*lhch`D;pJxOX(3 zll5&ZxUYT8tl|I*^H(<6knS1@pw$}Fcif=l6Rqi{5dq-R2 z>N8s!v)DR)%m=rOui(D6zO8ZmUQ=2JZ)=K4e8Tp!9>GfZ;(X8WdG*VY<+ z8jWvd=Bp`<2d~ZJ+*|c^Yg;4FeO9jWn$i@w8_}BXzxuj0Z80D2#jd1{nb;{->s2`wzjSH zEVcewoO`;nuEot#*To0CJW6y-&yC5-JRbr(^l5EHPq44ZoU6*onG(O zIoQ-#)z;c+mEHQlOz&u~Yi%p9;;2Ud_6)tbzQsKd`k+i--P+LDQfC9MZ-WEOaNp7f za69KJ__^?O@10-ZJq5n0zIrcsAN>) zp2X)Qnez;|nS zt53Mkv#z@K#ztn{vpxjQ9$M1ac3NYb4+AdeR^3ZqYkRq)-0E5k$aK0?(aUQ(mXo5^4jCe?H%=NRyJ0B?j?OpUe)Iu_ zKPTglSNTHt!#j7*i}>T~U3?tCkUTk*G{VcAge?*S0 zVZCv1v1dX5{&4q-y8Hm{{AApE^4eUB`ab`Su|M{I62y8D@B2W%^$yN`wxM6{`@#6g zKLYOjj>2CL?gcyE@qGIC{h$_R--~AL&}?&MUe8?Hl>5AlHFP~2;V}nIxz8Fg$1P}6 zhdj6-_&WH*I~P~?Xcv6i^37Gg5k7O~E!m#7{)O;#&8~v8N2`1Onk;_ieEa)Vuzj(8 z`zz1>?UeV&de@=(+=>2N59eAij8WYH4*fnb{i?QeKb*5RcLvp6<43VwB-$VE=2`zK zxbqnNS-8&{`}Z8!xl8@eqxpQZzoWSOe({QayawNV&kJ+R??bZVvwh<;o@>E<-xwoz zkNCcc^%)4ZyzT3k`~FdrJ72zkvNquRfSpUv(Rh&WnqIJ)KFxmZ%iSFP){*o;WekhoqY%j_W$YXnR|Fk^T`Lv$gca!KzHL#iHKPU^U;Z5pxVUZS$>gHQ%?GJ4vUz#fz$pjf~%c? zMSo8Oo2xJSb`m)Hra#(vJ9r_cKl=6#@B&PqYw2E5i$1&ytTvdP==`6IS=%*PjQLr@ zm^avy`qI5T4DK}qi@of>QDQIemta4~hCUSR9v{v<_V_8_0SWhaIKe$5D-!M*I5X!l zj-_zhh&g%>IOa%S%+YCJeSRj2-1mabjhNHHYRj;g$M=EN{j3yiEC)v$`Xm4SV12Gd zkf9~!fwRKp!XEqdgcY$vz@QVukiUQwO;5QZcZ3TX3fp0JH zhjQ**js&-1jSsv1zw+P9o$>KNoC_YoPyw zm@(>0a_xNZdAYfM#$A9JtIu|vSGB0y16K1~82=&6b1?|hXHGYF^~m`!IL)~bZjS4y z&m7lBJ#sz*?#8087lY5pE&BRVxVo{C_c3rc7I_~B7xO-WrfzJ^&nLmw(-*Za0e53j zYcsf5>r-gz#zw76!Pe6kxt|7KmfOYoTwe}1R-bd=o>YtWKLhT@F3ICR3s$pE#B2d~ zW6}0juyN|q_Eq33bBnqA99-S_sC5mv8;kZn4_3Pxid}`Uf~}=5+Pfbd&$ftr0L@r^ zQU5{kIxOn{2yC3X;@=--6YnzrO>Ur@oAn-^=|e%=Yy4!FFNqrd`|kJ*M9)+Ibr69!UH0 z2e`WD+`K2s!;+X!1 zrr#^t`8(M4Py6ybTs_A053srFJ^48Q33jadqSn8_&QH1y|Awnatrx)Ns>l4i2u|nc zCAecx`}8tgJ=%H&>>Q?Ty$V;4`S}mnJoT8L*TA-?uQ)%iqv`jGcHRIN*ZjX|>MkVQ zAB3hJW7-RBu6j?t=7YhGRbSNF8*Ht#&-{|? zV1DL4fP4JA&F`uQB;4<(gZsNvzoSn1l!W_CSzh2P3f%8gBYz)n-b{W}Z%$%NaVXA0c!Pp#*g_`Btin7?mM&(Ek__nGVb$s>LY z*!Xk}$HLW(cYfvWZGT@l0jtF#|3L6WY!YUS&%uMh>VAeZXEJ7>Z zUh=3l18kpzzZq)Hxb#o_bGyj*bCaUtiRk1-4eY25*I{NBgtEwtqoB$8*4HQDZK+ zIIekU>d~M1VDmCPud@K2&d)-)b<%Mi3s;Xi$AQgLk8vFjw!Xe4>;l*QZJ6VAEc#>Z z)ni;IfYbID!QBJt`kV+?kM>Ujo2MRi-VRRJ=N)kCq~ll&SC2aH1e>QG<9HX?`ubvS zPX=2nU7saz^=SXy;B6agL(3J-s`~pWZzrr+Xc4Pai zTDW@DY6GjS!=hF@*n0Y+RtMNxX}>z*>QQSwSgi|-TIYbRr_Xs>!ClQc>1Es>1Y7rH z=GSNYd0;io%Xg%C=fd^bALsW1tT?~jxo-UVV0p~_hrqV2uZO!_>^p2DHY@)f?T5j` zXw&wrVXQIH?nPkRy%3Aq9|5b!JX{R6j(W`BN5QV^BrNhi23C)}kAuxsw{IJ`t3~`L zz-qxi33lH_{v}{z)FWmyIF0!f+&J~fyA-VMJlJ2~9hZT}W9i=cG+e!h7|+7xU^Vk2 z?+S3_IR?3L(Vr{9=@>o(Py6>-xH0OHv!xKT6>gk*jNx-&^{cSRyBh48N6hEJYS&=# zd**Aw{AAw=>5teifUT)N#`Z<9V@uD#m*DC#Ctn7unICyy0Y{#5A~#OFjr$q2Z>;Tqz701|J+$wD)lZ-w@yxvqz6-9;yW_nXtnS#xasMvn+yuV^Y>dBm(SIjq zjJo-^=UT+y4Offj$M?W$nwQUySnKU*%Ew~H#k}kQ7w6^sXzDR9_kfG@@&h#Wn1g%4 z=BbDFL$LaNSiD0X0P~Z*L-gN|`Fjb^)PrFAX^i8&i@RFvg&%>{;ya~>!2D$2GwIs} zc0a}5((f2N(+`84tMp9&7_J^MKgna#ciM^FDg4NEWX5{@0Zte7J{2Z{zsDM|r?A)yPv?3(7ybZOb6tEc{0Z#kb3xx9F*TnHV(awc|1-GK z*UCHiFK{)@%YNFA=iq-tz^u5Ae9^d`_2Rx1% zFLT%D*gT)FgY~_JIX2JL8(`NyJv0A>tJ@dzoJ4cgBX18h*V#P#AUDoE7VG5Q{l3?9z?2+Vl+l6F(c8`FQbk*qrm2=8{_y!gPo7~-Q*a!npbFJbB(a7 vHZIo;UBb%ua^D|fzVZ5fCSFS0`o_a;-x&Ms-_q1#@pmSUTW(zZjmiH2aG|YP literal 11024 zcmZXZ34oS$oyT7pKopb|FVYk|3dKytGek$!JR(8KBU4{SW`I}cpt(?!98$`xyeqW} z%T6;h+chw2Gy+XbJ9fABba&hPKH84mYCoUneZIr9&pyo0|M&a-9sm28cV0Ut9ky$u zu}fomV_M@!yEKYtuf`;lM#J`a+Ubp{1wVJm@+HR%4R;@N!imQkxM!oortr;d%qs9? z{@d5p>X&TBwqo0`9oS3Qg%o}SdlY*NdmMWL+l>7H`ytlBze(nRr!*$>Z)eRZjB_S@ zO;2m}n&IVr0|Ucr<_#Tx+``dS$1g;mLhc^4!#&p*cu(-isQOgq(`fXLbhlPESNAp@ z+#oKCX=~5HD!si^VLSF;{?x%J{3r zW&AbZfl_zD21@-&V=(9L8n&8)0~yoP@RfzHqwy^5+5%55*14;>b|87Kd251qG+uz) zhc(@cu4eyWU&-B<(Mlg~=$h5T#n>l<*RC;dT4O4hl{>p4i+cxF zUe{oCSz-J>BhArP&$^wO@dp zR)6=-{3(UDvTLxrNl!cVsXKK>y;J9qQ)Bhuz=&0L>eC8+c&Irr*jml8&G>eUzNV|! zGZ20ELhl>s?&)pXf%`kHoVROxFnDNP*A2MvO)k#+Xmia-Z*M#HGW;vqK=W3B2YY%8 z+$|n#=M00}8SS`@a3^WbU4?HHJf*P-%vudK+m``la^oSiwOxZ<*<0`0Xmee0F!X!x zMk{;o9UN_XL)v|NAG<2tyE)n%>gi$CyhBgIIRndj1~2Uy^pf$oHtIh528LS0tpV3^ z*Fx7-=&krv z=l6FzqAAq&J%WCIf4gSsX*AAd4ZKqaW1cJd){@f{+`FUS{`GrbniX zHvQfO(q;?}5Cd@OKpF+F0kFvp*f~R)BKdR)OZTWm`79+OCTq>9+-Vfyd%)w?ib}P<;-2SUi z_<_W`Pww9w`g4DL)b@wFrsi8)zkM64K9~8=pw(}lzI}<=mv#TC4efdo#cMj{p&cS}Ir+*A{ zypHcyT7B+8`r8QhG5_nd#u~S<8t;Mj-~&II*z>*M^JYHZ8UKFp7k4aK6n-H5 z$Sd!h;B$-o*%SGP!xt==HIYBB$lr0g`Hp8k+&QP-$wmAVh2L>4hCleg>)pz!ZlbTqw< zQ(!&Z^XT|&GoRbxo~!VC;of7%dmq@n$aoyz{b=4>$8Wm{?vrsn48QZ)pPgp@7s1YL z95Y_-dsQv`(F*s>`Cip;{#U^K6#W}7_dTm7cl~_N8h;S{cfqdh7MHZTa`%{1oTIdUD^vYT>?v0m*J^rzo#==HDiCxY)-+Pk2U=p%g1;7$;5d!{JTo*JAO~hdHR{g zHBs~LD9>KFe@j*Qp*4O)jnAv`Q)>Kz8uxFkYJLCCs`9IA{F)l?FS+aL9oYwSj@@wU z>|biDS(5|6vrEl=8z9De^y*S~EuFvIdioB+T&M8YfQ@mF^!s_j81-ePHV5pUX}6Tx zT(GfoF#B;`)l&B`u-XiE&bo(VY-xe@nd924C+D@`YR>E6=C}^}%yECzlXDc_>181=+lSc_Q-H%>icSq83;!QSbtMK`#<7CmUj=}X=!u;UD04R&m~ zGi$)csAnuKu(kB1ziYvVl$N;b;Ku4p{a)}aEcN@q#;H56YiQLHKLD=IYb`wUN7NOTWWlW7Jb;1Z*vRnb#<|KCg9X#_CJ`>%rA|-2gXE-FfxXsu@3x z_C{`dKX4XVDr>3=QrK0wC};}Pv0bL zBX$w}+Q)k_{XXgEHn3-)I+pjr)xGED-Hw^7o;kfAT%FSg;Lf{R=Yw$d^mPZgKBqg; z)HA2Mz~-rEPIrUtPhWjb_n_(bNk8|3-T&%X?t`mmP9FlBtG=O}=ZC@0RbOg-1nl~Z zVcCcK!Ro2?0N7mhtj~ks>iT>X?%bl0x0tj{OG=Ba0WHi7L= zUwwTZLfeG-q@PcL>wErbH1*8sVX(RCnbT*$)j53@Uf=W2p{b{@&zCV{w3*Wv!0MUP z7s2MKXHJiR?N48QPG3UP?~{HW1=sid%V_GE(_>(B)i;!T{uQuu)t6e2gRM1&Wz1g% ztEbizU~|<|>uX@og1+A{YI#13JBPh6pAO8=+h!m3OC;Gva9(UD||ZsyK4NQlDno`@IQrZ#;WK48>Q|$ z)A`F2|4p#*V_5d!TVQqLT_3r=aoX=-Te0Ln2i}Hl$CCd%Sl!Qj^M^ACt&OR7)#6_g4I*!kHF@sZz%7W9{y)w`@fle zm`eK!rj{Ci4zADZFVNI8p1%aYf~lwOPr=po`75|}s`L75xO(dR4cI*O%d=bypV{rMNTb*l6DSGaoW z{2SOj^~~en!PeK8wfzsUwZ^dY_n%<(@SlOJ`}1FLwbb}IxIV96ps8m(zXY47p1QvR zSJ&si;q`g_51M-F{2FYYdgk>Tu=Vw2e|`&gzRpFz`(thOjC&W}FP?`nEMuC4rapr= zm1nU-PCF0Nw~^Lbiu$azJMDDL?>GHUGqq-vdd9vdTx}1`ye-t43EoUw-OE>@sV8r5 zu$te0X3n#~*3*|-`+&Dmt9rinMN?0${lRK}cbZxUfUT!5wPu5@RUOx>(bQAxAh4R> zyQbD_z}C~}I!&fk%bFYlR`dG_*LMz>pW-utzSKSxtZy!s+{3`;CgupR+TmFGe=S)3 zNNT2!*TMNI`p}>JBfHz|B=R&%J#E*uCA3 zCGS`?_2eA~Hdo#C@^`FS;*STbg)aa*ndF}UHby-$CxWXnC&7(VPu?kD^^-BjyPlL& z!QO}J`FSInde&zlSk3(8od!;xbC4UC@hk#Y=Wsf_I=(ZE#nhA2S&KOnZk&4Na28m7 zF_yfu!IQDXya}v!4wmz9E|{O<`#AlHJr8V6{h8bO;QH^33((ZFCT|9-nV-BR;N-a` za^u7o(t19P^?WVEJYP$(%;Ta`-$KlC@LMspi?N?m<5F6mU-3Ir-zAuup9#gOeL1*Z z`)z3I#&}Mz0DIS~=k)Dp>RFpB!RDz)yBe&16_)pIv+(oTw``rSpA*%c+c^DnfnA&M zYv9KC-HHB{U}MzHUqP#u_#Uv@Qr^+K6Tb?qruj_5ve&E8low;hWnI>Q>+8}&Q_s3w z3$Cxrb!h5YgI=(C>e2ea>U~&#kE{jrQ~Vy$KY;n&!c??(fE}kX&bOOZEoWg6tTuyh z0*oI5^HY4cs?Xm^o~N8G{m#KVJpy*Es&{%6uAZ26Wy~1y>GOIt^~~u8u-YNSB=1JJ zwX44)-U(OFdAJE|f9C7kQ10=&!1~r>?$tPTZwB*Id=IJL`3%#lXYa?r{vHqC05>N6 zy&LRZkGW>nz6Fh+;(KLlm}hMIz7@<*(YLYoZ9nS2PeJ1a1xWjQ;_!dG})( z|AS!loU4z5FUHjKchASb>RP^k`#9J>^d;^SVCSv5rjF~AXvXSuP4A*r%eX%UR@3(o zt^8EZ-&Arx4W3E6iB_L;Q~wND-@}-5^Im-x?B0)IncL^k)E$d?p9h<(p1d!B-DmS0 zgWNdJSoX=*n&ZTL32eNvkI>5F`!d)ws_#*-JoEf2_;F0%W3+O|;QRh-;QD9I-$7G1 z{s~&S@lVly19Km@VAh{P`!uGWm~VoO*^l~(`4(LL9_pAgj+v*PIXnY)e))d!S+JT< zv~QQ1aL#)ULKuAc5g^&`Y9FPzYna@wLBi}o^fu)opbAM z-*xSx8wqj3*243_qt74Rt()}jd+#3*alws4ATb+m)x9K7`bnJ6acqhoTN2CLSh6|y zs{|8i<5ngA1@W~$uc|oB<9U*aDRHar)xZ~3Hpz=7tHRhzfgM-rq>H&0?0OcbM7_=#c4Y81+0(2L-&&ZDZ*G0v&V8C!@~(Wf=Sf+VRnOO!xla6|tV4YFUF>J; z`#teR_9QDLK-az={F8F((`;Vn&1o2WHmu=n@0(@$bk_JuTomO*c5+zH%YDpoT+2!5 zI?n~36#2rFvY+pK;PoO)yliC=&Q8a?()k{r`l@WqnC`r%RoTu{9~Z~s>ho=cF@w*~ z^4_;;eX~3)M8EsuzkG;6*U{-HKQ5L_RNiSRjZX`9V~D>Ta!v9o>o#BKxH9nWu*@7+ zgKrkg7li}UF`YgG|Ie7MVN4K(uIu{1lX8x}It{%RcvJhb%BNCh%5Ny2#RZ4CCRIQU zY%4E`?R5WoU{VlCrt0r~H-j%J$~N^{QJU+GE?0gMG|}aXmbs=rpUdGl)Tpj$r}w2< z9XGO~vAZpdMs2?<&(_O`3baBl>PKz9jfTzH;-`+(wtmhS|7hvQ zwtmhBKlR3VZ0lza@f}LX&;DVfMQrxW+U(O{k3%lzekie;m$g2W6{}56lh3kUv1!Uy zFUrUZduAAS5bT9v>>cbt2IyGU06R2{b;CY0jJ3gz4C9W0eQ6kX3oJE^y972f zjC%xD7{(m}TNuXO0efl~T7Z3H821J2nPKcD?0dtwA7DQihIU{-8HPS!KO4q<0QOwzFgh!q7dn45O)it22X5ed9+z__3{@TE~x;@MEk0k{ih%e*SalYWJ$V zq0dPAHHjxLHgR{v=AB%B?j7A%8%-X4JG#FwwMIO8BnEz6e$gW1R;1ge_6?a6Z4wvB z9B7gT`)FySNgDakqRppy^hrLnNgVmmBn?JBY&1#J{OFNJesrk$$*FnuNq%%m9Qn~B z4Msj}^hje5(INS`AGYKd4Z^Um$S?Yfq|?|_Z1l(7u`M>bV+;&i??$!tZd6SL=dN({ z#=6)~Z0f*j@J+FQ-}v-UHTag;-#veRPwltG{`&Hdy}c*)J4YM$_GQM1cj=5F4xj3P e`k|>!z0f|8(_ntijK*I6C4@8jTXyn8>Hh#Sb0Xvb literal 2988 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 Z*YgQy4fCK)4MyYsXnNGZKN(ve{R2JzT6+Kh delta 551 zcmYk2zfQtn6veODA_Pe_>VT8j!5E!zLIZI#K7osgsTL!PCRO9$z~T##PWTR*m_CM! zizpTp|J0o~@SOU6K+FE@qhL`p<&#aH>(I|CpKSOQ;chI*sRFW5Ac^wx%1@$lVZ~b5!fvxjabHGB z^3o04j$3;Hb)h9xywXB2#||Ej?YNVOwTA`UEj?YNVOwTA`UhS1GhS=TeiY6F>UK%oGj^f!$ddl)|u$dBn~ve#i?W#9tJ2LbsYH6U>X dpq^kL4MYs0Kx_@=gRB6F!T6z@dpVbj0sz@j7f}EJ delta 114 zcmaE1x5bW^nMs+Qfq{{Mn}LHNcp`5+Yak;7L(s-TeP+hM$qSjq8G|hM>(`S=TdbDgc=QKq(+%5CvjuC?BL8BnIOLZ9d4kToeF&ni2{C diff --git a/packages/ludic.render3d/shaders/spv/638623c2.frag.spv b/packages/ludic.render3d/shaders/spv/638623c2.frag.spv index 4ca9383e474a8e0bff47dbf5a7f1ec6032ba73fc..a308b8abede95a1706d837f3b4896798fced60fa 100644 GIT binary patch delta 587 zcmYk2yH3ME5Je|;jKd>BAv6&U;08o0BnpH`N`xr*fLKBX2ayJZ0Z~xo6DV9cJra+Q zV9X;JQS&8q)JSyPYu1rxwZ*x2W_D%=jqgTL*DO;cC*x9(_prESR_<~lXFDy=bKI75 zxYrbffz$Vo&GPC);_iCx{=fQ^@X3MW9-XI|Z;5u=^pwo%IQlR@^){Q&Ay3EMki3xR zS%)C^m7mXW*5~uA*OX7r`W%P8p?q@2Ulz{B1T39ANX{fkto(xV<7j1K+t^&fY$K4a zVgD@H^^|YG_N7*@;>A(;w_xT_Uqj6oH15c#AfxLCC2Rd2N*8w)89n7vV+EPNz(_lA zO9nfH{%^@@KSBv{*&$LcHCB+hHzS?%8QckiTFNiri|O8wU%`v^WUY!V`85MDYnVqb RorK?o7#j+4bTw6;`2#jqQ|0Bh@0@$@ckh2~S}Pc7+Y(7hUa~SB7tXBmOG@P7vgvt_+jMTP z8iFwK4gI!NI(m)Wy60Zc)p5*sH;&tSOe#NP?Y`kDncY$NWqlhR4&O$dfjpIrkSpv% zkcZ08Xsr8up8aX%lXai#&^MJ&*8BtEZY;pj@q=WoKqBR5l^=zNE9d6MF?Rcd#C;iM z$w|-uS+h_2P<&oG?-@HFl7B17jDwg#QHm q-0fBq4#7|B!GhnxI~S|fJyi3|4={UJM=#lgrz4gZLKOZMOPe!z`%C!% diff --git a/packages/ludic.render3d/shaders/spv/638623c2.vert.spv b/packages/ludic.render3d/shaders/spv/638623c2.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)4rV@jYwXl^onoa24F-Z~4aeJ_(}8yz;! zp`n4ZjX!ynHz3Hognlf?+2$cVz@Dzv%9;n@+Ih5Gz{Do}M=*1!Z=$9GjXN?jl9XZhZqX_}LmA>^k@2Ej zYOEmh6&Sh$w`8!xsGCn)op&fB9Cr9nE;Uw=xi>@4IRW3Nsuj(j;LBdGr1=ZnUb>#~ gH#lEQl?vFJZ}|ge4fEiw%tqt;G4!auH%Rxhf5?bo3;+NC delta 551 zcmYk3%}T>i5QV2TF)0!Xwq4X!YgVEwx6;y$i0`0CG${teN>p5Q(N_?%sxRO|5K3Rc zw{UCysaCDVrQkX7rrZfP;X7w$?%bQZ@G^Af@~$P4lLfKmXW(30jfb4b`Cb@Bo*#P0 z2Z10=JkP0q5(Vw>=q!k!81j;8`;p)N&zZzit5o?;Rpgu=dVc33txkqjyKD5=ypDzj z))wC6W$u6=a})Ze#=6f9>F1SC*8Pd{ai+8%S@YM0v(;hRDuJveNTU3L@{{4F(=jU> zn5_kg^D?SZkWu`*=r$gqjIe6Rcv3DkR*-ojM%IB7GuUAq@0Q%&E0i%7JG?2E8Y{>= z17j6DkMBG9zPR1W_yc^^?>9641b54~GoFH1c8bk4RP$cGz^q{&yrtP_ybDG)D*jpd GruGNEqF3Yq diff --git a/packages/ludic.render3d/shaders/spv/676965ab.vert.spv b/packages/ludic.render3d/shaders/spv/676965ab.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)4cjoTT{?kEip&VNxCGo_Tm6zI^*|JL_ljCukCc|-Z zaXJ!&fv-CIGQ&hWVA4qGaCo-t_#J%Sw)7YTxzT!^A#An1Gi+b zgFkx@;%OanR_$zoB{Z=-rv(4f*`E{0NyU6lXyM2~K_x z2PeOUi{Lr&J$W~T@H^++`|iv0{`X$IxR7}wEs4aJ{%id14xEe`>ektMk0Lyfw+R(XPj(mf5Z9P4A;UL=y2gp`Hl=dU-tNN|;==8U-+Yu!0%NpPWx0)x} zjt9lXyMlzTU25zg^F}N)fg7_pA*z0oY}$bm;pK!_yVTf0<{en;U>DyW__KGoYj_F# kFq@4GFN5#Y%V+~>{^tbD4D}({Y{ILf!hb>4Pw9R47iMiRSpWb4 diff --git a/packages/ludic.render3d/shaders/spv/725523d9.vert.spv b/packages/ludic.render3d/shaders/spv/725523d9.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)43geoQ};y$;YqpfedR0r?;`AaO|sPKL{qb;Xq(uK;kXUkRi^7J>kbe|7Uwad&+H4h|y( diff --git a/packages/ludic.render3d/shaders/spv/74258189.vert.spv b/packages/ludic.render3d/shaders/spv/74258189.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)4G7FJWL{U}a!oc(nPi zcrvRZNLUUi!~(?bAYmY15y)nO@i#Zh8VmYr1Etu2Lid2u-!x+EVf_0*eoQ};y$;Y! kAd}$%kN~LxiCY8p`~_+PS-}XD1M$m%j7OW#>Sfme0Ec=aRR910 delta 122 zcmaEJjcLaG7FJWL{U}a!oxWD>2>B CaTzxN diff --git a/packages/ludic.render3d/shaders/spv/79b77ed9.vert.spv b/packages/ludic.render3d/shaders/spv/79b77ed9.vert.spv index abc5d6d56f97296cd57ddd9da0387a79c63e20f5..b1f4f90e1311d8056c209315ab76f77d7e06f046 100644 GIT binary patch literal 13280 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 literal 11312 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 diff --git a/packages/ludic.render3d/shaders/spv/7ed7de52.frag.spv b/packages/ludic.render3d/shaders/spv/7ed7de52.frag.spv index 7fe5d81d4aa2c674029b2387bff6b800875da947..ae5781f723c2a10cd1f4956dadca5d00f52fccee 100644 GIT binary patch delta 350 zcmX@`o$1SWCSGPHWp)MzMh0#M4u(GydGi^6Y^?1Ucl{0&ER8QIj?YNVOwTA`U}a!o z_yH6vi!aJAVPF9Be}dJdWTvG-_`ksXyrNvF{O`?y65_0!Afpt4Lfn%N%1Xz|0a+|S z><%PB27qLc`AR@O2!P~427=_-kod^*zoGI>Q2F1RU&^i*tk(u=1!?&Ll>Vj>V-Mqh z1@dG1ne26dt_Lz1z5xl48j!d(P){)<0|UshAOPYY1{wnLGf)^V4{|aHz|@1Bh|C8% KY4c=yYoj*3elwB|AX${m`%*X(?2q?n< g;vZ&X09ynU2J=DkAd5f%rXFN4GXKYBQG@&408FVf#{d8T diff --git a/packages/ludic.render3d/shaders/spv/7ed7de52.vert.spv b/packages/ludic.render3d/shaders/spv/7ed7de52.vert.spv index 7481d30ef04db4671382d21ff574bf5c5bbcee02..35b48072cf89ecc60dcc15d3af054babac708b55 100644 GIT binary patch literal 25008 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 CSwxrs diff --git a/packages/ludic.render3d/shaders/spv/7f096322.frag.spv b/packages/ludic.render3d/shaders/spv/7f096322.frag.spv index 7fe5d81d4aa2c674029b2387bff6b800875da947..ae5781f723c2a10cd1f4956dadca5d00f52fccee 100644 GIT binary patch delta 350 zcmX@`o$1SWCSGPHWp)MzMh0#M4u(GydGi^6Y^?1Ucl{0&ER8QIj?YNVOwTA`U}a!o z_yH6vi!aJAVPF9Be}dJdWTvG-_`ksXyrNvF{O`?y65_0!Afpt4Lfn%N%1Xz|0a+|S z><%PB27qLc`AR@O2!P~427=_-kod^*zoGI>Q2F1RU&^i*tk(u=1!?&Ll>Vj>V-Mqh z1@dG1ne26dt_Lz1z5xl48j!d(P){)<0|UshAOPYY1{wnLGf)^V4{|aHz|@1Bh|C8% KY4c=yYoj*3elwB|AX${m`%*X(?2q?n< g;vZ&X09ynU2J=DkAd5f%rXFN4GXKYBQG@&408FVf#{d8T diff --git a/packages/ludic.render3d/shaders/spv/7f096322.vert.spv b/packages/ludic.render3d/shaders/spv/7f096322.vert.spv index 417ebd22155b715aa7494612ae7f7ed1164070e2..046c02dd88a42f5e1b4b9946adff1c6f774f7474 100644 GIT binary patch literal 25340 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 L+;aW$-vj+WWq8&x literal 23976 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 diff --git a/packages/ludic.render3d/shaders/spv/858f5089.frag.spv b/packages/ludic.render3d/shaders/spv/858f5089.frag.spv index 64ea2da1bfa6c872c8a4fbaf99eab19d16b1cdbf..d62b4a5238700e6a7782a5e1eb26b9901287b38a 100644 GIT binary patch delta 1927 zcmZ8hy-yTD935`&jxUd|69Er6U{OFo0YC9Xu`og>J!G@82e%P8+~Y)I%vsqPHB)J& zofa60t&M+xiH(&OP+FL1V`uce*%?@!%PjNW`^}rL-;Y<gI`78A1B${=o3eP^vq2czREx>R0sJU>v8Nkrba+LW49>Y}^q ztQSj4t%162W#RKt`Fyi%j8pM2zCMg!@z9 zbv&ca(5xbtgJOBja|*t*siL{FJ-t#|MR@MkioaZdSrR{-Fwq9Dp+vae5fxK#;i0x4 z-ok=b+YeNA^w8mHB0R}arEZj*V&E_PYuf)qqOFy;*14}z;oW{u@D#PljMB5A?yuq{ zLwz!tndHn~r7RVf9WP&UH}ImCI0K%IFMbi@vV*rS6~F z4@2%ogyZ_;<_#z3v_q{{JfmQZI?WX#9Fv|7D~6LVwF48L%3Y(tp+R#GB3z^9o)}L4 z)DA2JI=nCn99lH@Ho~zS828?A@@j2(53O4HWE42CFc`fX;o3C!!*KGccIeQ`A?x5K zSsrv~if|dtwHr?EX@@SY^cV$u=+<0+gk#y*=!1rn<8|pg^PyKOV^EmfEE#fa2KR+f zVU`hfzBqN_sGie0U!QvJ-RrtPvB_Z!Ii(Zwufh2%26q9^KaO1)LFO`9yMY-)zC+ZC ztlUo7qdh=b^d7kM;x8MyoW`tJHqNl+@02~&55`94jAL3Q#~H+|X*T1)8fK%zpj>FM zD??xg(dlqPtK>L?m^IDT4m^T!Gdll6@MKKIQDBxzCot=sG31C%y&G)m-C)#vx4JG8 z-J)L=HBC5?!Q-;4u~IpW5t2%&+!it4kDR&Sv%p^(XQvH52mJimv&#mb2flas%|5;W iJT%{Uc?9b}gwG@}=P-_%xiGvtPkBJ(-VHTXTK)nZ@XYQ2 delta 1873 zcmZ8gO-~b16rFZDEd|>G6$`e|LP4oeKE#g_Q-TX3>|_s_jGfX>ENz{(A~B|}+>t=u z3Rk+5g+{{G4L`udjVoQyr3(}N1$xh$_h9rjZ~D$T_n!B8zpuPo38~(6Kv6tOkJ6g~@1c)Jmh4)qYU*W6-{H|%Sx3wifnXSx9&I`XwFWqa<$peYqnLgs>1(Niw)q^66Y!uob68yy9oN@Tu(Z>wM{qa z=!^dNA~Hw0vQ;bTX0c&3=|)v$o_I9e_+1*ebh_(C*)VH6oXfF2|3VvY1lcO}2Xt@1 zV@RV0jJEj;Nop`@fjYZwvSxQjy#rKwL!j?H&Ri+B&CLYX54FCFy*4o%`Q2Xc&> zf{q)94(!%*LdWex&z&4~|M6-=N>E9#PAHunrho+X6p17Bj|T3Zz$isDWTe=9IGrCQ zCWTHBV?qUo3}6&1nsh)hqQPN;9fZ@_Ys5@Yhr@NDf)pcL*Z~anR%m(WRkUE{NR8W^cRyFALnr ASpWb4 diff --git a/packages/ludic.render3d/shaders/spv/858f5089.vert.spv b/packages/ludic.render3d/shaders/spv/858f5089.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)4<%d)Ks ztIT>g6+7;(SeCUqHT1jwE+%7Mrcm%x89&#T2DDuK9;ownV*5j__7+n80sBPb;-H_( zj|Y}z)}mUno9spP*-kbtg0!_wpI_|rQ)#a_oXw0{B~~fysv}9*?T#etX&2RY#j%{1 z$`mj!!EaIdkvgrG7%xNKaK5Nj?lcwQPP5w2he#{tYsS7Ju+L_Oy|b8_9a|jk*x}Ua z$kuC{fkJ*Pm-75iMOJ&5kJ64oi8aktTVT$J4PoC>&!LkNL;<1 zIHaGn=0MPSCptHHW^k3k&;P^o|6oU7X9V0~tmOr<@i2$+k7O-PbO_t3HKSl|qm%2z zL|bD{PvkBOr+njqiB6>*CSuKfw1*JKvyeL~oSHQr%8YVK6yS2hr9#{~!wm|j?6Tk# zl|~sB1vqB7Ga-&8!WbrnQ^$-4-YS)AqF`QaxEmpkWkb6s!l|3a151X=vM89>8t!9= zWAV`Ln{aB)c-UkV=8W7V%ZS#MA#Stbs)SQr<-t9$d}!Su3g(T5YYuT+47W`8yw=3K8Zx$QS6{jSR26-S+Km-O~03odR_$m{d{aMbzQr8?zT^6G%BYKz_CSmhRcQ%Cv^nADwUf?!Msg#w*ws8hJMctC+_G7Y#AzBM!`I(xi0~Z%|pMR zh7-Saggshe&6t;D8_~Nd!0pvstKr14n0g1c552pLf_b;*dIQ`(%?%h%)MAMx)1|vMC1S7{4 z#B5L69^j|=vTa%U2l30yKf_?vcLB3==|hg#bgsdsa}7r49+It2B8deX`1WGh82hXN z*}e?QKwP{omg5Ogj)%o~eB9m;cj6sOFTtatq%RLm%tVpnA=!SfF}}x7j2ip~_)`1R yqXxePK5#mIbP(SBPx}sI0)u|k%=0m!G=q^ql`ay@G!w|f6A$BCUq98l82by!pBiQW diff --git a/packages/ludic.render3d/shaders/spv/86f427b0.vert.spv b/packages/ludic.render3d/shaders/spv/86f427b0.vert.spv index 18a3599b6602abf1d19f50d07982fdc94ff75b8e..20a844a673b6d6cc274e9bb6628aa5ff3013dda2 100644 GIT binary patch delta 184 zcmbQ^eZiZTnMs+Qfq{{Mn}LI2;zZth)_z6?h6x)dva?8nSm`pl~nyZkAYWAd?L!)D4vWrV(Qgcdgw2IK+L8eI(;n>r delta 132 zcmccMJ;$4unMs+Qfq{{Mn}LI&Zz69!YY!s>L+{3k>@1QXR(ei+SZYy8YK3QBN@@iI z11keNL+|E|ET@?SLDJj|3=CR8?9RXf6z*l;&7!FQWOf6kfQUg9h^?V~kaCb1jNiL? IDUY@!03XK~e*gdg diff --git a/packages/ludic.render3d/shaders/spv/9068df1c.frag.spv b/packages/ludic.render3d/shaders/spv/9068df1c.frag.spv index c1379ab0fb853dc9083924c4c05e2448927f5bb2..0a0c015509b549601abb117db793b7dac7d57dbb 100644 GIT binary patch delta 636 zcmYk2Pfo&M5XA>5TE&L=Zvm@nRj3qE)EZ*|cf>o8m?{vPpqQ$0;esQm=?V{FV!CqS zL5wEe!nN`KI$-cq(d{v@tD`lANe=@TRqu#)gR8ow}aqbY17_ya$vl zp3N|R?e+TZ;I`)>qDUo-oq65K5@IrDTLF`CZBi#-@)t}U11+%fI z4*xB8S~0U#=P})~F!2J;Y^B2)FUX7-{>Q9QT>}|#9bMM(r7?CCF}FZtMakE4MxzWW z!C7Haf-%MlGWSG_J8%y)cCh@*oH43`EI2!CQGzkX3NklCi~nRB=db+9am+j5m+`n6 na~=G!^g7{Pu-VBsE$n3;=RG)Umi5QV4hjYeZBqAuE1H1#L8^`~(sExIbcgCfzS7!X^c;=)B=LCLD_d;vkS z@=-*=XYdU?Cng~$OvpE9X6~IlHNNZBO4*tfDTyJv9K2Tts%MGF{do|Et{1pBmp)K5 zJex^=9QwoH`pyrLQL>ffE<$hkU(=4B)zV5g$)e`=%JoJMNw*V!s8MCY;j0LR7~oA_ zLr`QMLSHLz(dU8m%c)N;`t8)8Nqus`?+Wk60a!XYkX$GbC-wEzcj8a|r=-|q_eMt(K^ MEh@XJ6P+!@f8}{M(f|Me diff --git a/packages/ludic.render3d/shaders/spv/9068df1c.vert.spv b/packages/ludic.render3d/shaders/spv/9068df1c.vert.spv index 17d7ba644bdc9e4b508e913570ce989882721e2b..aff7eb39ecff1a993a79a4aadbcce8fe2291885e 100644 GIT binary patch delta 184 zcmZqB-J;9O%%sfDz`)4B&A`EMXCiMo>n#QbhT9uEvza78tn{4tu+*ZG)C$kMl++3a z237`khTEHYnKv^Df~2{DSPO{V8CZbA7g-N8$7%za96+IKK>ST3#vaDM4&=x5Gui6^ n&DaEF-+-zCi7Np0+yv5$Kr9Tz)=)mk3Xm9#e|z&@&ci$aV^Ac- delta 132 zcmdm@+n~$K%%sfDz`)4B&A`EMb0Tj!>vaYOh8r6@vza78tn{4tu+*ZG)C$kMl++3a z237`kh8vrCnKv^Df~2{DSPO{V8CZbA7g-N8YbpSl*MLHdKr9Tz)=)l3IY}m@XJZ1EP97wu62wz}LHS;MxA0~3HZfZs(iZIB zb-$x|8|=SiJ5{_`fxiQ04)qpl9BAB;QI>hBMQ4`Xu0yHeR*HqyPW_ delta 571 zcmYk2OG?9F6oqe^hxHL6M36Z0F%qAxTCFv~S?wMKiKb#FimBqjLDnD{RUPOC1jz~< zy9Br3B0MMlf5|B&|98&4H}}um$#2&+Ybz5XhD=LcqEGk54mJ#t`?Eos#>pVQzUT{N zoB)fPOjul;chIzrOOwRD+Lm&ysq-FxSjg8f(~|T!Q#GDAd|9* zvy(r0e*Wss^tM2B7E!s4Cq<8)WZsO@lejs>Njo?@IMXsPaX#C{kuIn0(T3=;o6LJr zYhZTngMYlW|p6FiIEWS|-tP#F~YzEMJP!f*T25kpaV~!&E~aj{nAcp~qrp4QrrnHc+0A0!n&3kT zitkKZkGg5+YAdO0`O|4uy%FdJRy#em-LM+9t5Gcud&^+caSsDsdpS)yeI4gJ(B)C9 z5%+c6;y~AlZ^fx}V{Sd}q8qlmEuDET+4#{uU(M1i@AG4&ucdG~Ydia5U)*yy?4L=P z#=SU|fyKVY>FZe|ti`Q%(z)&Cu5~eR|J@K>Gfo=KPFRo9G$R8B@jTMES&Z7c35#=` zEtR-^2=C*i8Dm z4Zg0KxIk>*RU zOw^Ae*J^P)>L{Y&U_l&>TEV4vL(M1`f~yu>yG&0pBd%Wc!kg|)!R)UWw&PfZ?3^$; z##($|hWALOfyoQ@#diy)j)M8d!PHc88#^#H3_T4@{qpUpU94yR!2WvFGW2}c%m@2= zY8raJZ}ebaPt8S7EkO_V_0&7`)B*HhUw>5?-*f8d-zzcS4*1#%{Qd)Y*yYWTxbw0l zhiL5OynYR{HvW8$bEO%#N;2G>1mo}vch}?CC)|CH<1XQ*HNoZ*1Kga)u}`>pk0Um? z1&^a9!d>?`Y9U0ZanvrjUp$VQ1$W=$s8?{mc^q{Lj-<5vphm%sdmQx% zZiB~Bo8Y#49CZn9m&Z|;;3^)+cL%rEKt4L-ZJbpM+)&vs=c(UZsKU2#1Ll55P z=?_W9H$KsWsp)VQ*9($^;Lfb+sqyH+oEtTrX8W9TXfXe*@bCK*| zJ{jzF?+iZi!(8mi2kY$ZVV$#IX#>XAcz=Xvj`<=ElWpXDJ`&G&!u!YhfT<^NmIEJ4 z{&nKQoZ(M|zq)sC#&9V7>E`eH_`2|cg^8Idtw>CfI&-kQu5S0bD4AxsT0n>SHmEzC z8*#>^OzhZ$>m_$gw?(|%A&q?hQw(>AE%k=lX5URk^6nD9Dm`_C_lz0>=G=IXs1euX zg?YS1*uc+d1^mIClAij&+X6@3zz1>iw!r@&8@_4Y3pi@WAM(MwK>J(v=y*Heh#mPK z?H(BppPc1h^-1;d@@$`$%o)9|j*i&a8$5GZcfa~R^>0gjpyY_*pkx{`z(1=F$GXV2 z?v!NwepbfuoMbp#5B!(r*jz^Da(2_|oXsWO1bcYChiwa?G9AO00EEo%z_KrydgHVU6f)KPM!!pD(l~F}eoKXJ{jb5D} literal 4500 zcmZve%aRmD6o!kr0WvZmcR_3z6cB_FxhV<*;sA;;h=>=orlz~PyMmgoiM|XFF2olw z*kZVF>B?~F!i5ju!o3?F!JU`T2>&lDPj@m`$ty^_O{6Ou$y zm8_F5w%SyyVeJ$}KP%9v*f7SZbgQMSNzgs1xfj>6dcDN#u@v`~G)X@k?b3Y3tw-G6 zOL42c;P9Bsqmjom?V{D4Nvc_^fzPPRt%#F+KCKlpbsV`CajR%ABzeh=M6YSli<5r5 z8HclWJE>(!tD2T}qtRQAUu>uKEbpdm#T$v9;DnsfF@8 zpVpIJ-o4Sv>e~KXUQ};KdV!Trk8LlmCY@?hOXH#m;>Dul?8|fU&b_#QCvl!G zrMV0&_f<|`FB)+zZFRElJ?FdH<-q&*VsyF6aa&oz#( z=GkIQ$o_ugj_)j{)mT@VySFo+vc@{M@5Sw+8~ChsK8<$KYt<+h!G64nWxBYT^>yn) zT{Clu*tx0SUhHE^M=@9)PdQySpZgSz-{AOKaxdpL2KE~rU(ecUdHJ@-rU73*maxUz z>~zgUCvp#FK3fL-|9rL%bgn2Y*0up(En3u9Swl}dzT1h5cGgg9Fn+u7%_QeB$MmJ} z4eT(!z_zUWXB?*wqMBOu_jNm+u9_FUT5MmG#d@}kl`XiMC}UN8tVW!*^!Q!AQOk+` zQPx^5?Ic}gG#q^>jzO=8HTPn9_>JJ^O0MI}Q_P6#b4&3Zcc)-_-csC2Q#G;+zK^jN z-95!`z$Y|=&7R)HeijcL?lu3V!+Ys;O+(-eGcw^z|r5}9t0eB3HNotQIBxn z1RQ+~?)!kFhr#_AaP%*@p8}5F1@}w9(X-$l1>6?T{T6WaDeNdpdk=aP+<3szpWxO7 z9K8u{YrxT$;C2KYeF?4-aC~=gdjgI=1h+5XDxNzSaJxJ=C62nM_rNg>?=GRk^dt1t z3VLv;pA$w;-Jl1D`b0SF8&!|BeY7DO(m(w9A6nTvHfu%wRwP>#kGcg@`xX5q4>)9- zcBMAauaJbp@OH(cRdz*Th2)-W%u-X-#Zm zq6Z)LoaJ>yIEwC{F+DvVA29buPiNRUryUyTXFTRzE@;hp$eFQx=3Op|$Bz6jVWa`a zeqeqB7`8t>pF#Y~nk_!D9~b`}@z@dnie?5J@xWIhG`0%QYUXaJGdtfkt?92j#Pa)r z4IJ2hKMdRNhhh8u08=OLYpzJhb7!>2{bmr8IQU}E+nR8;#|d?~+y;!T@!<@QkHsPn zTieY2d?22h=eLae0n;1ctUf-{`qzm|(}q75{_5ew(}r&ef41?vKK?{_|E-DB2el(P zeJa5RJ9PH0vDOU3a}Jf5I!`3r8+p$AHMwICu6pjcUWpl~nyZkAYWAd?L!)D4vWrV(Qgcdgw2IK+L8eI(;n>r delta 132 zcmccMJ;$4unMs+Qfq{{Mn}LI&Zz69!YY!s>L+{3k>@1QXR(ei+SZYy8YK3QBN@@iI z11keNL+|E|ET@?SLDJj|3=CR8?9RXf6z*l;&7!FQWOf6kfQUg9h^?V~kaCb1jNiL? IDUY@!03XK~e*gdg diff --git a/packages/ludic.render3d/shaders/spv/a0f2dbac.frag.spv b/packages/ludic.render3d/shaders/spv/a0f2dbac.frag.spv index 23a4175c604647fb636a48c464de3e10e21ed8b7..951bd89b97f475475332149e5fa06f30bb7225cb 100644 GIT binary patch delta 177 zcmX@Ig6+i$HeO~XWp)MzMh0#M4u<<1d1sr5-W6bAD2*>Ej?YNVOwTA`UEj?YNVOwTA`UhS1GhS=TeiY6F>UK%oGj^f!$ddl)|u$dBn~ve#i?W#9tJ2LbsYH6U>X dpq^kL4MYs0Kx_@=gRB6F!T6z@dpVbj0sz@j7f}EJ delta 114 zcmaE1x5bW^nMs+Qfq{{Mn}LHNcp`5+Yak;7L(s-TeP+hM$qSjq8G|hM>(`S=TdbDgc=QKq(+%5CvjuC?BL8BnIOLZ9d4kToeF&ni2{C diff --git a/packages/ludic.render3d/shaders/spv/a45356c7.frag.spv b/packages/ludic.render3d/shaders/spv/a45356c7.frag.spv index 82f4c92cfac84916c7ef1b54311e78ef9284d8d7..cf7434371ddf9e1920c366f023a23e5872b6013d 100644 GIT binary patch delta 623 zcmYk2y-tHr9K|nCkWwgBss$%M7LA>BGDdJS9ee{4gHmG`O;F?D&<8NafvGOOfzj{| zEjyGs`*2hTxn!=DiNo%8>?_cwfv98F!H6G9O!VT$0*`OpJX5#r`}lx0aeN-j=^ z0-@uv^QrFbI;DG(rDy-@e92emNqTuJGkc|WJ@v-17o!P?P|wy>K4Nr(Nj z5l4~@aQvu7eN4327R(&#d#Gtb;~5zNs7WvXa=iT8u?H52$_g@D_%f)mlFZv+$WA;h zgPq#==SGwibnJ~?{8DAN4rK&2R+D)b47vLP_|qL6NcO-_lSwGK3%={V%y<#J8M|R0 bbKlWt3CtSi!CRiK$vb7pwf$n+zVG}2DYQ1Z delta 551 zcmYk2u}*_f6oyYrFNGpdZ852nN*s(%IvG=RGrog~L8*~N6Vy03^Z`sKrn>kBM#DR} z_y|6QyMzCam*yUFL%#n%|KVKTkA4&1YR6rXmU!aG>WBZOMye(9aGn=Mn&s)uNC!0Rkp|7-0HvB!|ZfwA%>kpER28p!qXg{iEy?rY>*%XXJN97^e6HIFf;6fx3*Y~|AN)58dY22bN>%(OfH=O diff --git a/packages/ludic.render3d/shaders/spv/a45356c7.vert.spv b/packages/ludic.render3d/shaders/spv/a45356c7.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)4BCf82 zqUlL*ti+HM}dFxr{0aZdFuJ+ZJqfv)-LLSl35)ldv?Jbu=z6baHs6bq>xuw zhamTqZ>Koz^Lo~s$|t9NjzfQ1`Q((pE}V@CS(QLeB}l0JobtnDex_+v*D%`@q!#S& z)mlaKCAjvIsgy9$9Q-zzIn*~%Gla$+8AVLhiDJjyx`xuhSwcovxzt!e<|{CC2X4t= zhko?qxPt+dJ`OwFDwi57$lRNu=e!4xW~eWm`}- zo^fWm)t$S-y@_dhX#IAiWOk?diCeW34&OiyXUdT*2zirzDDqhO zuED0yL>f3XqL}q{=TVKh0N{dycn@-6oK@FRP9dhS`_r z?~R}g@vb9rt6XaAAoE5nJ%JmuI3doqYJPGLCC1AM56Y#+4l?h+YJeBZsDckmldDL+=+8kU>2F diff --git a/packages/ludic.render3d/shaders/spv/a4683767.vert.spv b/packages/ludic.render3d/shaders/spv/a4683767.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)4z)%`rQXHR=nwg$a!obSF z!ti~wrhR;Can?{U1jQ<75 qkLhQ!*8!Rdw3*>6kPlJ=61N8Gc>@#!83_U)zCV!teRHOkcohKk%_MmM delta 126 zcmdmTlBwY&6E8E9GCKnUBLg=B2gBEiy!nh@Hr8$z75&V{z)%`rQXHR=nwg$a!obSF z!tiCYr@S<= IYKd0?0Eko@_5c6? diff --git a/packages/ludic.render3d/shaders/spv/a5ad521e.vert.spv b/packages/ludic.render3d/shaders/spv/a5ad521e.vert.spv index fb69f940cef95ba2d447247495d56d1880ef1da5..66c22c3a44ba9f40b5b1bfa69990382214741439 100644 GIT binary patch delta 166 zcmbQCaYloenMs+Qfq{{Mn}LJj@I>Bn)`JWT42L#$1~V}poP3u_obk}+uT1lq1VO^w zK&%DC?hGsphc+)|ozEPr4P(_6(U%$%q)Z&gH*cR*x z=7O6+)%FEbB0<3Ty2f3>tdnot`uNtlaulCCe__A}x<2ig zHj(wTJO;rpay}#K+s;TgCta4uPPbe0aTurFZe@$F&2YS_LHgNX$?4Ogh~hLFbdrkC z1Ozq?hegs&vr$qwU#~f~Uc}DVOmM-;Wj~7Z&#QHF!HOomEWDO(=gcG3;z~{Uq)6M`1V0vYcC)#Pd{RvmTYY35#==Z;>xQCQrM2WAB@?OD5OwO&r*hXZV6+ zk4&Dy4oW6(TI#g3wM^d7@W-9wkGE)g?w9XFM#nt{!M#xIyP|oR_ZE^vwKA&`|~Zdts`f5P8>VV;#G{)VE98` z2B?{T>MRZa{GV$6@%<$KZ-`@u|MMDYF#I7?muW{NUv%T+XZfZWHElt9YBn}7WUJXG zTg^7vYBn-=^^Qj3RPu*q@{NjuCtg+78Cw1;(tBvht+#m758uLXQ zHn)-US`{ZxiHq|>ZmYvAN8Z)^xA_m+CSR5O&4UL`ZoMb@iv!;`@-@k4*5+51v?DRS zug)6m(Ahm-*PLcD@0fN`x5578JB_paON2YZmbc5>XS^brcSz0W4I=a1)NI~ZTIVtK z8XNdWVw?eW7*1Q!F8G9*PinI7^RQ%meya7nN$M^(aPvuxg%dM=*oWGQ@7;4fII-In^7H9M*Kf;u|0ThyGr(ETVo-t-IVaMnLk1TSf%{jE6Ay{Hc3 QESdkKD44_k)%=qBe?#z6CIA2c literal 3588 zcmZve!E+Q<5Qis(gv3Mw5+IR?n*~19G z1rOf2VtMc{usnM3;2+?@yBAKLy=hrm~yo*55qWZwMtuj?S{i$Ez(a0=bSz*iYQK_ZZj$Q zMDUv9y&`F)*&r#LuXV?^i`e;^aKC97_B&CWe^H*B3a)6=&cd5XD;j2lPrGR=FLthH zdGlVNuN`uFY=>bp>Nle}33q$QrsKXwx_&Q92epphJkk|Wx1H2FZg8XpKavWH-rVV6k)W!?2aN!#L^o z)4`rQJMChau63OxZFdG?E6TE*R~g0gOl`9r_4N`K=ZxdcEbWE3tiM;jZNHZ^LtSO& z-p(2D=?S(}?@Xj1|yj|qOZX8D0w#3@s+&*2{NoyT>GYqS9ozw+lzx(Ju9m!yE zJm+-jc2xn9$!1t;0|! zs?vqsELlG+(=)iGu0np{i`p`IMSBJ^IYHdiB{IDPd+N<(-=3a=p1MPi?Ca?-=*=Ip zucwEir#?B4?CUR9x~)oosgj8k`?vSWm!FWw-MjJa+p^^i8N_;9|C&q>z@N`nB{PhT zX%E}d#u$EK4?V`c!XA5!yMt}$fSn}<*p|n*1K39%BR1GwkI|E0pL>j61dBaJ?}2qZ zM&E&D9wR4UJ&)0AVD~*npMgE_82ttI&|};s>|2k~Phj79j6MSU!DI9g*iRm#f53kB z7`+4btHwG7<~dp5!idsBVe;0qd&loc#PfvTksft0k-5Z`U0%sG3p9- z#$)sW*jbM?Dz@ga<%(^Hk@wU-jA8OhDLVOv_UOqU^vJ%R-hiH5LXT|vW5EIaq33@k zW$m8Oj{I!6dC>XAH*7JO)?c|F)9MeCPw71Qh+RY9BM%v{E0s(hGEPb+*YHgo*pp}Y zf@63ohMt8znuTRmfx3r?(W>?n!ZR(*EKn_rHRhonHpu7OieN_={5L1xy#@# z{}SPiu%!;EW7eyZsVVw5^@PmtrvFkesZJr&d$ECkEXG~XQ{jwFeFdK|^GSd8ebQU; z`I*jBUyGX9z|AN95>Cwc;XCv}e9tOkHq)$ diff --git a/packages/ludic.render3d/shaders/spv/a64015f2.vert.spv b/packages/ludic.render3d/shaders/spv/a64015f2.vert.spv index fce8b9823e402f40161d5881ea1b0a427b571da6..917e392d93df8b3c3f4263e6b2680598bf772b94 100644 GIT binary patch delta 166 zcmcbh-lDs|&1hJ715gP9ojPQJ?|&bV*$SEl()f*@gT zAl3q6cLo-QeVdoE_A|$71DPB^p`AedO(Vu0#@_|x$MiGV>oBk~%mlJ`L)C!96@Ys7 a0BJ@b76xK#C?8}6NDRi`w>g%xmn;WchTR)GgP9n2O}@({&bWK?SEl()f*@gT tAl3q6cLo-Q-J6%P_A_fL0GT_1LX1Ex48+z@K1ex8494HRc_L>q7XWv{7FYlP diff --git a/packages/ludic.render3d/shaders/spv/b4587cd4.frag.spv b/packages/ludic.render3d/shaders/spv/b4587cd4.frag.spv index cb196a62d9f9ce93697fca76684b9f336e980466..ece2244db1a452e6686c90ed1ce8346324a72923 100644 GIT binary patch delta 174 zcmX@o%lxC4nU|SKnVo@wk%60mgQ0aIZ$4x5##&HZ2MGiDia<6KjKA4cZnL1THc*NUDAWLy{-zOQ592oi`7!-W_Buc_ kfwnR<0r?;`AaQG;p1(j%AS)Pwav**gkkPVP&|vd40Ai#ZIRF3v delta 122 zcmey-%Y3AlnU|SKnVo@wk%60mgQ006Z$4wg##&HZ2MGiDia<6KjKA4cZnL1IHBjm=8v_GKIU`UC#4iIf8aKNdY@P-H Dj%pR_ diff --git a/packages/ludic.render3d/shaders/spv/b4587cd4.vert.spv b/packages/ludic.render3d/shaders/spv/b4587cd4.vert.spv index 82264a1394c1c547dab7db4c9c55c099f90e09e9..963932d21b5bd9c0cbb1e02020c9fead681958c1 100644 GIT binary patch literal 13336 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 D*SWVS literal 11368 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 literal 2988 zcmZve&2Ah;5XakI?AS@b&bLEMSbq=_5k)=(goG4X2q{6z0SR%7)EUpr?vB#lSV5Sr6iw&j zJ9=N0OvicW<3xI2lfTG=_*Ub3eDmDb^Qq5@O5T;PbUZCXS#^AM5$o8`$~um3zl-xU zXW~QtJP$HJ_r4bWqjK!Cd|DUHNu0YL_psjiCV4TQG=7wXP>$pz`~9@JVE$23OD1%m z=i=Nn6f;lAZoTu7*RwqJa+D$FPUpPa`ktNms%*@hHm~EVoKG{Kgd=fv@!I_MK0hfs z-)4-r@J))i5&iB9r+kP(_i-`$ileaDqViTdS#lCMjeh*)IDS-Ad3*S}#+9D8$uetP zjlM}DUlbFjbFTILKXbNvUlfJz>w3@Aa*DoM4ZR@CT(U*pDo_Vb(jYYh&vB9E?V7e=JXlmsg90V7FUV`&ORrq1+Vck$KdQ+Pm^j!$wQ^sUx+mA3foxZt-JV zKN`SKz2V2UesYBGP&$5cgN+uk$%(beMQ;yc9$5R4jO7ez?DdiSs!dH3&$2zSY08%5 z9d;-$%7_blWf*r5?5$y(9qd3R=v?*yJ2Z@a!@e<$y}_Os#vKEDY8ZD5EHjMU!6t@r zkHCUq+##@;VcZ?C7lx5**h|C6C+wABoF(i>!?+({KN-fo0QKrySjQWP{8-@m9 zw+$OE*j>YR7VJP6y2qx|)ZT5)Xj9+#(GPxX>!;T7qb2;<>c8Zc9& zQ2KSZ9^+y!Nw-by8#12QtUr|a=#vKfVqv3C8u8Gjji+(+Nj!AQIO3sC8jN_@=#!@L z(I$=fXj0=7Q{(EB_-K@I#7CPn81b;tCheNoXp(r;_LlsjM;P`M`9+IE>9kK4Hd>_a zx5Y+-%z*2jhSK@In{Geeb*#xc#3mjwv@`er zI&n{r(Y2M^Coyy{yt9wfaXH_iaQ2G+IbZA@=`hZVIlI#T-1z!X?LD#Iyng*a?R~L- zxcqZxes|&1hJ715gP9ojPQJ?|&bV*$SEl()f*@gT zAl3q6cLo-QeVdoE_A|$71DPB^p`AedO(Vu0#@_|x$MiGV>oBk~%mlJ`L)C!96@Ys7 a0BJ@b76xK#C?8}6NDRi`w>g%xmn;WchTR)GgP9n2O}@({&bWK?SEl()f*@gT tAl3q6cLo-Q-J6%P_A_fL0GT_1LX1Ex48+z@K1ex8494HRc_L>q7XWv{7FYlP diff --git a/packages/ludic.render3d/shaders/spv/b964507f.frag.spv b/packages/ludic.render3d/shaders/spv/b964507f.frag.spv index 1e9677a15bfa13a7e635054862678dbcae7f21b6..e726965e73a7f331f52814db52b27dd8557e893c 100644 GIT binary patch literal 3640 zcmZve&vO(-6vu~zgdj*jeoMrKpn^n<3Wy@fiU?T6LCdndq-vb(%(_6(U%$%q)Z&gH*cR*x z=7O6+)%FEbB0<3Ty2f3>tdnot`uNtlaulCCe__A}x<2ig zHj(wTJO;rpay}#K+s;TgCta4uPPbe0aTurFZe@$F&2YS_LHgNX$?4Ogh~hLFbdrkC z1Ozq?hegs&vr$qwU#~f~Uc}DVOmM-;Wj~7Z&#QHF!HOomEWDO(=gcG3;z~{Uq)6M`1V0vYcC)#Pd{RvmTYY35#==Z;>xQCQrM2WAB@?OD5OwO&r*hXZV6+ zk4&Dy4oW6(TI#g3wM^d7@W-9wkGE)g?w9XFM#nt{!M#xIyP|oR_ZE^vwKA&`|~Zdts`f5P8>VV;#G{)VE98` z2B?{T>MRZa{GV$6@%<$KZ-`@u|MMDYF#I7?muW{NUv%T+XZfZWHElt9YBn}7WUJXG zTg^7vYBn-=^^Qj3RPu*q@{NjuCtg+78Cw1;(tBvht+#m758uLXQ zHn)-US`{ZxiHq|>ZmYvAN8Z)^xA_m+CSR5O&4UL`ZoMb@iv!;`@-@k4*5+51v?DRS zug)6m(Ahm-*PLcD@0fN`x5578JB_paON2YZmbc5>XS^brcSz0W4I=a1)NI~ZTIVtK z8XNdWVw?eW7*1Q!F8G9*PinI7^RQ%meya7nN$M^(aPvuxg%dM=*oWGQ@7;4fII-In^7H9M*Kf;u|0ThyGr(ETVo-t-IVaMnLk1TSf%{jE6Ay{Hc3 QESdkKD44_k)%=qBe?#z6CIA2c literal 3588 zcmZve!E+Q<5Qis(gv3Mw5+IR?n*~19G z1rOf2VtMc{usnM3;2+?@yBAKLy=hrm~yo*55qWZwMtuj?S{i$Ez(a0=bSz*iYQK_ZZj$Q zMDUv9y&`F)*&r#LuXV?^i`e;^aKC97_B&CWe^H*B3a)6=&cd5XD;j2lPrGR=FLthH zdGlVNuN`uFY=>bp>Nle}33q$QrsKXwx_&Q92epphJkk|Wx1H2FZg8XpKavWH-rVV6k)W!?2aN!#L^o z)4`rQJMChau63OxZFdG?E6TE*R~g0gOl`9r_4N`K=ZxdcEbWE3tiM;jZNHZ^LtSO& z-p(2D=?S(}?@Xj1|yj|qOZX8D0w#3@s+&*2{NoyT>GYqS9ozw+lzx(Ju9m!yE zJm+-jc2xn9$!1t;0|! zs?vqsELlG+(=)iGu0np{i`p`IMSBJ^IYHdiB{IDPd+N<(-=3a=p1MPi?Ca?-=*=Ip zucwEir#?B4?CUR9x~)oosgj8k`?vSWm!FWw-MjJa+p^^i8N_;9|C&q>z@N`nB{PhT zX%E}d#u$EK4?V`c!XA5!yMt}$fSn}<*p|n*1K39%BR1GwkI|E0pL>j61dBaJ?}2qZ zM&E&D9wR4UJ&)0AVD~*npMgE_82ttI&|};s>|2k~Phj79j6MSU!DI9g*iRm#f53kB z7`+4btHwG7<~dp5!idsBVe;0qd&loc#PfvTksft0k-5Z`U0%sG3p9- z#$)sW*jbM?Dz@ga<%(^Hk@wU-jA8OhDLVOv_UOqU^vJ%R-hiH5LXT|vW5EIaq33@k zW$m8Oj{I!6dC>XAH*7JO)?c|F)9MeCPw71Qh+RY9BM%v{E0s(hGEPb+*YHgo*pp}Y zf@63ohMt8znuTRmfx3r?(W>?n!ZR(*EKn_rHRhonHpu7OieN_={5L1xy#@# z{}SPiu%!;EW7eyZsVVw5^@PmtrvFkesZJr&d$ECkEXG~XQ{jwFeFdK|^GSd8ebQU; z`I*jBUyGX9z|AN95>Cwc;XCv}e9tOkHq)$ diff --git a/packages/ludic.render3d/shaders/spv/b964507f.vert.spv b/packages/ludic.render3d/shaders/spv/b964507f.vert.spv index 009d9a14d5c924d84b66707f34ec396ac163b152..8d24cfc73f8af254e88b9cb1653ed02e688a4f0a 100644 GIT binary patch literal 12936 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 diff --git a/packages/ludic.render3d/shaders/spv/b9fc2041.vert.spv b/packages/ludic.render3d/shaders/spv/b9fc2041.vert.spv index 9b3f16fa25e66632bbea7bca4c09cb70e3d083bb..289c8479bfc9146b211d0ed028c8764386933e3c 100644 GIT binary patch literal 12992 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 literal 11024 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 Y6vKC*07w%^AxIKt(T~j&CHETw02?AoC;$Ke delta 404 zcmZpf&Uj%OBQGL{YNRuK^Aqx<@14$5H38WJUK>T-5c~&GovOLIGkbWQq zRuAGM%YTK+b3o-me3-m21JmaD0*V}x)LI0ONlI@@LJQX$Rwf s0`jXx*1`FofqcyvemfnYZdnEfDTXgV0gxt;LXafPqOY5eO71rV0GD_`@Bjb+ diff --git a/packages/ludic.render3d/shaders/spv/bf3151c8.vert.spv b/packages/ludic.render3d/shaders/spv/bf3151c8.vert.spv index 4f89b7413612a8e391a319f3343295ce063d000f..1c2a8d8cf11d7e8c508bf3fed3030afe221e4a41 100644 GIT binary patch delta 166 zcmdmD_ri{snMs+Qfq{{Mn}LHNY$9(wYX~C)L+HjreP+gx$qSjq8ACVkWPZ&k2omOI zU|`S!Vs{1>hS1GhS=TeiY6F>UK%oGj^f!$ddl)|u$dBn~ve#i?W#9tJ2LbsYH6U>X dpq^kL4MYs0Kx_@=gRB6F!T6z@dpVbj0sz@j7f}EJ delta 114 zcmaE1x5bW^nMs+Qfq{{Mn}LHNcp`5+Yak;7L(s-TeP+hM$qSjq8G|hM>(`S=TdbDgc=QKq(+%5CvjuC?BL8BnIOLZ9d4kToeF&ni2{C diff --git a/packages/ludic.render3d/shaders/spv/bfa15301.frag.spv b/packages/ludic.render3d/shaders/spv/bfa15301.frag.spv index cba1f6cffa9b74d59d8c8d077c4aa888207e0724..89263571b4e13f54b510bcc1171adf780abab1e9 100644 GIT binary patch delta 603 zcmYk2yH3MU42DgULMs||;3C09$UqUDkeE+9VJO6%?o#7&TES11F3k*9+Z# z&j(5o&v6>RiTohEy7MDMbU8_5-N+06bDa1~pP6IHz(LOKrR!bar`197t3PQ&HaFoq zd>e1_GMq-{A=HaG&g(podLh%vdELqM$xJ8b^mXBEY=EWH1If7r!6K<%%Jd-FC~I1K z4YRT5F8rrvw-oPz?dL+Pj)~{-zn|qWzKNO|zTAka0u_#uzKe zyak%-z%6O)V8?G2Yj_H>;p}im3C0*J$lRNz<~+y$ceTBx*ag3iMoq zkbMPTz}m{ku=AYtZrBrM;hQrvcP5|Kn`Nq!Jts0F^HP!E!+bHCha&ROjpEo1BKO7* zfl|irB+K8$VL!UQ4`XBuIn8oj9Q6NdoaD<`Xn0u`HG?ZRxP8pJ{q)y(RYMN95C&o& zU-Bw~BJ&aY3sgPZ!|m>_Kv&Kz!|2wC|@oRizrc*list z?n^C6RocmO&2Aon+K3fY9MgiBV+WZRQTYUJOmRXd`Kj5%Gf)S?3FovR=GZ~z4b&!> zcU>U9>j!%|UxMF9qgKvc@YCXC%02LgQ*Ujdn`gTS_OPxevOHal{{@w=>ZfCKP5l8X CUOh+v diff --git a/packages/ludic.render3d/shaders/spv/bfa15301.vert.spv b/packages/ludic.render3d/shaders/spv/bfa15301.vert.spv index 00e477cbcb138af150dea2a269485bae4f634e03..a8db43dc088b5d012d796f7b28496b704c92b040 100644 GIT binary patch literal 12992 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 C?gX>| diff --git a/packages/ludic.render3d/shaders/spv/c57b4f14.frag.spv b/packages/ludic.render3d/shaders/spv/c57b4f14.frag.spv index 7c834b997d7bf072604d250612465925587ba738..b85661eac933d75e0737a890ac6fc1f8b0ce2cdd 100644 GIT binary patch delta 585 zcmYk2y-LGi6oyZl#I{H*s8AFHH4a)kxrx}iN$(*bm9|(Al&Cm3bZ}8yt@ZOSiHkQN zNW2?wz}3as_YL_<4jl45=RLpqs{B+OGw0?-44IUIynQ;#GWzP>DsK)&jrRcn5ISFb~@N Qcs2e%nqD=E7pBVje`=CPVgLXD delta 553 zcmYk2Jxc>Y5QgV+yZJ!RfDw*Z`PCS$>_iA!Nx;Tl5G4r)1m#pLEK=CS?~he;XXhUf zil)NyL*eDNFJd808JjhYDA3MdWPvIO=qJ zho_xLv?#gDa{E!cD_|{88J`^NwU5qm%yL8Xr)plDYMuK10g|(DAHInJ% zhh3c)QZHDY?CM;Ay0$vm(N|<>3-HA3Lb6jJvDM2~kJDb|(yy;!qXne6FRd;Wxk4g7MZhh?yBw-XPMLV<(v}qveyhIgOL<5sPq-j)`Ia0VifT?Gcg29J|SU7i|g5 z&S&^fwY8qJ0lz0nGv^oZ#nk7BU%`tz)#fs~Cvkp*vxjxirblb?e`xvIak@Pbmi__M Che5&s diff --git a/packages/ludic.render3d/shaders/spv/c57b4f14.vert.spv b/packages/ludic.render3d/shaders/spv/c57b4f14.vert.spv index 55a5473344437ce6ee3c76c7852439eaa953c12d..45e56abeaeb7499d9674273404bb3e7106c3bf14 100644 GIT binary patch delta 106 zcmX@Z)4<%PB27qLc`AR@O2!P~427=_-kod^*zoGI>Q2F1RU&^i*tk(u=1!?&Ll>Vj>V-Mqh z1@dG1ne26dt_Lz1z5xl48j!d(P){)<0|UshAOPYY1{wnLGf)^V4{|aHz|@1Bh|C8% KY4c=yYoj*3elwB|AX${m`%*X(?2q?n< g;vZ&X09ynU2J=DkAd5f%rXFN4GXKYBQG@&408FVf#{d8T diff --git a/packages/ludic.render3d/shaders/spv/d48d6a48.vert.spv b/packages/ludic.render3d/shaders/spv/d48d6a48.vert.spv index 5d50274f3b15b2cf82dcb188e4d834186dd39ee5..b49148cce327ad14a6797cdcf86224bf3043b19a 100644 GIT binary patch delta 91 zcmex!g>l1GMqXwnWp)NOMh0#M4u;(uc~^_uYBR6^*$fQZSr{0;X~fvW_&b37n0_XE g9R^kgPN4iwARnX#B(B52#=yhKz_4rcLGj%|03$aL?*IS* delta 39 vcmdmRmGRFNMqXwnWp)NOMh0#M4u%~Yc~^^b>M*b|@GvqkY~TDYU7{zasG}cOKMMd0<@lR?~tySY7ZI^;L`2qonCdEKeiHd_mXD5eD6~Q+U zBv0T22!fL@;_Nx`rsNBk@H^-GbHDr2|LRv%#henNAZA2K9K2T+_0C2?h`ZA;iabB` zF3$sjDB^3R`gIfx!r^TYLD7VrYG;u@_|Iv@o<6s*pQ^~Yx$yj}`?T6g9`#ps#O4MX zsyIhzKwjYl1ertVYdOyQ97tc0J~{8Vq+gUiIp?DgFv8vZ(%In)nXgFkmmdf83*T!`{SaFWm3$?PAQnK(HB delta 555 zcmYjN%Syvg6g;;{ueG+=Ql)ffebw65N8?WHsvxfX0YRckF;G;Z;=)DOuCuBL{(&I* z5y6#zuBIn`85AL2#wU@r?4`;&WO*C}yo}vNyIwt_+ z975mC@T|{)^mEoH&-y*<=dDkk@%zHvnlN#+8AzT<5YPGr>wD>M@yBf(VY$UFMX{3<9HgzdNC#(^h(wcOKvYu2p+i4{L#Dd<1q8{i zwZ7EW*SI=5yNR>U6O)n)m*jWP-Tm+W&HPV3n@;HiB7HI}gYt2i-B1cQB67UtxUOkA z=KhWi6a~+H7(aCFinDiQyNG1uA&hOiR^>mZ>zylO6YpUZIn`a$Iyecd1HYqurR!`y z1JA(M@Fvf~X=ENkT}g0K=YiBykxowP-AM0`baFyp6wby5SUNnAoJf!$($z>0{LP`7 zQeMDp?0E(Moij=?UxSU)R4IpvSMlG3Gl%hI)Ku~1ji5QWFKSB+9y(Jpjl%}R771s9UyPJ9A4ibRuQKvYu2MHj_q$g17>0)k|3 zW3ATu6Cc2(uiyiCPP{3Za1y>bGjr$Ww-(ik`J6c=G9j}vEnoM=J!L(J$kn0e`?llR zXU8s36rO&Pzwq6LcY5ji$Q0x$$sPGl(C2c98oJBb~sF8JsW(Zpvo+88m=6;e{50Id+hF z2gVwh_j-lCOS{`CkHFndr=Ic~xV3OM=6CSweyP5WZeIHXVh`)!Esa;>zhI=R#-TO0 GY5W0!PEk4l diff --git a/packages/ludic.render3d/shaders/spv/e86f78e8.vert.spv b/packages/ludic.render3d/shaders/spv/e86f78e8.vert.spv index 2259b608971424f76d26daf6436aeab4d803a8ae..ba388ee75391ff40ac92763e1caf75b389936457 100644 GIT binary patch delta 166 zcmaFEzd(SOnMs+Qfq{{Mn}LJDb0Tj%t2+Y&gU80gY(_@+$#)sW89g?C1(JdwVQwJS z0%CUt76y;avds2OvD!c;2T;fvh`(vX*u(fPKz>X=lf4cDD+4Ex?Fv-`5?27~aRbtf XKr95r)=)mk3Xm9#@3Fa+HJu3n)WH;N delta 114 zcmZ1=@P?n4nMs+Qfq{{Mn}LJDZ6a?xs|y1IgX_k^Y(_?x$#)sW8C^Gj1(JdwVQwJS r0%CUt76#YNvds2OnhHRsGf;>Th=qXI8p;PL2Z_P>uA6tVrZWKm?!6Ca diff --git a/packages/ludic.render3d/shaders/spv/e9b6300c.frag.spv b/packages/ludic.render3d/shaders/spv/e9b6300c.frag.spv index d8d60239453082624f535066f35fefdb7144b007..d5d2f2732fb08df3c3cb5170f6617aed96d04089 100644 GIT binary patch delta 603 zcmYk2PfEj35XN8AR9l+Tg>E8UsM#pih1J&nu}Rd3^bP@ureYBkqS8edJ%UKw)QvX~ zBr9*=1zd^OaP9ZS_ev&A@_zHpOlID5?Xyo-Du3`4GJ6SM55sws1az Vv&Mx(TbYl>`=hB*z2wVqa(}^HI;j8v delta 551 zcmYk1K~BO@5Qc|Rlm;6X>H@+-?aHVNs|W~`){SxD4NOe67>S7{Rl~vsXE0@h8*gA@ zdI|4fJOX#%|7#z4(@fj%|7YgS`)N!YcF}NFMG8`pvYdU}4`%I9L|(5)aU4dY@bPvC zloFn1@@}qoPBQl>%?Fj6E>#)kXeR wFMP#4@W*WCDei;cHolhZfp@Q}-afh={11@qVI92say1_UL#-O5mOUse0DMw41^@s6 diff --git a/packages/ludic.render3d/shaders/spv/e9b6300c.vert.spv b/packages/ludic.render3d/shaders/spv/e9b6300c.vert.spv index 17d7ba644bdc9e4b508e913570ce989882721e2b..aff7eb39ecff1a993a79a4aadbcce8fe2291885e 100644 GIT binary patch delta 184 zcmZqB-J;9O%%sfDz`)4B&A`EMXCiMo>n#QbhT9uEvza78tn{4tu+*ZG)C$kMl++3a z237`khTEHYnKv^Df~2{DSPO{V8CZbA7g-N8$7%za96+IKK>ST3#vaDM4&=x5Gui6^ n&DaEF-+-zCi7Np0+yv5$Kr9Tz)=)mk3Xm9#e|z&@&ci$aV^Ac- delta 132 zcmdm@+n~$K%%sfDz`)4B&A`EMb0Tj!>vaYOh8r6@vza78tn{4tu+*ZG)C$kMl++3a z237`kh8vrCnKv^Df~2{DSPO{V8CZbA7g-N8YbpSl*MLHdKr9Tz)=)l3IYdFurPr5Nx%I^IV%`XO5;n4<1dFurPr5Nx%I^IV%`X-R9K)Cr&vNI3|=_)5*T5!-De H7|WdjvV0ar diff --git a/packages/ludic.render3d/shaders/spv/f2952361.vert.spv b/packages/ludic.render3d/shaders/spv/f2952361.vert.spv index 7051758fe160bee276d12aeb800f612c5c42e0e2..c19cd525b900043bd23915d8fdf59c40c651a077 100644 GIT binary patch delta 166 zcmdmD_ri{snMs+Qfq{{Mn}LHNY$9(wYX~C)L+HjreP+gx$qSjq8ACVkWPZ&k2omOI zU|`S!Vs{1>hS1GhS=TeiY6F>UK%oGj^f!$ddl)|u$dBn~ve#i?W#9tJ2LbsYH6U>X dpq^kL4MYs0Kx_@=gRB6F!T6z@dpVbj0sz@j7f}EJ delta 114 zcmaE1x5bW^nMs+Qfq{{Mn}LHNcp`5+Yak;7L(s-TeP+hM$qSjq8G|hM>(`S=TdbDgc=QKq(+%5CvjuC?BL8BnIOLZ9d4kToeF&ni2{C diff --git a/packages/ludic.render3d/shaders/spv/f34dce08.frag.spv b/packages/ludic.render3d/shaders/spv/f34dce08.frag.spv index 3114c34f02a791470cdfd3040c9d69ad14be9ba6..11860be71fc31ee11ffa451e7ea362da4aa30f85 100644 GIT binary patch literal 3040 zcmZve&2Ah;5XalQ*l|dR9rEQ66UK1>L#)ULKuAc5g^&`Y9FPzYna@wLBi}o^fu)opbAM z-*xSx8wqj3*243_qt74Rt()}jd+#3*alws4ATb+m)x9K7`bnJ6acqhoTN2CLSh6|y zs{|8i<5ngA1@W~$uc|oB<9U*aDRHar)xZ~3Hpz=7tHRhzfgM-rq>H&0?0OcbM7_=#c4Y81+0(2L-&&ZDZ*G0v&V8C!@~(Wf=Sf+VRnOO!xla6|tV4YFUF>J; z`#teR_9QDLK-az={F8F((`;Vn&1o2WHmu=n@0(@$bk_JuTomO*c5+zH%YDpoT+2!5 zI?n~36#2rFvY+pK;PoO)yliC=&Q8a?()k{r`l@WqnC`r%RoTu{9~Z~s>ho=cF@w*~ z^4_;;eX~3)M8EsuzkG;6*U{-HKQ5L_RNiSRjZX`9V~D>Ta!v9o>o#BKxH9nWu*@7+ zgKrkg7li}UF`YgG|Ie7MVN4K(uIu{1lX8x}It{%RcvJhb%BNCh%5Ny2#RZ4CCRIQU zY%4E`?R5WoU{VlCrt0r~H-j%J$~N^{QJU+GE?0gMG|}aXmbs=rpUdGl)Tpj$r}w2< z9XGO~vAZpdMs2?<&(_O`3baBl>PKz9jfTzH;-`+(wtmhS|7hvQ zwtmhBKlR3VZ0lza@f}LX&;DVfMQrxW+U(O{k3%lzekie;m$g2W6{}56lh3kUv1!Uy zFUrUZduAAS5bT9v>>cbt2IyGU06R2{b;CY0jJ3gz4C9W0eQ6kX3oJE^y972f zjC%xD7{(m}TNuXO0efl~T7Z3H821J2nPKcD?0dtwA7DQihIU{-8HPS!KO4q<0QOwzFgh!q7dn45O)it22X5ed9+z__3{@TE~x;@MEk0k{ih%e*SalYWJ$V zq0dPAHHjxLHgR{v=AB%B?j7A%8%-X4JG#FwwMIO8BnEz6e$gW1R;1ge_6?a6Z4wvB z9B7gT`)FySNgDakqRppy^hrLnNgVmmBn?JBY&1#J{OFNJesrk$$*FnuNq%%m9Qn~B z4Msj}^hje5(INS`AGYKd4Z^Um$S?Yfq|?|_Z1l(7u`M>bV+;&i??$!tZd6SL=dN({ z#=6)~Z0f*j@J+FQ-}v-UHTag;-#veRPwltG{`&Hdy}c*)J4YM$_GQM1cj=5F4xj3P e`k|>!z0f|8(_ntijK*I6C4@8jTXyn8>Hh#Sb0Xvb literal 2988 zcmZve&2Ah;5XakI?AS@b&bLEMSbq=_5k)=(goG4X2q{6z0SR%7)EUpr?vB#lSV5Sr6iw&j zJ9=N0OvicW<3xI2lfTG=_*Ub3eDmDb^Qq5@O5T;PbUZCXS#^AM5$o8`$~um3zl-xU zXW~QtJP$HJ_r4bWqjK!Cd|DUHNu0YL_psjiCV4TQG=7wXP>$pz`~9@JVE$23OD1%m z=i=Nn6f;lAZoTu7*RwqJa+D$FPUpPa`ktNms%*@hHm~EVoKG{Kgd=fv@!I_MK0hfs z-)4-r@J))i5&iB9r+kP(_i-`$ileaDqViTdS#lCMjeh*)IDS-Ad3*S}#+9D8$uetP zjlM}DUlbFjbFTILKXbNvUlfJz>w3@Aa*DoM4ZR@CT(U*pDo_Vb(jYYh&vB9E?V7e=JXlmsg90V7FUV`&ORrq1+Vck$KdQ+Pm^j!$wQ^sUx+mA3foxZt-JV zKN`SKz2V2UesYBGP&$5cgN+uk$%(beMQ;yc9$5R4jO7ez?DdiSs!dH3&$2zSY08%5 z9d;-$%7_blWf*r5?5$y(9qd3R=v?*yJ2Z@a!@e<$y}_Os#vKEDY8ZD5EHjMU!6t@r zkHCUq+##@;VcZ?C7lx5**h|C6C+wABoF(i>!?+({KN-fo0QKrySjQWP{8-@m9 zw+$OE*j>YR7VJP6y2qx|)ZT5)Xj9+#(GPxX>!;T7qb2;<>c8Zc9& zQ2KSZ9^+y!Nw-by8#12QtUr|a=#vKfVqv3C8u8Gjji+(+Nj!AQIO3sC8jN_@=#!@L z(I$=fXj0=7Q{(EB_-K@I#7CPn81b;tCheNoXp(r;_LlsjM;P`M`9+IE>9kK4Hd>_a zx5Y+-%z*2jhSK@In{Geeb*#xc#3mjwv@`er zI&n{r(Y2M^Coyy{yt9wfaXH_iaQ2G+IbZA@=`hZVIlI#T-1z!X?LD#Iyng*a?R~L- zxcqZxeL+{3k>@1QXR(ei+SZYy8YK3QBN@@iI z11keNL+|E|ET@?SLDJj|3=CR8?9RXf6z*l;%@V5(WU>K;I)KvOG-B*w{7xW0rk}}P q2WSQtP`(Su2dM#xD**L$18E>)5CvjuC?8}6NDRjB-CW4?Spop{=pT>( delta 132 zcmbQ?{ltrxnMs+Qfq{{Mn}LI&dm?W=YbPTEL)XTM>@1QXR(ei+SZYy8YK3QBN@@iI z11keNL)YewET@?SLDJj|3=CR8?9RXf6z*l;&7!FQWOe|hfQUg9h^?V~kaCb1jNi3+ IDbHsK03YZXF#rGn diff --git a/packages/ludic.render3d/shaders/spv/f4382918.frag.spv b/packages/ludic.render3d/shaders/spv/f4382918.frag.spv index 30d954a7d97dd7c2ecc779248dd7366801161389..c226f79f765b98a8a8ef815d3bedf93c3209be4a 100644 GIT binary patch delta 211 zcmeyfm36^3R$gW%Wp)MzMh0#M4u+_WyxVm}Bls8?O5=+&5>xWa8GwKl2qQP&)U9VT z1W73Zg@6=;I|B;?h_3`v0|X#`Bvf7q#^2m&;xD184U}R73IzkDWBQrwb$})UEoBG+ z@)vVK#3dOx8A2!D^-(qq1B!+Mu>w$6IFJSbkeD@;53&>lK>WEtIxWa8GwKl2*Wqu)U9VT z1W73Zg@6=;I|B;?h_3`v0|X#`I8ALwy-f^8x^)%^9iy diff --git a/packages/ludic.render3d/shaders/spv/f4382918.vert.spv b/packages/ludic.render3d/shaders/spv/f4382918.vert.spv index 7051758fe160bee276d12aeb800f612c5c42e0e2..c19cd525b900043bd23915d8fdf59c40c651a077 100644 GIT binary patch delta 166 zcmdmD_ri{snMs+Qfq{{Mn}LHNY$9(wYX~C)L+HjreP+gx$qSjq8ACVkWPZ&k2omOI zU|`S!Vs{1>hS1GhS=TeiY6F>UK%oGj^f!$ddl)|u$dBn~ve#i?W#9tJ2LbsYH6U>X dpq^kL4MYs0Kx_@=gRB6F!T6z@dpVbj0sz@j7f}EJ delta 114 zcmaE1x5bW^nMs+Qfq{{Mn}LHNcp`5+Yak;7L(s-TeP+hM$qSjq8G|hM>(`S=TdbDgc=QKq(+%5CvjuC?BL8BnIOLZ9d4kToeF&ni2{C diff --git a/packages/ludic.render3d/shaders/spv/f4a2b586.frag.spv b/packages/ludic.render3d/shaders/spv/f4a2b586.frag.spv index b52469090c41ec7bc3f77b64c867bc700b275bab..d51f1c25cb157c0eec0177845cace4fae619f7b9 100644 GIT binary patch delta 350 zcmX@`o$1SWCSGPHWp)MzMh0#M4u(GydGi^6Y^?1Ucl{0&ER8QIj?YNVOwTA`U}a!o z_yH6vi!aJAVPF9Be}dJdWTvG-_`ksXyrNvF{O`?y65_0!Afpt4LR^y%%1Xz|0a+|S z><%PB27qLc`AR@O2!P~427=_-kod^*zoGI>Q2F1RU&^i*tk(u=1!?&Ll>Vj>V-Mqh z1@dG1ne26dt_Lz1z5xl48j!d(P){)<0|UshAOPYY1{wnLGf)^V4{|aHz|@1Bh|C8% KY4c)X4m1YDR|2v@ z0K^9wD+gq=K=~kJLF$qD$m&7XfaKXG7s^WWf>=yYoj*3elwB|AX${m`%*X(?2q?n< g;vZ&X09ynU2J=DkAd5f%rXFN4GXKYBQG@&4088>S#sB~S diff --git a/packages/ludic.render3d/shaders/spv/f4a2b586.vert.spv b/packages/ludic.render3d/shaders/spv/f4a2b586.vert.spv index 1d28416e83d7c287200caeed74f1ec000d6df0aa..db1380f84b01303d93d5437ff1bda948c369c003 100644 GIT binary patch literal 14008 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 T!?_=U#otpoZn<&sw^aWJQPk-o literal 12040 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 diff --git a/packages/ludic.render3d/shaders/terrain.frag b/packages/ludic.render3d/shaders/terrain.frag index a347dd30..b2081fde 100644 --- a/packages/ludic.render3d/shaders/terrain.frag +++ b/packages/ludic.render3d/shaders/terrain.frag @@ -536,6 +536,11 @@ void main() { #ifdef DEBUG_MAT col = dbg_mat; #endif +#ifdef DEBUG_WIND + // The wind field itself, painted on the ground: R3D_DEBUG_WIND=1 with two shots a moment + // apart shows the gust fronts and shows them MOVING, which no still of grass ever will. + col = vec3(windGust(p.xz, u_time)) * vec3(1.0, 0.95, 0.75); +#endif #ifdef DEBUG_ALB col = dbg_alb * 3.0; #endif diff --git a/packages/ludic.render3d/shaders/wind.glsl b/packages/ludic.render3d/shaders/wind.glsl new file mode 100644 index 00000000..c17054f7 --- /dev/null +++ b/packages/ludic.render3d/shaders/wind.glsl @@ -0,0 +1,44 @@ +// ---- ONE WIND, and everything in the valley is moved by it ---------------------------------- +// +// Before this the grass had a gust term built from two sines and the trees had NO gust at all - +// just a per-instance wobble - so the meadow rippled and the canopy over it swayed to an +// unrelated rhythm. Nothing ever crossed the valley. A real gust is a WAVE: you watch it come +// over the grass, it reaches you, and it goes on into the trees behind you, and that single +// fact does more for "this place is alive" than any amount of extra detail. +// +// It is prepended to EVERY stage (programs.ludic), so the grass's vertex shader, the crown's +// vertex shader and the water's fragment shader all read the same field at the same world +// position and cannot drift apart. No uniforms are declared here on purpose: u_time and u_wind +// already exist in several of those files, and redeclaring them would be a compile error in +// whichever stage happened to include both. The caller passes what it already has. + +// The prevailing wind down the valley. Maroon Creek runs roughly north-east, and a mountain +// valley funnels its wind along itself rather than across. +const vec2 WIND_DIR = vec2(0.86, 0.51); + +// 0 = still, 1 = the middle of a gust. Mostly low with fronts travelling through it, because +// real wind is gusts separated by calm and not a constant shaking. +float windGust(vec2 xz, float t) { + float d = dot(xz, WIND_DIR); + float across = dot(xz, vec2(-WIND_DIR.y, WIND_DIR.x)); + // three scrolling bands: a fast narrow front, a slow broad swell, and a slight variation + // along the front so it does not arrive as one straight wall + // The wavelength has to fit INSIDE a view or nothing is ever seen to travel: at 0.030 the + // front was 209 m from crest to crest, longer than the meadow you can see, so the whole + // frame sat in one phase and the gust read as everything breathing together. At 0.085 it is + // about 74 m and a front crosses a normal view in a couple of seconds. + float g = sin(d * 0.085 - t * 2.6) + + 0.65 * sin(d * 0.022 - t * 0.85 + 1.7) + + 0.40 * sin(across * 0.040 - t * 0.55); + // tighter than a plain smoothstep either side: gusts with calm between them, not a wobble + return smoothstep(-0.10, 1.35, g); +} + +// What a plant actually does: a small constant tremble it always has, plus the gust, which is +// most of the motion. `stiff` is how much the plant resists - grass near 0, a spruce trunk near +// 1 - so the same field moves a blade a long way and a bole hardly at all. +float windSway(vec2 xz, float t, float phase, float stiff) { + float tremble = sin(phase) * 0.6 + sin(phase * 2.3 + 1.0) * 0.4; + float gust = windGust(xz, t); + return (tremble * 0.30 + gust * 1.35) * (1.0 - 0.85 * stiff); +} diff --git a/packages/ludic.render3d/terrain.ludic b/packages/ludic.render3d/terrain.ludic index 4e065ddb..cac569ee 100644 --- a/packages/ludic.render3d/terrain.ludic +++ b/packages/ludic.render3d/terrain.ludic @@ -421,6 +421,7 @@ function terrain_init_finish() -> void { var defs = "" if r3d_debug_shadow { defs = "#define DEBUG_SHADOW\n" } if r3d_env_has("R3D_DEBUG_MAT") { defs = "#define DEBUG_MAT\n" } + if r3d_env_has("R3D_DEBUG_WIND") { defs = "#define DEBUG_WIND\n" } if r3d_env_has("R3D_DEBUG_NRM") { defs = "#define DEBUG_NRM\n" } if r3d_env_has("R3D_DEBUG_ALB") { defs = "#define DEBUG_ALB\n" } # Elimination profiling. Measure these by FRAME TIME (prof_ft_report), not by the diff --git a/tools/ludic-cli/shaders.ludic b/tools/ludic-cli/shaders.ludic index ede3319c..3254e32c 100644 --- a/tools/ludic-cli/shaders.ludic +++ b/tools/ludic-cli/shaders.ludic @@ -152,6 +152,7 @@ function shd_bind_varyings(src: pointer, word: pointer, collect: bool) -> pointe var shd_noise: pointer = null var shd_lighting: pointer = null +var shd_wind: 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 "" } @@ -204,6 +205,7 @@ function cmd_shaders() -> int { 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") + shd_wind = shd_file("wind.glsl") var outdir = "packages/ludic.render3d/shaders/spv" let tmp = tmp_path("shaders") if check { outdir = tmp_path("shaders-check") } @@ -232,13 +234,13 @@ function cmd_shaders() -> int { let depth_remap = "\n#undef main\nvoid main() {\n ludic_gl_main();\n gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5;\n}\n" # invariant: the foliage's depth prepass and its lit pass (depth EQUAL) are different variants, # and without it the compiler may compute their positions a hair apart and fail the test - var vsrc = "#version 460\n" + defines + "invariant gl_Position;\n#define main ludic_gl_main\n" + shd_file(parts[0]) + depth_remap + var vsrc = "#version 460\n" + defines + shd_wind + "invariant gl_Position;\n#define main ludic_gl_main\n" + shd_file(parts[0]) + depth_remap # A mesh shader stands in for the vertex stage (a variant whose first file is *.mesh): it writes an # array of positions, so it cannot be wrapped for the depth remap or take invariant gl_Position - # it remaps depth itself. Its SPIR-V keeps the .vert name, so the manifest and loader are unchanged. let is_mesh = Text.ends_with(parts[0], ".mesh") - if is_mesh { vsrc = "#version 460\n#extension GL_EXT_mesh_shader : require\n" + defines + shd_file(parts[0]) } - let fsrc = "#version 460\n" + defines + shd_noise + shd_lighting + shd_file(parts[1]) + if is_mesh { vsrc = "#version 460\n#extension GL_EXT_mesh_shader : require\n" + defines + shd_wind + shd_file(parts[0]) } + let fsrc = "#version 460\n" + defines + shd_wind + shd_noise + shd_lighting + shd_file(parts[1]) # one binding table for both stages, and one location table for the varyings between them shd_names = new []pointer shd_vary = new []pointer