diff --git a/changes/an-aspen-quakes.md b/changes/an-aspen-quakes.md new file mode 100644 index 00000000..9bb85168 --- /dev/null +++ b/changes/an-aspen-quakes.md @@ -0,0 +1,15 @@ +bump: minor +type: feat +An aspen leaf hangs on a flattened stalk and turns in air a spruce never feels, and the +kit had no way to say so. `layer_flutter(l, v)` gives a scatter layer a per-leaf tremble: +the vertex stage offsets each leaf by a phase taken from its own place on the card, so +neighbouring leaves are never in step, and writes the result out as a varying the +fragment stage uses to flash the leaf's pale underside as it turns. The flash is the part +that reads - a still frame of a tremble is a still frame of nothing. One uniform, one +varying, no extra pass, and every other layer leaves it at zero. + +Also fixes the sway itself, which was measured in METRES: `hgt * hgt * 0.35` is right for +a 40 cm flower and puts ten metres of sideways into a 14 m trunk, so every tall tree in +the valley stood bent over like a fishing rod. It is a fraction of the model's own height +now, so the tip moves a few per cent of the tree whatever the tree is and the base does +not move at all. diff --git a/packages/ludic.render3d/scatter.ludic b/packages/ludic.render3d/scatter.ludic index ed908ff9..551c88a1 100644 --- a/packages/ludic.render3d/scatter.ludic +++ b/packages/ludic.render3d/scatter.ludic @@ -19,6 +19,7 @@ property Layer { imp: Impostor, foliage: bool = false, wind: int = 0, # float bits + flutter: int = 0, # float bits; per-leaf tremble (aspen), 0 = none tint: words, inst: words, # INST_FLOATS per instance count: int = 0, @@ -128,6 +129,11 @@ function model_cross_card() -> Model { } # A card layer: crossed cards carrying a single-tile atlas baked from `scan`. +# An aspen leaf hangs on a flattened stalk and turns in air nothing else feels. Give the +# layer a flutter and its leaves tremble and flash their pale undersides; everything else +# leaves it at zero. It is per layer rather than per instance because a species quakes or +# it does not. +function layer_flutter(l: Layer, v: int) -> void { l.flutter = v } function layer_cards(scan: Model, cap: int, wind: int, cull: int) -> Layer { let l = layer_new(model_cross_card(), cap, true, wind, F_ZERO, cull) l.card = true @@ -473,6 +479,7 @@ function impostor_bake(model: Model, tiles: int, tw: int, th: int) -> Impostor { u_mat4(gpu_uniform(bake, "u_view"), view) u_mat4(gpu_uniform(bake, "u_proj"), proj) u_f(gpu_uniform(bake, "u_wind"), F_ZERO) + u_f(gpu_uniform(bake, "u_flutter"), F_ZERO) gpu_viewport(t * tw, 0, tw, th) for i in 0 .. len(model.prims) { let pr = model.prims[i] @@ -1032,6 +1039,7 @@ function layer_draw_model(l: Layer, model: Model, vb: int, cnt: int, card: bool, if l.grounded { terrain_bind_height(p) } u_f(gpu_uniform(p, "u_time"), r3d_time) u_f(gpu_uniform(p, "u_wind"), l.wind) + u_f(gpu_uniform(p, "u_flutter"), l.flutter) var mh = F_ZERO if not card and l.foliage { mh = model.height } u_f(gpu_uniform(p, "u_model_h"), mh) @@ -1154,6 +1162,7 @@ function layer_draw_depth(l: Layer, model: Model, vb: int, cnt: int) -> void { if l.grounded { terrain_bind_height(p) } u_f(gpu_uniform(p, "u_time"), r3d_time) u_f(gpu_uniform(p, "u_wind"), l.wind) + u_f(gpu_uniform(p, "u_flutter"), l.flutter) u_f(gpu_uniform(p, "u_model_h"), model.height) u_mat4(gpu_uniform(p, "u_view"), cam_view) u_mat4(gpu_uniform(p, "u_proj"), cam_proj) @@ -1298,6 +1307,7 @@ function carpet_bake(layers: []Layer, count: int, tile: int, res: int) -> int { u_mat4(gpu_uniform(bake, "u_view"), view) u_mat4(gpu_uniform(bake, "u_proj"), proj) u_f(gpu_uniform(bake, "u_wind"), F_ZERO) + u_f(gpu_uniform(bake, "u_flutter"), F_ZERO) u_f(gpu_uniform(bake, "u_time"), F_ZERO) for li in 0 .. len(layers) { let l = layers[li] diff --git a/packages/ludic.render3d/shaders/grass.mesh b/packages/ludic.render3d/shaders/grass.mesh index f7c3de5f..b5210fbd 100644 --- a/packages/ludic.render3d/shaders/grass.mesh +++ b/packages/ludic.render3d/shaders/grass.mesh @@ -38,6 +38,7 @@ out vec2 v_uv[]; out float v_seed[]; out vec2 v_rot[]; out float v_hull[]; +out float v_quake[]; // grass does not quake; written so model.frag can read it const float CELL = 16.0; float hash1(vec2 p) { return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123); } @@ -153,6 +154,7 @@ void main() { v_seed[o] = seed; v_rot[o] = vec2(s, c_); v_hull[o] = hull; + v_quake[o] = 0.0; } } for (int q = 0; q < ROWS - 1; q++) { diff --git a/packages/ludic.render3d/shaders/grass.vert b/packages/ludic.render3d/shaders/grass.vert index aa4b8b1f..e2f27f0e 100644 --- a/packages/ludic.render3d/shaders/grass.vert +++ b/packages/ludic.render3d/shaders/grass.vert @@ -41,6 +41,7 @@ out vec2 v_uv; out float v_seed; out vec2 v_rot; out float v_hull; +out float v_quake; // only aspens quake; written so model.frag can read it const float CELL = 16.0; float hash1(vec2 p) { return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123); } @@ -67,7 +68,7 @@ float heightSmooth(sampler2D tex, vec2 uv) { return (texture(tex, vec2(o0.x, o0.y)).r * s0.x + texture(tex, vec2(o1.x, o0.y)).r * s1.x) * s0.y + (texture(tex, vec2(o0.x, o1.y)).r * s0.x + texture(tex, vec2(o1.x, o1.y)).r * s1.x) * s1.y; } -void cull() { gl_Position = vec4(0.0, 0.0, 2.0, 1.0); v_wpos = vec3(0.0); v_nrm = vec3(0.0, 1.0, 0.0); v_uv = vec2(0.0); v_seed = 0.0; v_rot = vec2(0.0, 1.0); v_hull = 1.0; } +void cull() { gl_Position = vec4(0.0, 0.0, 2.0, 1.0); v_wpos = vec3(0.0); v_nrm = vec3(0.0, 1.0, 0.0); v_uv = vec2(0.0); v_seed = 0.0; v_rot = vec2(0.0, 1.0); v_hull = 1.0; v_quake = 0.0; } void main() { #ifdef TILES @@ -198,6 +199,7 @@ void main() { v_uv = far ? vec2(a_uv.x, 0.45 + 0.2 * a_uv.y) : a_uv; v_seed = seed; v_rot = vec2(s, c_); + v_quake = 0.0; v_hull = (dist > 2.0 || far || (u_dbg & 2) != 0) ? -1.0 : 1.0; // no back-face flip, no rounding past arm's reach gl_Position = u_proj * u_view * vec4(w, 1.0); } diff --git a/packages/ludic.render3d/shaders/model.frag b/packages/ludic.render3d/shaders/model.frag index 6a2e58dc..db536c38 100644 --- a/packages/ludic.render3d/shaders/model.frag +++ b/packages/ludic.render3d/shaders/model.frag @@ -4,6 +4,7 @@ in vec2 v_uv; in float v_seed; in vec2 v_rot; in float v_hull; +in float v_quake; // an aspen leaf turning its pale side up uniform float u_model_h; out vec4 o_color; uniform sampler2D u_diff; @@ -147,6 +148,11 @@ void main() { if (u_model_h > 2.0) arm.r *= mix(0.5, 1.0, v_hull); #endif alb *= u_tint * (0.85 + 0.3 * fract(v_seed * 7.13)); + // The quake made visible. A turning aspen leaf shows its pale, almost white underside, so + // the crown does not merely move - it GLITTERS, leaf by leaf, and that is what reads at a + // distance and in a still frame. Toward the viewer is the pale side; away is the face. + if (v_quake > 0.0) alb = mix(alb, alb * 0.55 + vec3(0.42, 0.45, 0.33), min(v_quake * 2.6, 0.75)); + else if (v_quake < 0.0) alb *= 1.0 + v_quake * 0.28; // the dark half stays gentle: a crown should shimmer, not flicker #if defined(FOLIAGE) && !defined(BLADE) // Per-plant HUE, not only per-plant brightness. The line above varies value by +-15% and // nothing else, so a stand of one species was one colour at fifteen different exposures - diff --git a/packages/ludic.render3d/shaders/model.vert b/packages/ludic.render3d/shaders/model.vert index 8f121ca6..643c55ea 100644 --- a/packages/ludic.render3d/shaders/model.vert +++ b/packages/ludic.render3d/shaders/model.vert @@ -54,8 +54,15 @@ out vec2 v_rot; // have been shaded since SpeedTree; without it a card crown reads as frosted. uniform float u_model_h; // the model's height (m), 0 = not a crown out float v_hull; // 0 at the crown's axis .. 1 at its rim +// An aspen leaf hangs on a flattened stalk, so it twists in air a conifer does not feel at +// all. u_flutter is per layer: 0 for everything else, and the quake is written out as a +// varying so the fragment stage can flash the leaf's pale underside as it turns - which is +// the part you actually SEE. A still frame of a tremble is a still frame of nothing. +uniform float u_flutter; +out float v_quake; void main() { float s = i_rot.x, c = i_rot.y; + v_quake = 0.0; vec3 p = a_pos * i_pos.w; #ifdef CARD p = vec3(p.x * u_card_w, p.y * u_card_h, p.z * u_card_w); @@ -81,8 +88,28 @@ void main() { // 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); + // The bend is a FRACTION OF THE TREE, not a number of metres. `hgt * hgt` in metres is + // fine for a 40 cm flower and ruinous for a 14 m aspen - it put ten metres of sideways + // into a trunk and bent it over like a fishing rod, which is what standing under one and + // looking up finally showed. Normalised, the tip moves a few per cent of the tree's own + // height whatever the tree is, and the base does not move at all. + float th = max(u_model_h * i_pos.w, 0.001); + float hn = (u_model_h > 2.0) ? clamp(hgt / th, 0.0, 1.0) : min(hgt, 1.0); + float reach = (u_model_h > 2.0) ? th * 0.22 : 0.35; + p.x += sway * hn * hn * reach; + p.z += sway * hn * hn * reach * 0.43 * cos(ph * 0.7); + if (u_flutter > 0.0) { + // per-leaf, not per-tree: the phase comes from the vertex's own place on the card, so + // neighbouring leaves are never in step - a crown that trembles as one block reads as + // the whole tree shivering. + float qp = u_time * 8.5 + a_pos.x * 11.3 + a_pos.z * 9.7 + a_pos.y * 4.1 + i_rot.z * 6.2831; + float q = sin(qp) * 0.65 + sin(qp * 1.73 + 1.1) * 0.35; + float amp = u_flutter * (0.40 + 0.60 * windGust(i_pos.xz, u_time)) * smoothstep(0.0, 1.2, hgt); + p.x += q * amp * 0.10; + p.y += q * amp * 0.05; + p.z += cos(qp * 0.9) * amp * 0.10; + v_quake = q * amp; + } #endif v_hull = 1.0; if (u_model_h > 2.0) { diff --git a/packages/ludic.render3d/shaders/skin.vert b/packages/ludic.render3d/shaders/skin.vert index 60172813..2ecf26ae 100644 --- a/packages/ludic.render3d/shaders/skin.vert +++ b/packages/ludic.render3d/shaders/skin.vert @@ -21,6 +21,7 @@ out vec2 v_uv; out float v_seed; out vec2 v_rot; out float v_hull; +out float v_quake; // only aspens quake; written so model.frag can read it void main() { mat4 m = u_model; if (u_skinned > 0.5) { @@ -43,6 +44,7 @@ void main() { v_seed = 0.0701; v_rot = vec2(0.0, 1.0); v_hull = 1.0; + v_quake = 0.0; #ifdef SHADOW_PASS gl_Position = u_light_vp * w; #else diff --git a/packages/ludic.render3d/shaders/spv/01089da8.frag.spv b/packages/ludic.render3d/shaders/spv/01089da8.frag.spv index 57af6fcd..0074535c 100644 Binary files a/packages/ludic.render3d/shaders/spv/01089da8.frag.spv and b/packages/ludic.render3d/shaders/spv/01089da8.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/01089da8.vert.spv b/packages/ludic.render3d/shaders/spv/01089da8.vert.spv index 96c91598..3dc8c5c6 100644 Binary files a/packages/ludic.render3d/shaders/spv/01089da8.vert.spv and b/packages/ludic.render3d/shaders/spv/01089da8.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/1ce5c5d1.frag.spv b/packages/ludic.render3d/shaders/spv/1ce5c5d1.frag.spv index 24306b42..8eb93cd9 100644 Binary files a/packages/ludic.render3d/shaders/spv/1ce5c5d1.frag.spv and b/packages/ludic.render3d/shaders/spv/1ce5c5d1.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/1ce5c5d1.vert.spv b/packages/ludic.render3d/shaders/spv/1ce5c5d1.vert.spv index 289c8479..da1cf6e2 100644 Binary files a/packages/ludic.render3d/shaders/spv/1ce5c5d1.vert.spv and b/packages/ludic.render3d/shaders/spv/1ce5c5d1.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/1fde9cd2.frag.spv b/packages/ludic.render3d/shaders/spv/1fde9cd2.frag.spv index 57af6fcd..0074535c 100644 Binary files a/packages/ludic.render3d/shaders/spv/1fde9cd2.frag.spv and b/packages/ludic.render3d/shaders/spv/1fde9cd2.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/1fde9cd2.vert.spv b/packages/ludic.render3d/shaders/spv/1fde9cd2.vert.spv index 66c22c3a..4470c31d 100644 Binary files a/packages/ludic.render3d/shaders/spv/1fde9cd2.vert.spv and b/packages/ludic.render3d/shaders/spv/1fde9cd2.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/254e7887.frag.spv b/packages/ludic.render3d/shaders/spv/254e7887.frag.spv index c8e5fd2d..faeaf2f1 100644 Binary files a/packages/ludic.render3d/shaders/spv/254e7887.frag.spv and b/packages/ludic.render3d/shaders/spv/254e7887.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/254e7887.vert.spv b/packages/ludic.render3d/shaders/spv/254e7887.vert.spv index 13a33a0f..3f761b55 100644 Binary files a/packages/ludic.render3d/shaders/spv/254e7887.vert.spv and b/packages/ludic.render3d/shaders/spv/254e7887.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/3b183d8f.frag.spv b/packages/ludic.render3d/shaders/spv/3b183d8f.frag.spv index ce385608..ee799055 100644 Binary files a/packages/ludic.render3d/shaders/spv/3b183d8f.frag.spv and b/packages/ludic.render3d/shaders/spv/3b183d8f.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/3b183d8f.vert.spv b/packages/ludic.render3d/shaders/spv/3b183d8f.vert.spv index 289c8479..da1cf6e2 100644 Binary files a/packages/ludic.render3d/shaders/spv/3b183d8f.vert.spv and b/packages/ludic.render3d/shaders/spv/3b183d8f.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/439a2253.vert.spv b/packages/ludic.render3d/shaders/spv/439a2253.vert.spv index 7f6b91c1..8d5749a2 100644 Binary files a/packages/ludic.render3d/shaders/spv/439a2253.vert.spv and b/packages/ludic.render3d/shaders/spv/439a2253.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/4dda406a.frag.spv b/packages/ludic.render3d/shaders/spv/4dda406a.frag.spv index 28bfd927..53f0f571 100644 Binary files a/packages/ludic.render3d/shaders/spv/4dda406a.frag.spv and b/packages/ludic.render3d/shaders/spv/4dda406a.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/4dda406a.vert.spv b/packages/ludic.render3d/shaders/spv/4dda406a.vert.spv index 289c8479..da1cf6e2 100644 Binary files a/packages/ludic.render3d/shaders/spv/4dda406a.vert.spv and b/packages/ludic.render3d/shaders/spv/4dda406a.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/512004a1.vert.spv b/packages/ludic.render3d/shaders/spv/512004a1.vert.spv index 8d24cfc7..6e564c50 100644 Binary files a/packages/ludic.render3d/shaders/spv/512004a1.vert.spv and b/packages/ludic.render3d/shaders/spv/512004a1.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/79b77ed9.frag.spv b/packages/ludic.render3d/shaders/spv/79b77ed9.frag.spv index 9f1c0908..47fd18ac 100644 Binary files a/packages/ludic.render3d/shaders/spv/79b77ed9.frag.spv and b/packages/ludic.render3d/shaders/spv/79b77ed9.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/79b77ed9.vert.spv b/packages/ludic.render3d/shaders/spv/79b77ed9.vert.spv index b1f4f90e..ba4a574f 100644 Binary files a/packages/ludic.render3d/shaders/spv/79b77ed9.vert.spv and b/packages/ludic.render3d/shaders/spv/79b77ed9.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/7ed7de52.frag.spv b/packages/ludic.render3d/shaders/spv/7ed7de52.frag.spv index ae5781f7..024db4bf 100644 Binary files a/packages/ludic.render3d/shaders/spv/7ed7de52.frag.spv and b/packages/ludic.render3d/shaders/spv/7ed7de52.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/7ed7de52.vert.spv b/packages/ludic.render3d/shaders/spv/7ed7de52.vert.spv index 22392dee..ef954c9a 100644 Binary files a/packages/ludic.render3d/shaders/spv/7ed7de52.vert.spv and b/packages/ludic.render3d/shaders/spv/7ed7de52.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/7f096322.frag.spv b/packages/ludic.render3d/shaders/spv/7f096322.frag.spv index ae5781f7..024db4bf 100644 Binary files a/packages/ludic.render3d/shaders/spv/7f096322.frag.spv and b/packages/ludic.render3d/shaders/spv/7f096322.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/7f096322.vert.spv b/packages/ludic.render3d/shaders/spv/7f096322.vert.spv index 97f7b3f0..58c3392b 100644 Binary files a/packages/ludic.render3d/shaders/spv/7f096322.vert.spv and b/packages/ludic.render3d/shaders/spv/7f096322.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/86f427b0.vert.spv b/packages/ludic.render3d/shaders/spv/86f427b0.vert.spv index 20a844a6..86097da0 100644 Binary files a/packages/ludic.render3d/shaders/spv/86f427b0.vert.spv and b/packages/ludic.render3d/shaders/spv/86f427b0.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/9068df1c.vert.spv b/packages/ludic.render3d/shaders/spv/9068df1c.vert.spv index aff7eb39..58cb3d11 100644 Binary files a/packages/ludic.render3d/shaders/spv/9068df1c.vert.spv and b/packages/ludic.render3d/shaders/spv/9068df1c.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/9dce3246.vert.spv b/packages/ludic.render3d/shaders/spv/9dce3246.vert.spv index 20a844a6..86097da0 100644 Binary files a/packages/ludic.render3d/shaders/spv/9dce3246.vert.spv and b/packages/ludic.render3d/shaders/spv/9dce3246.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/a5ad521e.frag.spv b/packages/ludic.render3d/shaders/spv/a5ad521e.frag.spv index ef4bf125..7b82bf06 100644 Binary files a/packages/ludic.render3d/shaders/spv/a5ad521e.frag.spv and b/packages/ludic.render3d/shaders/spv/a5ad521e.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/a5ad521e.vert.spv b/packages/ludic.render3d/shaders/spv/a5ad521e.vert.spv index 66c22c3a..4470c31d 100644 Binary files a/packages/ludic.render3d/shaders/spv/a5ad521e.vert.spv and b/packages/ludic.render3d/shaders/spv/a5ad521e.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/a64015f2.vert.spv b/packages/ludic.render3d/shaders/spv/a64015f2.vert.spv index 917e392d..0c1c0955 100644 Binary files a/packages/ludic.render3d/shaders/spv/a64015f2.vert.spv and b/packages/ludic.render3d/shaders/spv/a64015f2.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/b4587cd4.frag.spv b/packages/ludic.render3d/shaders/spv/b4587cd4.frag.spv index ece2244d..edc13b26 100644 Binary files a/packages/ludic.render3d/shaders/spv/b4587cd4.frag.spv and b/packages/ludic.render3d/shaders/spv/b4587cd4.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/b4587cd4.vert.spv b/packages/ludic.render3d/shaders/spv/b4587cd4.vert.spv index 963932d2..7857c3cd 100644 Binary files a/packages/ludic.render3d/shaders/spv/b4587cd4.vert.spv and b/packages/ludic.render3d/shaders/spv/b4587cd4.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/b79a1f4e.vert.spv b/packages/ludic.render3d/shaders/spv/b79a1f4e.vert.spv index 917e392d..0c1c0955 100644 Binary files a/packages/ludic.render3d/shaders/spv/b79a1f4e.vert.spv and b/packages/ludic.render3d/shaders/spv/b79a1f4e.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/b964507f.vert.spv b/packages/ludic.render3d/shaders/spv/b964507f.vert.spv index 8d24cfc7..6e564c50 100644 Binary files a/packages/ludic.render3d/shaders/spv/b964507f.vert.spv and b/packages/ludic.render3d/shaders/spv/b964507f.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/b9fc2041.frag.spv b/packages/ludic.render3d/shaders/spv/b9fc2041.frag.spv index 57af6fcd..0074535c 100644 Binary files a/packages/ludic.render3d/shaders/spv/b9fc2041.frag.spv and b/packages/ludic.render3d/shaders/spv/b9fc2041.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/b9fc2041.vert.spv b/packages/ludic.render3d/shaders/spv/b9fc2041.vert.spv index 289c8479..da1cf6e2 100644 Binary files a/packages/ludic.render3d/shaders/spv/b9fc2041.vert.spv and b/packages/ludic.render3d/shaders/spv/b9fc2041.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/bfa15301.vert.spv b/packages/ludic.render3d/shaders/spv/bfa15301.vert.spv index a8db43dc..0c25d0f0 100644 Binary files a/packages/ludic.render3d/shaders/spv/bfa15301.vert.spv and b/packages/ludic.render3d/shaders/spv/bfa15301.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/d48d6a48.frag.spv b/packages/ludic.render3d/shaders/spv/d48d6a48.frag.spv index ae5781f7..024db4bf 100644 Binary files a/packages/ludic.render3d/shaders/spv/d48d6a48.frag.spv and b/packages/ludic.render3d/shaders/spv/d48d6a48.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/d48d6a48.vert.spv b/packages/ludic.render3d/shaders/spv/d48d6a48.vert.spv index b49148cc..761909ea 100644 Binary files a/packages/ludic.render3d/shaders/spv/d48d6a48.vert.spv and b/packages/ludic.render3d/shaders/spv/d48d6a48.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/e9b6300c.vert.spv b/packages/ludic.render3d/shaders/spv/e9b6300c.vert.spv index aff7eb39..58cb3d11 100644 Binary files a/packages/ludic.render3d/shaders/spv/e9b6300c.vert.spv and b/packages/ludic.render3d/shaders/spv/e9b6300c.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/f34dce08.vert.spv b/packages/ludic.render3d/shaders/spv/f34dce08.vert.spv index 20c125af..b59781da 100644 Binary files a/packages/ludic.render3d/shaders/spv/f34dce08.vert.spv and b/packages/ludic.render3d/shaders/spv/f34dce08.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/f4a2b586.frag.spv b/packages/ludic.render3d/shaders/spv/f4a2b586.frag.spv index d51f1c25..c6183e2f 100644 Binary files a/packages/ludic.render3d/shaders/spv/f4a2b586.frag.spv and b/packages/ludic.render3d/shaders/spv/f4a2b586.frag.spv differ diff --git a/packages/ludic.render3d/shaders/spv/f4a2b586.vert.spv b/packages/ludic.render3d/shaders/spv/f4a2b586.vert.spv index db1380f8..f4235b58 100644 Binary files a/packages/ludic.render3d/shaders/spv/f4a2b586.vert.spv and b/packages/ludic.render3d/shaders/spv/f4a2b586.vert.spv differ diff --git a/packages/ludic.render3d/shaders/spv/manifest.txt b/packages/ludic.render3d/shaders/spv/manifest.txt index 4e747f09..3b0546c1 100644 --- a/packages/ludic.render3d/shaders/spv/manifest.txt +++ b/packages/ludic.render3d/shaders/spv/manifest.txt @@ -1076,7 +1076,7 @@ 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 +B 9dce3246 vert 0 236 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 @@ -1088,6 +1088,7 @@ 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 +U 9dce3246 vert u_flutter 232 float 1 0 I 9dce3246 i_rot 4 vec4 I 9dce3246 a_pos 0 vec3 I 9dce3246 i_pos 3 vec4 @@ -1137,7 +1138,7 @@ 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 +B 439a2253 vert 0 236 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 @@ -1149,6 +1150,7 @@ 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 +U 439a2253 vert u_flutter 232 float 1 0 I 439a2253 i_rot 4 vec4 I 439a2253 a_pos 0 vec3 I 439a2253 i_pos 3 vec4 @@ -1198,7 +1200,7 @@ 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 +B 86f427b0 vert 0 236 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 @@ -1210,6 +1212,7 @@ 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 +U 86f427b0 vert u_flutter 232 float 1 0 I 86f427b0 i_rot 4 vec4 I 86f427b0 a_pos 0 vec3 I 86f427b0 i_pos 3 vec4 @@ -1259,7 +1262,7 @@ 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 +B bfa15301 vert 0 236 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 @@ -1271,6 +1274,7 @@ 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 +U bfa15301 vert u_flutter 232 float 1 0 I bfa15301 i_rot 4 vec4 I bfa15301 a_pos 0 vec3 I bfa15301 i_pos 3 vec4 @@ -1319,7 +1323,7 @@ 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 +B 01089da8 vert 0 236 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 @@ -1331,6 +1335,7 @@ 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 +U 01089da8 vert u_flutter 232 float 1 0 I 01089da8 i_rot 4 vec4 I 01089da8 a_pos 0 vec3 I 01089da8 i_pos 3 vec4 @@ -1386,7 +1391,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 +B 254e7887 vert 0 236 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 @@ -1398,6 +1403,7 @@ 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 +U 254e7887 vert u_flutter 232 float 1 0 I 254e7887 i_rot 4 vec4 I 254e7887 a_pos 0 vec3 I 254e7887 i_pos 3 vec4 @@ -1454,7 +1460,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 +B 1ce5c5d1 vert 0 236 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 @@ -1466,6 +1472,7 @@ 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 +U 1ce5c5d1 vert u_flutter 232 float 1 0 I 1ce5c5d1 i_rot 4 vec4 I 1ce5c5d1 a_pos 0 vec3 I 1ce5c5d1 i_pos 3 vec4 @@ -1521,7 +1528,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 +B f4a2b586 vert 0 252 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 @@ -1535,6 +1542,7 @@ 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 +U f4a2b586 vert u_flutter 248 float 1 0 I f4a2b586 i_rot 4 vec4 I f4a2b586 a_pos 0 vec3 I f4a2b586 i_pos 3 vec4 @@ -1592,7 +1600,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 +B b4587cd4 vert 0 236 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 @@ -1604,6 +1612,7 @@ 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 +U b4587cd4 vert u_flutter 232 float 1 0 I b4587cd4 i_rot 4 vec4 I b4587cd4 a_pos 0 vec3 I b4587cd4 i_pos 3 vec4 @@ -1660,7 +1669,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 +B 4dda406a vert 0 236 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 @@ -1672,6 +1681,7 @@ 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 +U 4dda406a vert u_flutter 232 float 1 0 I 4dda406a i_rot 4 vec4 I 4dda406a a_pos 0 vec3 I 4dda406a i_pos 3 vec4 @@ -1727,7 +1737,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 +B 3b183d8f vert 0 236 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 @@ -1739,6 +1749,7 @@ 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 +U 3b183d8f vert u_flutter 232 float 1 0 I 3b183d8f i_rot 4 vec4 I 3b183d8f a_pos 0 vec3 I 3b183d8f i_pos 3 vec4 @@ -1794,7 +1805,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 +B 79b77ed9 vert 0 236 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 @@ -1806,6 +1817,7 @@ 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 +U 79b77ed9 vert u_flutter 232 float 1 0 I 79b77ed9 i_rot 4 vec4 I 79b77ed9 a_pos 0 vec3 I 79b77ed9 i_pos 3 vec4 @@ -1862,7 +1874,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 +B b9fc2041 vert 0 236 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 @@ -1874,6 +1886,7 @@ 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 +U b9fc2041 vert u_flutter 232 float 1 0 I b9fc2041 i_rot 4 vec4 I b9fc2041 a_pos 0 vec3 I b9fc2041 i_pos 3 vec4 @@ -1929,7 +1942,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 +B f34dce08 vert 0 236 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 @@ -1941,6 +1954,7 @@ 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 +U f34dce08 vert u_flutter 232 float 1 0 I f34dce08 i_rot 4 vec4 I f34dce08 a_pos 0 vec3 I f34dce08 i_pos 3 vec4 @@ -1989,7 +2003,7 @@ 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 +B 512004a1 vert 0 236 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 @@ -2001,6 +2015,7 @@ 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 +U 512004a1 vert u_flutter 232 float 1 0 I 512004a1 i_rot 4 vec4 I 512004a1 a_pos 0 vec3 I 512004a1 i_pos 3 vec4 @@ -2049,7 +2064,7 @@ 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 +B b964507f vert 0 236 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 @@ -2061,6 +2076,7 @@ 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 +U b964507f vert u_flutter 232 float 1 0 I b964507f i_rot 4 vec4 I b964507f a_pos 0 vec3 I b964507f i_pos 3 vec4