render3d: a glTF material's factors are drawn - base colour, roughness, metallic and emission

gltf_factors reads pbrMetallicRoughness.baseColorFactor, metallicFactor, roughnessFactor and the
emissiveFactor into the primitive (pr.fac), and prim_factors hands them to every program that draws its
textures (actors, the scatter's meshes and levels, the impostor bake) as 1 - factor, so a program never
given them - or a material that gives none (pr.fac null) - multiplies by 1 and draws as before. An
untextured material with a colour (or a metal/roughness) samples a pure white for it, so the factor is
exactly what it draws: horse_cornea is its own colour, not the 200 grey every untextured part had.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Orkun ÇAKILKAYA 2026-09-29 18:52:42 +03:00
parent d2e1f804ce
commit f79390838a
27 changed files with 221 additions and 114 deletions

View file

@ -220,6 +220,7 @@ function actor_draw_one(render3d_st: mut Render3dState, a: Actor, ap: AcProg, sh
else { u_v3(render3d_st, ap.l_tint, a.tint) } else { u_v3(render3d_st, ap.l_tint, a.tint) }
} }
gpu_tex_unit(render3d_st, 0); gpu_tex_bind(render3d_st, GPU_TEX2D, pr.diff) gpu_tex_unit(render3d_st, 0); gpu_tex_bind(render3d_st, GPU_TEX2D, pr.diff)
prim_factors(render3d_st, ap.prog, pr)
if not shadow { if not shadow {
gpu_tex_unit(render3d_st, 1); gpu_tex_bind(render3d_st, GPU_TEX2D, pr.nrm) gpu_tex_unit(render3d_st, 1); gpu_tex_bind(render3d_st, GPU_TEX2D, pr.nrm)
gpu_tex_unit(render3d_st, 2); gpu_tex_bind(render3d_st, GPU_TEX2D, pr.arm) gpu_tex_unit(render3d_st, 2); gpu_tex_bind(render3d_st, GPU_TEX2D, pr.arm)

View file

@ -836,6 +836,7 @@ export state Render3dState {
tb_key: string = "" tb_key: string = ""
tb_version: int = 0 tb_version: int = 0
tb_shadow_ok: bool = false # the shadow came from its bake this map tb_shadow_ok: bool = false # the shadow came from its bake this map
gltf_pure: int = 0 # a 1x1 white a factor multiplies exactly (gltf_factors)
tt_dir: string = "" # terrain_tiles_to: where a map's tiles are written ("" keeps the whole copies) tt_dir: string = "" # terrain_tiles_to: where a map's tiles are written ("" keeps the whole copies)
tt_key: string = "" tt_key: string = ""
tt_file: pointer = null # the tiles' file, open for reading (terrain_tiles.ludic) tt_file: pointer = null # the tiles' file, open for reading (terrain_tiles.ludic)

View file

@ -11,7 +11,8 @@ property Prim {
nrm: int = 0, nrm: int = 0,
arm: int = 0, arm: int = 0,
verts: int = 0, # vertices in the mesh (each attribute buffer holds this many) verts: int = 0, # vertices in the mesh (each attribute buffer holds this many)
name: string # the material's name (a part to tint: "hk_jacket") name: string, # the material's name (a part to tint: "hk_jacket")
fac: floats # the material's factors, or null (all 1, no emission): base r g b a, roughness, metallic, emissive r g b
} }
property Model { property Model {
prims: []Prim, prims: []Prim,
@ -155,6 +156,7 @@ function gltf_prim(render3d_st: mut Render3dState, p: Val) -> Prim {
if ud != null { pr.diff = gltf_texture(render3d_st, ud, true) } if ud != null { pr.diff = gltf_texture(render3d_st, ud, true) }
if un != null { pr.nrm = gltf_texture(render3d_st, un, false) } if un != null { pr.nrm = gltf_texture(render3d_st, un, false) }
if ua != null { pr.arm = gltf_texture(render3d_st, ua, false) } if ua != null { pr.arm = gltf_texture(render3d_st, ua, false) }
gltf_factors(render3d_st, pr, mat, ud != null, ua != null)
var mname: string = null var mname: string = null
# a copy: the document goes, strings and all, at the next load # a copy: the document goes, strings and all, at the next load
if value_has(mat, "name") != 0 { let s = value_as_str(value_get(mat, "name")); mname = s[0 .. len(s)] } if value_has(mat, "name") != 0 { let s = value_as_str(value_get(mat, "name")); mname = s[0 .. len(s)] }
@ -174,6 +176,45 @@ function gltf_prim(render3d_st: mut Render3dState, p: Val) -> Prim {
return pr return pr
} }
# The material's factors (glTF's pbrMetallicRoughness and emissiveFactor), which the shaders multiply in;
# a material that gives none keeps pr.fac null and draws as it always has. An untextured material with
# a colour, or a metal/roughness, samples white for it, so the factor is exactly what it draws.
@alloc_ok("a model being loaded: a primitive's factors, once")
function gltf_factors(render3d_st: mut Render3dState, pr: Prim, mat: Val, has_diff: bool, has_arm: bool) -> void {
let pbr = value_get(mat, "pbrMetallicRoughness")
let has_pbr = value_has(mat, "pbrMetallicRoughness") != 0
let has_base = has_pbr and value_has(pbr, "baseColorFactor") != 0
let has_m = has_pbr and value_has(pbr, "metallicFactor") != 0
let has_r = has_pbr and value_has(pbr, "roughnessFactor") != 0
let has_e = value_has(mat, "emissiveFactor") != 0
if not has_base and not has_m and not has_r and not has_e { return }
let f = floats(9)
for k in 0 .. 6 { f[k] = 1.0 }
for k in 6 .. 9 { f[k] = 0.0 }
if has_base { let b = value_get(pbr, "baseColorFactor"); for k in 0 .. min(value_count(b), 4) { f[k] = jnum(value_at(b, k)) } }
if has_r { f[4] = jnum(value_get(pbr, "roughnessFactor")) }
if has_m { f[5] = jnum(value_get(pbr, "metallicFactor")) }
if has_e { let e = value_get(mat, "emissiveFactor"); for k in 0 .. min(value_count(e), 3) { f[6 + k] = jnum(value_at(e, k)) } }
pr.fac = f
if render3d_st.gltf_pure == 0 { render3d_st.gltf_pure = tex_solid(render3d_st, 255, 255, 255, 255) }
if has_base and not has_diff { pr.diff = render3d_st.gltf_pure }
if (has_m or has_r) and not has_arm { pr.arm = render3d_st.gltf_pure }
}
# a primitive's factors handed to program p (as 1 - factor, so a program never given them reads 1)
function prim_factors(render3d_st: mut Render3dState, p: int, pr: Prim) -> void {
let f = pr.fac
if f == null {
u_f4(render3d_st, gpu_uniform(render3d_st, p, "u_fac_base_inv"), 0.0, 0.0, 0.0, 0.0)
u_f2(render3d_st, gpu_uniform(render3d_st, p, "u_fac_mr_inv"), 0.0, 0.0)
u_f3(render3d_st, gpu_uniform(render3d_st, p, "u_fac_emis"), 0.0, 0.0, 0.0)
return
}
u_f4(render3d_st, gpu_uniform(render3d_st, p, "u_fac_base_inv"), 1.0 - f[0], 1.0 - f[1], 1.0 - f[2], 1.0 - f[3])
u_f2(render3d_st, gpu_uniform(render3d_st, p, "u_fac_mr_inv"), 1.0 - f[4], 1.0 - f[5])
u_f3(render3d_st, gpu_uniform(render3d_st, p, "u_fac_emis"), f[6], f[7], f[8])
}
# Load the mesh of the node called `node_name` from dir/file. # Load the mesh of the node called `node_name` from dir/file.
# the GPU memory it makes is counted as VKM_MODEL (R3D_VKMEM) # the GPU memory it makes is counted as VKM_MODEL (R3D_VKMEM)
function gltf_load(render3d_st: mut Render3dState, dir: string, file: string, node_name: string) -> Model { function gltf_load(render3d_st: mut Render3dState, dir: string, file: string, node_name: string) -> Model {

View file

@ -387,6 +387,7 @@ function impostor_paint(render3d_st: mut Render3dState, im: Impostor) -> void {
let pr = model.prims[i] let pr = model.prims[i]
r3d_bind_2d(render3d_st, bake, "u_diff", 0, pr.diff) r3d_bind_2d(render3d_st, bake, "u_diff", 0, pr.diff)
r3d_bind_2d(render3d_st, bake, "u_arm", 2, pr.arm) r3d_bind_2d(render3d_st, bake, "u_arm", 2, pr.arm)
prim_factors(render3d_st, bake, pr)
mesh_draw_instanced(render3d_st, pr.mesh, 1) mesh_draw_instanced(render3d_st, pr.mesh, 1)
} }
} }
@ -962,6 +963,7 @@ function layer_draw_model(render3d_st: mut Render3dState, l: Layer, model: Model
scatter_attach(render3d_st, pr.mesh, vb) scatter_attach(render3d_st, pr.mesh, vb)
if not card { if not card {
r3d_bind_2d(render3d_st, p, "u_diff", 0, pr.diff) r3d_bind_2d(render3d_st, p, "u_diff", 0, pr.diff)
prim_factors(render3d_st, p, pr)
if not shadow { r3d_bind_2d(render3d_st, p, "u_nrm", 1, pr.nrm); r3d_bind_2d(render3d_st, p, "u_arm", 2, pr.arm) } if not shadow { r3d_bind_2d(render3d_st, p, "u_nrm", 1, pr.nrm); r3d_bind_2d(render3d_st, p, "u_arm", 2, pr.arm) }
} }
if render3d_st.sc_ind_base >= 0 { gpu_draw_mesh_indirect(render3d_st, pr.mesh, l.g_cmds, (render3d_st.sc_ind_base + i * render3d_st.sc_ind_stride) * SC_REC_W, render3d_st.sc_ind_n, 0, 0) } if render3d_st.sc_ind_base >= 0 { gpu_draw_mesh_indirect(render3d_st, pr.mesh, l.g_cmds, (render3d_st.sc_ind_base + i * render3d_st.sc_ind_stride) * SC_REC_W, render3d_st.sc_ind_n, 0, 0) }
@ -1057,6 +1059,7 @@ function layer_draw_depth(render3d_st: mut Render3dState, l: Layer, model: Model
let pr = model.prims[i] let pr = model.prims[i]
scatter_attach(render3d_st, pr.mesh, vb) scatter_attach(render3d_st, pr.mesh, vb)
r3d_bind_2d(render3d_st, p, "u_diff", 0, pr.diff) r3d_bind_2d(render3d_st, p, "u_diff", 0, pr.diff)
prim_factors(render3d_st, p, pr)
if render3d_st.sc_ind_base >= 0 { gpu_draw_mesh_indirect(render3d_st, pr.mesh, l.g_cmds, (render3d_st.sc_ind_base + i * render3d_st.sc_ind_stride) * SC_REC_W, render3d_st.sc_ind_n, 0, 0) } if render3d_st.sc_ind_base >= 0 { gpu_draw_mesh_indirect(render3d_st, pr.mesh, l.g_cmds, (render3d_st.sc_ind_base + i * render3d_st.sc_ind_stride) * SC_REC_W, render3d_st.sc_ind_n, 0, 0) }
else { mesh_draw_instanced(render3d_st, pr.mesh, cnt) } else { mesh_draw_instanced(render3d_st, pr.mesh, cnt) }
} }

View file

@ -6,9 +6,10 @@ in float v_seed;
layout(location = 0) out vec4 o_albedo; layout(location = 0) out vec4 o_albedo;
layout(location = 1) out vec4 o_normal; layout(location = 1) out vec4 o_normal;
uniform sampler2D u_diff; uniform sampler2D u_diff;
uniform vec4 u_fac_base_inv; // a glTF material's base colour factor, as 1 - factor
uniform sampler2D u_arm; uniform sampler2D u_arm;
void main() { void main() {
vec4 d = texture(u_diff, v_uv); vec4 d = texture(u_diff, v_uv) * (vec4(1.0) - u_fac_base_inv);
if (d.a < 0.5) discard; // cut-out cards (needles, blades, leaves) bake with their shape if (d.a < 0.5) discard; // cut-out cards (needles, blades, leaves) bake with their shape
vec3 N = normalize(v_nrm); vec3 N = normalize(v_nrm);
if (!gl_FrontFacing) N = -N; if (!gl_FrontFacing) N = -N;

View file

@ -12,6 +12,10 @@ in float v_lh; // height above the model's base (model.vert)
uniform float u_model_h; uniform float u_model_h;
out vec4 o_color; out vec4 o_color;
uniform sampler2D u_diff; uniform sampler2D u_diff;
// a glTF material's factors, as 1 - factor (a program never given them reads 1) and its emission
uniform vec4 u_fac_base_inv;
uniform vec2 u_fac_mr_inv;
uniform vec3 u_fac_emis;
uniform sampler2D u_nrm; uniform sampler2D u_nrm;
uniform sampler2D u_arm; uniform sampler2D u_arm;
uniform mat4 u_view; uniform mat4 u_view;
@ -189,7 +193,7 @@ void main() {
n = normalize(N + side * (fract(v_uv.x) * 2.0 - 1.0) * 0.7); n = normalize(N + side * (fract(v_uv.x) * 2.0 - 1.0) * 0.7);
arm = vec3(0.9, 0.7, 0.0); arm = vec3(0.9, 0.7, 0.0);
#else #else
vec4 d = texture(u_diff, v_uv); vec4 d = texture(u_diff, v_uv) * (vec4(1.0) - u_fac_base_inv);
#ifdef ALPHA_TEST #ifdef ALPHA_TEST
// A needle sprig's alpha averages away in the mips, so a plain 0.5 test strips the // A needle sprig's alpha averages away in the mips, so a plain 0.5 test strips the
// crown bare past 50 m. Scale the alpha back up by the mip level (Castano's alpha // crown bare past 50 m. Scale the alpha back up by the mip level (Castano's alpha
@ -205,6 +209,7 @@ void main() {
mat3 tbn = cotangentFrame(N, v_wpos, v_uv); mat3 tbn = cotangentFrame(N, v_wpos, v_uv);
n = normalize(tbn * tn); n = normalize(tbn * tn);
arm = texture(u_arm, v_uv).rgb; arm = texture(u_arm, v_uv).rgb;
arm.gb *= vec2(1.0) - u_fac_mr_inv;
n = normalize(mix(n, N, smoothstep(30.0, 120.0, dist))); n = normalize(mix(n, N, smoothstep(30.0, 120.0, dist)));
alb = d.rgb; alb = d.rgb;
// a crown's interior is occluded by its own cards // a crown's interior is occluded by its own cards
@ -312,6 +317,7 @@ void main() {
#endif #endif
col += alb * u_emissive; col += alb * u_emissive;
if (any(isnan(col))) col = vec3(0.0); if (any(isnan(col))) col = vec3(0.0);
col += u_fac_emis;
col = applyFog(col, v_wpos, dist); col = applyFog(col, v_wpos, dist);
#ifdef CARD #ifdef CARD
o_color = vec4(sane(col), cardAlpha); o_color = vec4(sane(col), cardAlpha);

View file

@ -949,7 +949,7 @@ U d48d6a48 vert u_d0 4404 float 1 0
U d48d6a48 vert u_radius 4408 float 1 0 U d48d6a48 vert u_radius 4408 float 1 0
U d48d6a48 vert u_px 4412 float 1 0 U d48d6a48 vert u_px 4412 float 1 0
U d48d6a48 vert u_dbg 4416 int 1 0 U d48d6a48 vert u_dbg 4416 int 1 0
B d48d6a48 frag 1 980 B d48d6a48 frag 1 1028
U d48d6a48 frag u_cascade_vp 0 mat4 5 64 U d48d6a48 frag u_cascade_vp 0 mat4 5 64
U d48d6a48 frag u_cascade_split 320 float 5 16 U d48d6a48 frag u_cascade_split 320 float 5 16
U d48d6a48 frag u_cascade_range 400 float 5 16 U d48d6a48 frag u_cascade_range 400 float 5 16
@ -987,14 +987,17 @@ U d48d6a48 frag u_fog_inscatter 820 float 1 0
U d48d6a48 frag u_fog_desat 824 float 1 0 U d48d6a48 frag u_fog_desat 824 float 1 0
U d48d6a48 frag u_fog_wall 828 float 1 0 U d48d6a48 frag u_fog_wall 828 float 1 0
U d48d6a48 frag u_model_h 832 float 1 0 U d48d6a48 frag u_model_h 832 float 1 0
U d48d6a48 frag u_view 848 mat4 1 0 U d48d6a48 frag u_fac_base_inv 848 vec4 1 0
U d48d6a48 frag u_tint 912 vec3 1 0 U d48d6a48 frag u_fac_mr_inv 864 vec2 1 0
U d48d6a48 frag u_rough_scale 924 float 1 0 U d48d6a48 frag u_fac_emis 880 vec3 1 0
U d48d6a48 frag u_emissive 928 float 1 0 U d48d6a48 frag u_view 896 mat4 1 0
U d48d6a48 frag u_blade_base 944 vec3 1 0 U d48d6a48 frag u_tint 960 vec3 1 0
U d48d6a48 frag u_blade_tip 960 vec3 1 0 U d48d6a48 frag u_rough_scale 972 float 1 0
U d48d6a48 frag u_blade_cols 972 float 1 0 U d48d6a48 frag u_emissive 976 float 1 0
U d48d6a48 frag u_blade_tex_on 976 float 1 0 U d48d6a48 frag u_blade_base 992 vec3 1 0
U d48d6a48 frag u_blade_tip 1008 vec3 1 0
U d48d6a48 frag u_blade_cols 1020 float 1 0
U d48d6a48 frag u_blade_tex_on 1024 float 1 0
T d48d6a48 u_arm 2 T d48d6a48 u_arm 2
T d48d6a48 u_blade_tex 3 T d48d6a48 u_blade_tex 3
T d48d6a48 u_brdf 4 T d48d6a48 u_brdf 4
@ -1039,7 +1042,7 @@ U cb13f3c6 vert u_px 348 float 1 0
U cb13f3c6 vert u_dbg 352 int 1 0 U cb13f3c6 vert u_dbg 352 int 1 0
I cb13f3c6 a_pos 0 vec3 I cb13f3c6 a_pos 0 vec3
I cb13f3c6 a_uv 2 vec2 I cb13f3c6 a_uv 2 vec2
B cb13f3c6 frag 1 980 B cb13f3c6 frag 1 1028
U cb13f3c6 frag u_cascade_vp 0 mat4 5 64 U cb13f3c6 frag u_cascade_vp 0 mat4 5 64
U cb13f3c6 frag u_cascade_split 320 float 5 16 U cb13f3c6 frag u_cascade_split 320 float 5 16
U cb13f3c6 frag u_cascade_range 400 float 5 16 U cb13f3c6 frag u_cascade_range 400 float 5 16
@ -1077,14 +1080,17 @@ U cb13f3c6 frag u_fog_inscatter 820 float 1 0
U cb13f3c6 frag u_fog_desat 824 float 1 0 U cb13f3c6 frag u_fog_desat 824 float 1 0
U cb13f3c6 frag u_fog_wall 828 float 1 0 U cb13f3c6 frag u_fog_wall 828 float 1 0
U cb13f3c6 frag u_model_h 832 float 1 0 U cb13f3c6 frag u_model_h 832 float 1 0
U cb13f3c6 frag u_view 848 mat4 1 0 U cb13f3c6 frag u_fac_base_inv 848 vec4 1 0
U cb13f3c6 frag u_tint 912 vec3 1 0 U cb13f3c6 frag u_fac_mr_inv 864 vec2 1 0
U cb13f3c6 frag u_rough_scale 924 float 1 0 U cb13f3c6 frag u_fac_emis 880 vec3 1 0
U cb13f3c6 frag u_emissive 928 float 1 0 U cb13f3c6 frag u_view 896 mat4 1 0
U cb13f3c6 frag u_blade_base 944 vec3 1 0 U cb13f3c6 frag u_tint 960 vec3 1 0
U cb13f3c6 frag u_blade_tip 960 vec3 1 0 U cb13f3c6 frag u_rough_scale 972 float 1 0
U cb13f3c6 frag u_blade_cols 972 float 1 0 U cb13f3c6 frag u_emissive 976 float 1 0
U cb13f3c6 frag u_blade_tex_on 976 float 1 0 U cb13f3c6 frag u_blade_base 992 vec3 1 0
U cb13f3c6 frag u_blade_tip 1008 vec3 1 0
U cb13f3c6 frag u_blade_cols 1020 float 1 0
U cb13f3c6 frag u_blade_tex_on 1024 float 1 0
T cb13f3c6 u_arm 2 T cb13f3c6 u_arm 2
T cb13f3c6 u_blade_tex 3 T cb13f3c6 u_blade_tex 3
T cb13f3c6 u_brdf 4 T cb13f3c6 u_brdf 4
@ -1130,7 +1136,7 @@ U b8cff226 vert u_px 4444 float 1 0
U b8cff226 vert u_dbg 4448 int 1 0 U b8cff226 vert u_dbg 4448 int 1 0
I b8cff226 a_pos 0 vec3 I b8cff226 a_pos 0 vec3
I b8cff226 a_uv 2 vec2 I b8cff226 a_uv 2 vec2
B b8cff226 frag 1 980 B b8cff226 frag 1 1028
U b8cff226 frag u_cascade_vp 0 mat4 5 64 U b8cff226 frag u_cascade_vp 0 mat4 5 64
U b8cff226 frag u_cascade_split 320 float 5 16 U b8cff226 frag u_cascade_split 320 float 5 16
U b8cff226 frag u_cascade_range 400 float 5 16 U b8cff226 frag u_cascade_range 400 float 5 16
@ -1168,14 +1174,17 @@ U b8cff226 frag u_fog_inscatter 820 float 1 0
U b8cff226 frag u_fog_desat 824 float 1 0 U b8cff226 frag u_fog_desat 824 float 1 0
U b8cff226 frag u_fog_wall 828 float 1 0 U b8cff226 frag u_fog_wall 828 float 1 0
U b8cff226 frag u_model_h 832 float 1 0 U b8cff226 frag u_model_h 832 float 1 0
U b8cff226 frag u_view 848 mat4 1 0 U b8cff226 frag u_fac_base_inv 848 vec4 1 0
U b8cff226 frag u_tint 912 vec3 1 0 U b8cff226 frag u_fac_mr_inv 864 vec2 1 0
U b8cff226 frag u_rough_scale 924 float 1 0 U b8cff226 frag u_fac_emis 880 vec3 1 0
U b8cff226 frag u_emissive 928 float 1 0 U b8cff226 frag u_view 896 mat4 1 0
U b8cff226 frag u_blade_base 944 vec3 1 0 U b8cff226 frag u_tint 960 vec3 1 0
U b8cff226 frag u_blade_tip 960 vec3 1 0 U b8cff226 frag u_rough_scale 972 float 1 0
U b8cff226 frag u_blade_cols 972 float 1 0 U b8cff226 frag u_emissive 976 float 1 0
U b8cff226 frag u_blade_tex_on 976 float 1 0 U b8cff226 frag u_blade_base 992 vec3 1 0
U b8cff226 frag u_blade_tip 1008 vec3 1 0
U b8cff226 frag u_blade_cols 1020 float 1 0
U b8cff226 frag u_blade_tex_on 1024 float 1 0
T b8cff226 u_arm 2 T b8cff226 u_arm 2
T b8cff226 u_blade_tex 3 T b8cff226 u_blade_tex 3
T b8cff226 u_brdf 4 T b8cff226 u_brdf 4
@ -1341,7 +1350,7 @@ I 9dce3246 a_pos 0 vec3
I 9dce3246 i_pos 3 vec4 I 9dce3246 i_pos 3 vec4
I 9dce3246 a_nrm 1 vec3 I 9dce3246 a_nrm 1 vec3
I 9dce3246 a_uv 2 vec2 I 9dce3246 a_uv 2 vec2
B 9dce3246 frag 0 832 B 9dce3246 frag 1 848
U 9dce3246 frag u_cascade_vp 0 mat4 5 64 U 9dce3246 frag u_cascade_vp 0 mat4 5 64
U 9dce3246 frag u_cascade_split 320 float 5 16 U 9dce3246 frag u_cascade_split 320 float 5 16
U 9dce3246 frag u_cascade_range 400 float 5 16 U 9dce3246 frag u_cascade_range 400 float 5 16
@ -1378,6 +1387,7 @@ U 9dce3246 frag u_time 816 float 1 0
U 9dce3246 frag u_fog_inscatter 820 float 1 0 U 9dce3246 frag u_fog_inscatter 820 float 1 0
U 9dce3246 frag u_fog_desat 824 float 1 0 U 9dce3246 frag u_fog_desat 824 float 1 0
U 9dce3246 frag u_fog_wall 828 float 1 0 U 9dce3246 frag u_fog_wall 828 float 1 0
U 9dce3246 frag u_fac_base_inv 832 vec4 1 0
T 9dce3246 u_arm 2 T 9dce3246 u_arm 2
T 9dce3246 u_brdf 3 T 9dce3246 u_brdf 3
T 9dce3246 u_diff 4 T 9dce3246 u_diff 4
@ -1410,7 +1420,7 @@ I 439a2253 a_pos 0 vec3
I 439a2253 i_pos 3 vec4 I 439a2253 i_pos 3 vec4
I 439a2253 a_nrm 1 vec3 I 439a2253 a_nrm 1 vec3
I 439a2253 a_uv 2 vec2 I 439a2253 a_uv 2 vec2
B 439a2253 frag 0 832 B 439a2253 frag 1 848
U 439a2253 frag u_cascade_vp 0 mat4 5 64 U 439a2253 frag u_cascade_vp 0 mat4 5 64
U 439a2253 frag u_cascade_split 320 float 5 16 U 439a2253 frag u_cascade_split 320 float 5 16
U 439a2253 frag u_cascade_range 400 float 5 16 U 439a2253 frag u_cascade_range 400 float 5 16
@ -1447,6 +1457,7 @@ U 439a2253 frag u_time 816 float 1 0
U 439a2253 frag u_fog_inscatter 820 float 1 0 U 439a2253 frag u_fog_inscatter 820 float 1 0
U 439a2253 frag u_fog_desat 824 float 1 0 U 439a2253 frag u_fog_desat 824 float 1 0
U 439a2253 frag u_fog_wall 828 float 1 0 U 439a2253 frag u_fog_wall 828 float 1 0
U 439a2253 frag u_fac_base_inv 832 vec4 1 0
T 439a2253 u_arm 2 T 439a2253 u_arm 2
T 439a2253 u_brdf 3 T 439a2253 u_brdf 3
T 439a2253 u_diff 4 T 439a2253 u_diff 4
@ -1479,7 +1490,7 @@ I 86f427b0 a_pos 0 vec3
I 86f427b0 i_pos 3 vec4 I 86f427b0 i_pos 3 vec4
I 86f427b0 a_nrm 1 vec3 I 86f427b0 a_nrm 1 vec3
I 86f427b0 a_uv 2 vec2 I 86f427b0 a_uv 2 vec2
B 86f427b0 frag 0 832 B 86f427b0 frag 1 848
U 86f427b0 frag u_cascade_vp 0 mat4 5 64 U 86f427b0 frag u_cascade_vp 0 mat4 5 64
U 86f427b0 frag u_cascade_split 320 float 5 16 U 86f427b0 frag u_cascade_split 320 float 5 16
U 86f427b0 frag u_cascade_range 400 float 5 16 U 86f427b0 frag u_cascade_range 400 float 5 16
@ -1516,6 +1527,7 @@ U 86f427b0 frag u_time 816 float 1 0
U 86f427b0 frag u_fog_inscatter 820 float 1 0 U 86f427b0 frag u_fog_inscatter 820 float 1 0
U 86f427b0 frag u_fog_desat 824 float 1 0 U 86f427b0 frag u_fog_desat 824 float 1 0
U 86f427b0 frag u_fog_wall 828 float 1 0 U 86f427b0 frag u_fog_wall 828 float 1 0
U 86f427b0 frag u_fac_base_inv 832 vec4 1 0
T 86f427b0 u_arm 2 T 86f427b0 u_arm 2
T 86f427b0 u_brdf 3 T 86f427b0 u_brdf 3
T 86f427b0 u_diff 4 T 86f427b0 u_diff 4
@ -1684,7 +1696,7 @@ I 01089da8 a_pos 0 vec3
I 01089da8 i_pos 3 vec4 I 01089da8 i_pos 3 vec4
I 01089da8 a_nrm 1 vec3 I 01089da8 a_nrm 1 vec3
I 01089da8 a_uv 2 vec2 I 01089da8 a_uv 2 vec2
B 01089da8 frag 1 932 B 01089da8 frag 1 980
U 01089da8 frag u_cascade_vp 0 mat4 5 64 U 01089da8 frag u_cascade_vp 0 mat4 5 64
U 01089da8 frag u_cascade_split 320 float 5 16 U 01089da8 frag u_cascade_split 320 float 5 16
U 01089da8 frag u_cascade_range 400 float 5 16 U 01089da8 frag u_cascade_range 400 float 5 16
@ -1722,10 +1734,13 @@ U 01089da8 frag u_fog_inscatter 820 float 1 0
U 01089da8 frag u_fog_desat 824 float 1 0 U 01089da8 frag u_fog_desat 824 float 1 0
U 01089da8 frag u_fog_wall 828 float 1 0 U 01089da8 frag u_fog_wall 828 float 1 0
U 01089da8 frag u_model_h 832 float 1 0 U 01089da8 frag u_model_h 832 float 1 0
U 01089da8 frag u_view 848 mat4 1 0 U 01089da8 frag u_fac_base_inv 848 vec4 1 0
U 01089da8 frag u_tint 912 vec3 1 0 U 01089da8 frag u_fac_mr_inv 864 vec2 1 0
U 01089da8 frag u_rough_scale 924 float 1 0 U 01089da8 frag u_fac_emis 880 vec3 1 0
U 01089da8 frag u_emissive 928 float 1 0 U 01089da8 frag u_view 896 mat4 1 0
U 01089da8 frag u_tint 960 vec3 1 0
U 01089da8 frag u_rough_scale 972 float 1 0
U 01089da8 frag u_emissive 976 float 1 0
T 01089da8 u_arm 2 T 01089da8 u_arm 2
T 01089da8 u_blade_tex 3 T 01089da8 u_blade_tex 3
T 01089da8 u_brdf 4 T 01089da8 u_brdf 4
@ -1760,7 +1775,7 @@ I 254e7887 a_pos 0 vec3
I 254e7887 i_pos 3 vec4 I 254e7887 i_pos 3 vec4
I 254e7887 a_nrm 1 vec3 I 254e7887 a_nrm 1 vec3
I 254e7887 a_uv 2 vec2 I 254e7887 a_uv 2 vec2
B 254e7887 frag 1 936 B 254e7887 frag 1 984
U 254e7887 frag u_cascade_vp 0 mat4 5 64 U 254e7887 frag u_cascade_vp 0 mat4 5 64
U 254e7887 frag u_cascade_split 320 float 5 16 U 254e7887 frag u_cascade_split 320 float 5 16
U 254e7887 frag u_cascade_range 400 float 5 16 U 254e7887 frag u_cascade_range 400 float 5 16
@ -1798,11 +1813,14 @@ U 254e7887 frag u_fog_inscatter 820 float 1 0
U 254e7887 frag u_fog_desat 824 float 1 0 U 254e7887 frag u_fog_desat 824 float 1 0
U 254e7887 frag u_fog_wall 828 float 1 0 U 254e7887 frag u_fog_wall 828 float 1 0
U 254e7887 frag u_model_h 832 float 1 0 U 254e7887 frag u_model_h 832 float 1 0
U 254e7887 frag u_view 848 mat4 1 0 U 254e7887 frag u_fac_base_inv 848 vec4 1 0
U 254e7887 frag u_tint 912 vec3 1 0 U 254e7887 frag u_fac_mr_inv 864 vec2 1 0
U 254e7887 frag u_rough_scale 924 float 1 0 U 254e7887 frag u_fac_emis 880 vec3 1 0
U 254e7887 frag u_emissive 928 float 1 0 U 254e7887 frag u_view 896 mat4 1 0
U 254e7887 frag u_cull 932 float 1 0 U 254e7887 frag u_tint 960 vec3 1 0
U 254e7887 frag u_rough_scale 972 float 1 0
U 254e7887 frag u_emissive 976 float 1 0
U 254e7887 frag u_cull 980 float 1 0
T 254e7887 u_arm 2 T 254e7887 u_arm 2
T 254e7887 u_blade_tex 3 T 254e7887 u_blade_tex 3
T 254e7887 u_brdf 4 T 254e7887 u_brdf 4
@ -1837,7 +1855,7 @@ I 1ce5c5d1 a_pos 0 vec3
I 1ce5c5d1 i_pos 3 vec4 I 1ce5c5d1 i_pos 3 vec4
I 1ce5c5d1 a_nrm 1 vec3 I 1ce5c5d1 a_nrm 1 vec3
I 1ce5c5d1 a_uv 2 vec2 I 1ce5c5d1 a_uv 2 vec2
B 1ce5c5d1 frag 1 932 B 1ce5c5d1 frag 1 980
U 1ce5c5d1 frag u_cascade_vp 0 mat4 5 64 U 1ce5c5d1 frag u_cascade_vp 0 mat4 5 64
U 1ce5c5d1 frag u_cascade_split 320 float 5 16 U 1ce5c5d1 frag u_cascade_split 320 float 5 16
U 1ce5c5d1 frag u_cascade_range 400 float 5 16 U 1ce5c5d1 frag u_cascade_range 400 float 5 16
@ -1875,10 +1893,13 @@ U 1ce5c5d1 frag u_fog_inscatter 820 float 1 0
U 1ce5c5d1 frag u_fog_desat 824 float 1 0 U 1ce5c5d1 frag u_fog_desat 824 float 1 0
U 1ce5c5d1 frag u_fog_wall 828 float 1 0 U 1ce5c5d1 frag u_fog_wall 828 float 1 0
U 1ce5c5d1 frag u_model_h 832 float 1 0 U 1ce5c5d1 frag u_model_h 832 float 1 0
U 1ce5c5d1 frag u_view 848 mat4 1 0 U 1ce5c5d1 frag u_fac_base_inv 848 vec4 1 0
U 1ce5c5d1 frag u_tint 912 vec3 1 0 U 1ce5c5d1 frag u_fac_mr_inv 864 vec2 1 0
U 1ce5c5d1 frag u_rough_scale 924 float 1 0 U 1ce5c5d1 frag u_fac_emis 880 vec3 1 0
U 1ce5c5d1 frag u_emissive 928 float 1 0 U 1ce5c5d1 frag u_view 896 mat4 1 0
U 1ce5c5d1 frag u_tint 960 vec3 1 0
U 1ce5c5d1 frag u_rough_scale 972 float 1 0
U 1ce5c5d1 frag u_emissive 976 float 1 0
T 1ce5c5d1 u_arm 2 T 1ce5c5d1 u_arm 2
T 1ce5c5d1 u_blade_tex 3 T 1ce5c5d1 u_blade_tex 3
T 1ce5c5d1 u_brdf 4 T 1ce5c5d1 u_brdf 4
@ -1913,7 +1934,7 @@ I 5e70d731 a_pos 0 vec3
I 5e70d731 i_pos 3 vec4 I 5e70d731 i_pos 3 vec4
I 5e70d731 a_nrm 1 vec3 I 5e70d731 a_nrm 1 vec3
I 5e70d731 a_uv 2 vec2 I 5e70d731 a_uv 2 vec2
B 5e70d731 frag 1 932 B 5e70d731 frag 1 980
U 5e70d731 frag u_cascade_vp 0 mat4 5 64 U 5e70d731 frag u_cascade_vp 0 mat4 5 64
U 5e70d731 frag u_cascade_split 320 float 5 16 U 5e70d731 frag u_cascade_split 320 float 5 16
U 5e70d731 frag u_cascade_range 400 float 5 16 U 5e70d731 frag u_cascade_range 400 float 5 16
@ -1951,10 +1972,13 @@ U 5e70d731 frag u_fog_inscatter 820 float 1 0
U 5e70d731 frag u_fog_desat 824 float 1 0 U 5e70d731 frag u_fog_desat 824 float 1 0
U 5e70d731 frag u_fog_wall 828 float 1 0 U 5e70d731 frag u_fog_wall 828 float 1 0
U 5e70d731 frag u_model_h 832 float 1 0 U 5e70d731 frag u_model_h 832 float 1 0
U 5e70d731 frag u_view 848 mat4 1 0 U 5e70d731 frag u_fac_base_inv 848 vec4 1 0
U 5e70d731 frag u_tint 912 vec3 1 0 U 5e70d731 frag u_fac_mr_inv 864 vec2 1 0
U 5e70d731 frag u_rough_scale 924 float 1 0 U 5e70d731 frag u_fac_emis 880 vec3 1 0
U 5e70d731 frag u_emissive 928 float 1 0 U 5e70d731 frag u_view 896 mat4 1 0
U 5e70d731 frag u_tint 960 vec3 1 0
U 5e70d731 frag u_rough_scale 972 float 1 0
U 5e70d731 frag u_emissive 976 float 1 0
T 5e70d731 u_arm 2 T 5e70d731 u_arm 2
T 5e70d731 u_blade_tex 3 T 5e70d731 u_blade_tex 3
T 5e70d731 u_brdf 4 T 5e70d731 u_brdf 4
@ -1991,7 +2015,7 @@ I f4a2b586 a_pos 0 vec3
I f4a2b586 i_pos 3 vec4 I f4a2b586 i_pos 3 vec4
I f4a2b586 a_nrm 1 vec3 I f4a2b586 a_nrm 1 vec3
I f4a2b586 a_uv 2 vec2 I f4a2b586 a_uv 2 vec2
B f4a2b586 frag 1 980 B f4a2b586 frag 1 1028
U f4a2b586 frag u_cascade_vp 0 mat4 5 64 U f4a2b586 frag u_cascade_vp 0 mat4 5 64
U f4a2b586 frag u_cascade_split 320 float 5 16 U f4a2b586 frag u_cascade_split 320 float 5 16
U f4a2b586 frag u_cascade_range 400 float 5 16 U f4a2b586 frag u_cascade_range 400 float 5 16
@ -2029,14 +2053,17 @@ U f4a2b586 frag u_fog_inscatter 820 float 1 0
U f4a2b586 frag u_fog_desat 824 float 1 0 U f4a2b586 frag u_fog_desat 824 float 1 0
U f4a2b586 frag u_fog_wall 828 float 1 0 U f4a2b586 frag u_fog_wall 828 float 1 0
U f4a2b586 frag u_model_h 832 float 1 0 U f4a2b586 frag u_model_h 832 float 1 0
U f4a2b586 frag u_view 848 mat4 1 0 U f4a2b586 frag u_fac_base_inv 848 vec4 1 0
U f4a2b586 frag u_tint 912 vec3 1 0 U f4a2b586 frag u_fac_mr_inv 864 vec2 1 0
U f4a2b586 frag u_rough_scale 924 float 1 0 U f4a2b586 frag u_fac_emis 880 vec3 1 0
U f4a2b586 frag u_emissive 928 float 1 0 U f4a2b586 frag u_view 896 mat4 1 0
U f4a2b586 frag u_blade_base 944 vec3 1 0 U f4a2b586 frag u_tint 960 vec3 1 0
U f4a2b586 frag u_blade_tip 960 vec3 1 0 U f4a2b586 frag u_rough_scale 972 float 1 0
U f4a2b586 frag u_blade_cols 972 float 1 0 U f4a2b586 frag u_emissive 976 float 1 0
U f4a2b586 frag u_blade_tex_on 976 float 1 0 U f4a2b586 frag u_blade_base 992 vec3 1 0
U f4a2b586 frag u_blade_tip 1008 vec3 1 0
U f4a2b586 frag u_blade_cols 1020 float 1 0
U f4a2b586 frag u_blade_tex_on 1024 float 1 0
T f4a2b586 u_arm 2 T f4a2b586 u_arm 2
T f4a2b586 u_blade_tex 3 T f4a2b586 u_blade_tex 3
T f4a2b586 u_brdf 4 T f4a2b586 u_brdf 4
@ -2071,7 +2098,7 @@ I b4587cd4 a_pos 0 vec3
I b4587cd4 i_pos 3 vec4 I b4587cd4 i_pos 3 vec4
I b4587cd4 a_nrm 1 vec3 I b4587cd4 a_nrm 1 vec3
I b4587cd4 a_uv 2 vec2 I b4587cd4 a_uv 2 vec2
B b4587cd4 frag 1 936 B b4587cd4 frag 1 984
U b4587cd4 frag u_cascade_vp 0 mat4 5 64 U b4587cd4 frag u_cascade_vp 0 mat4 5 64
U b4587cd4 frag u_cascade_split 320 float 5 16 U b4587cd4 frag u_cascade_split 320 float 5 16
U b4587cd4 frag u_cascade_range 400 float 5 16 U b4587cd4 frag u_cascade_range 400 float 5 16
@ -2109,11 +2136,14 @@ U b4587cd4 frag u_fog_inscatter 820 float 1 0
U b4587cd4 frag u_fog_desat 824 float 1 0 U b4587cd4 frag u_fog_desat 824 float 1 0
U b4587cd4 frag u_fog_wall 828 float 1 0 U b4587cd4 frag u_fog_wall 828 float 1 0
U b4587cd4 frag u_model_h 832 float 1 0 U b4587cd4 frag u_model_h 832 float 1 0
U b4587cd4 frag u_view 848 mat4 1 0 U b4587cd4 frag u_fac_base_inv 848 vec4 1 0
U b4587cd4 frag u_tint 912 vec3 1 0 U b4587cd4 frag u_fac_mr_inv 864 vec2 1 0
U b4587cd4 frag u_rough_scale 924 float 1 0 U b4587cd4 frag u_fac_emis 880 vec3 1 0
U b4587cd4 frag u_emissive 928 float 1 0 U b4587cd4 frag u_view 896 mat4 1 0
U b4587cd4 frag u_cull 932 float 1 0 U b4587cd4 frag u_tint 960 vec3 1 0
U b4587cd4 frag u_rough_scale 972 float 1 0
U b4587cd4 frag u_emissive 976 float 1 0
U b4587cd4 frag u_cull 980 float 1 0
T b4587cd4 u_arm 2 T b4587cd4 u_arm 2
T b4587cd4 u_blade_tex 3 T b4587cd4 u_blade_tex 3
T b4587cd4 u_brdf 4 T b4587cd4 u_brdf 4
@ -2148,7 +2178,7 @@ I 4dda406a a_pos 0 vec3
I 4dda406a i_pos 3 vec4 I 4dda406a i_pos 3 vec4
I 4dda406a a_nrm 1 vec3 I 4dda406a a_nrm 1 vec3
I 4dda406a a_uv 2 vec2 I 4dda406a a_uv 2 vec2
B 4dda406a frag 1 932 B 4dda406a frag 1 980
U 4dda406a frag u_cascade_vp 0 mat4 5 64 U 4dda406a frag u_cascade_vp 0 mat4 5 64
U 4dda406a frag u_cascade_split 320 float 5 16 U 4dda406a frag u_cascade_split 320 float 5 16
U 4dda406a frag u_cascade_range 400 float 5 16 U 4dda406a frag u_cascade_range 400 float 5 16
@ -2186,10 +2216,13 @@ U 4dda406a frag u_fog_inscatter 820 float 1 0
U 4dda406a frag u_fog_desat 824 float 1 0 U 4dda406a frag u_fog_desat 824 float 1 0
U 4dda406a frag u_fog_wall 828 float 1 0 U 4dda406a frag u_fog_wall 828 float 1 0
U 4dda406a frag u_model_h 832 float 1 0 U 4dda406a frag u_model_h 832 float 1 0
U 4dda406a frag u_view 848 mat4 1 0 U 4dda406a frag u_fac_base_inv 848 vec4 1 0
U 4dda406a frag u_tint 912 vec3 1 0 U 4dda406a frag u_fac_mr_inv 864 vec2 1 0
U 4dda406a frag u_rough_scale 924 float 1 0 U 4dda406a frag u_fac_emis 880 vec3 1 0
U 4dda406a frag u_emissive 928 float 1 0 U 4dda406a frag u_view 896 mat4 1 0
U 4dda406a frag u_tint 960 vec3 1 0
U 4dda406a frag u_rough_scale 972 float 1 0
U 4dda406a frag u_emissive 976 float 1 0
T 4dda406a u_arm 2 T 4dda406a u_arm 2
T 4dda406a u_blade_tex 3 T 4dda406a u_blade_tex 3
T 4dda406a u_brdf 4 T 4dda406a u_brdf 4
@ -2224,7 +2257,7 @@ I b603a056 a_pos 0 vec3
I b603a056 i_pos 3 vec4 I b603a056 i_pos 3 vec4
I b603a056 a_nrm 1 vec3 I b603a056 a_nrm 1 vec3
I b603a056 a_uv 2 vec2 I b603a056 a_uv 2 vec2
B b603a056 frag 1 932 B b603a056 frag 1 980
U b603a056 frag u_cascade_vp 0 mat4 5 64 U b603a056 frag u_cascade_vp 0 mat4 5 64
U b603a056 frag u_cascade_split 320 float 5 16 U b603a056 frag u_cascade_split 320 float 5 16
U b603a056 frag u_cascade_range 400 float 5 16 U b603a056 frag u_cascade_range 400 float 5 16
@ -2262,10 +2295,13 @@ U b603a056 frag u_fog_inscatter 820 float 1 0
U b603a056 frag u_fog_desat 824 float 1 0 U b603a056 frag u_fog_desat 824 float 1 0
U b603a056 frag u_fog_wall 828 float 1 0 U b603a056 frag u_fog_wall 828 float 1 0
U b603a056 frag u_model_h 832 float 1 0 U b603a056 frag u_model_h 832 float 1 0
U b603a056 frag u_view 848 mat4 1 0 U b603a056 frag u_fac_base_inv 848 vec4 1 0
U b603a056 frag u_tint 912 vec3 1 0 U b603a056 frag u_fac_mr_inv 864 vec2 1 0
U b603a056 frag u_rough_scale 924 float 1 0 U b603a056 frag u_fac_emis 880 vec3 1 0
U b603a056 frag u_emissive 928 float 1 0 U b603a056 frag u_view 896 mat4 1 0
U b603a056 frag u_tint 960 vec3 1 0
U b603a056 frag u_rough_scale 972 float 1 0
U b603a056 frag u_emissive 976 float 1 0
T b603a056 u_arm 2 T b603a056 u_arm 2
T b603a056 u_blade_tex 3 T b603a056 u_blade_tex 3
T b603a056 u_brdf 4 T b603a056 u_brdf 4
@ -2300,7 +2336,7 @@ I 3b183d8f a_pos 0 vec3
I 3b183d8f i_pos 3 vec4 I 3b183d8f i_pos 3 vec4
I 3b183d8f a_nrm 1 vec3 I 3b183d8f a_nrm 1 vec3
I 3b183d8f a_uv 2 vec2 I 3b183d8f a_uv 2 vec2
B 3b183d8f frag 1 932 B 3b183d8f frag 1 980
U 3b183d8f frag u_cascade_vp 0 mat4 5 64 U 3b183d8f frag u_cascade_vp 0 mat4 5 64
U 3b183d8f frag u_cascade_split 320 float 5 16 U 3b183d8f frag u_cascade_split 320 float 5 16
U 3b183d8f frag u_cascade_range 400 float 5 16 U 3b183d8f frag u_cascade_range 400 float 5 16
@ -2338,10 +2374,13 @@ U 3b183d8f frag u_fog_inscatter 820 float 1 0
U 3b183d8f frag u_fog_desat 824 float 1 0 U 3b183d8f frag u_fog_desat 824 float 1 0
U 3b183d8f frag u_fog_wall 828 float 1 0 U 3b183d8f frag u_fog_wall 828 float 1 0
U 3b183d8f frag u_model_h 832 float 1 0 U 3b183d8f frag u_model_h 832 float 1 0
U 3b183d8f frag u_view 848 mat4 1 0 U 3b183d8f frag u_fac_base_inv 848 vec4 1 0
U 3b183d8f frag u_tint 912 vec3 1 0 U 3b183d8f frag u_fac_mr_inv 864 vec2 1 0
U 3b183d8f frag u_rough_scale 924 float 1 0 U 3b183d8f frag u_fac_emis 880 vec3 1 0
U 3b183d8f frag u_emissive 928 float 1 0 U 3b183d8f frag u_view 896 mat4 1 0
U 3b183d8f frag u_tint 960 vec3 1 0
U 3b183d8f frag u_rough_scale 972 float 1 0
U 3b183d8f frag u_emissive 976 float 1 0
T 3b183d8f u_arm 2 T 3b183d8f u_arm 2
T 3b183d8f u_blade_tex 3 T 3b183d8f u_blade_tex 3
T 3b183d8f u_brdf 4 T 3b183d8f u_brdf 4
@ -2376,7 +2415,7 @@ I 79b77ed9 a_pos 0 vec3
I 79b77ed9 i_pos 3 vec4 I 79b77ed9 i_pos 3 vec4
I 79b77ed9 a_nrm 1 vec3 I 79b77ed9 a_nrm 1 vec3
I 79b77ed9 a_uv 2 vec2 I 79b77ed9 a_uv 2 vec2
B 79b77ed9 frag 1 936 B 79b77ed9 frag 1 984
U 79b77ed9 frag u_cascade_vp 0 mat4 5 64 U 79b77ed9 frag u_cascade_vp 0 mat4 5 64
U 79b77ed9 frag u_cascade_split 320 float 5 16 U 79b77ed9 frag u_cascade_split 320 float 5 16
U 79b77ed9 frag u_cascade_range 400 float 5 16 U 79b77ed9 frag u_cascade_range 400 float 5 16
@ -2414,11 +2453,14 @@ U 79b77ed9 frag u_fog_inscatter 820 float 1 0
U 79b77ed9 frag u_fog_desat 824 float 1 0 U 79b77ed9 frag u_fog_desat 824 float 1 0
U 79b77ed9 frag u_fog_wall 828 float 1 0 U 79b77ed9 frag u_fog_wall 828 float 1 0
U 79b77ed9 frag u_model_h 832 float 1 0 U 79b77ed9 frag u_model_h 832 float 1 0
U 79b77ed9 frag u_view 848 mat4 1 0 U 79b77ed9 frag u_fac_base_inv 848 vec4 1 0
U 79b77ed9 frag u_tint 912 vec3 1 0 U 79b77ed9 frag u_fac_mr_inv 864 vec2 1 0
U 79b77ed9 frag u_rough_scale 924 float 1 0 U 79b77ed9 frag u_fac_emis 880 vec3 1 0
U 79b77ed9 frag u_emissive 928 float 1 0 U 79b77ed9 frag u_view 896 mat4 1 0
U 79b77ed9 frag u_cull 932 float 1 0 U 79b77ed9 frag u_tint 960 vec3 1 0
U 79b77ed9 frag u_rough_scale 972 float 1 0
U 79b77ed9 frag u_emissive 976 float 1 0
U 79b77ed9 frag u_cull 980 float 1 0
T 79b77ed9 u_arm 2 T 79b77ed9 u_arm 2
T 79b77ed9 u_blade_tex 3 T 79b77ed9 u_blade_tex 3
T 79b77ed9 u_brdf 4 T 79b77ed9 u_brdf 4
@ -2453,7 +2495,7 @@ I b9fc2041 a_pos 0 vec3
I b9fc2041 i_pos 3 vec4 I b9fc2041 i_pos 3 vec4
I b9fc2041 a_nrm 1 vec3 I b9fc2041 a_nrm 1 vec3
I b9fc2041 a_uv 2 vec2 I b9fc2041 a_uv 2 vec2
B b9fc2041 frag 1 932 B b9fc2041 frag 1 980
U b9fc2041 frag u_cascade_vp 0 mat4 5 64 U b9fc2041 frag u_cascade_vp 0 mat4 5 64
U b9fc2041 frag u_cascade_split 320 float 5 16 U b9fc2041 frag u_cascade_split 320 float 5 16
U b9fc2041 frag u_cascade_range 400 float 5 16 U b9fc2041 frag u_cascade_range 400 float 5 16
@ -2491,10 +2533,13 @@ U b9fc2041 frag u_fog_inscatter 820 float 1 0
U b9fc2041 frag u_fog_desat 824 float 1 0 U b9fc2041 frag u_fog_desat 824 float 1 0
U b9fc2041 frag u_fog_wall 828 float 1 0 U b9fc2041 frag u_fog_wall 828 float 1 0
U b9fc2041 frag u_model_h 832 float 1 0 U b9fc2041 frag u_model_h 832 float 1 0
U b9fc2041 frag u_view 848 mat4 1 0 U b9fc2041 frag u_fac_base_inv 848 vec4 1 0
U b9fc2041 frag u_tint 912 vec3 1 0 U b9fc2041 frag u_fac_mr_inv 864 vec2 1 0
U b9fc2041 frag u_rough_scale 924 float 1 0 U b9fc2041 frag u_fac_emis 880 vec3 1 0
U b9fc2041 frag u_emissive 928 float 1 0 U b9fc2041 frag u_view 896 mat4 1 0
U b9fc2041 frag u_tint 960 vec3 1 0
U b9fc2041 frag u_rough_scale 972 float 1 0
U b9fc2041 frag u_emissive 976 float 1 0
T b9fc2041 u_arm 2 T b9fc2041 u_arm 2
T b9fc2041 u_blade_tex 3 T b9fc2041 u_blade_tex 3
T b9fc2041 u_brdf 4 T b9fc2041 u_brdf 4
@ -2831,7 +2876,7 @@ I 1fde9cd2 a_joints 5 vec4
I 1fde9cd2 a_pos 0 vec3 I 1fde9cd2 a_pos 0 vec3
I 1fde9cd2 a_nrm 1 vec3 I 1fde9cd2 a_nrm 1 vec3
I 1fde9cd2 a_uv 2 vec2 I 1fde9cd2 a_uv 2 vec2
B 1fde9cd2 frag 1 932 B 1fde9cd2 frag 1 980
U 1fde9cd2 frag u_cascade_vp 0 mat4 5 64 U 1fde9cd2 frag u_cascade_vp 0 mat4 5 64
U 1fde9cd2 frag u_cascade_split 320 float 5 16 U 1fde9cd2 frag u_cascade_split 320 float 5 16
U 1fde9cd2 frag u_cascade_range 400 float 5 16 U 1fde9cd2 frag u_cascade_range 400 float 5 16
@ -2869,10 +2914,13 @@ U 1fde9cd2 frag u_fog_inscatter 820 float 1 0
U 1fde9cd2 frag u_fog_desat 824 float 1 0 U 1fde9cd2 frag u_fog_desat 824 float 1 0
U 1fde9cd2 frag u_fog_wall 828 float 1 0 U 1fde9cd2 frag u_fog_wall 828 float 1 0
U 1fde9cd2 frag u_model_h 832 float 1 0 U 1fde9cd2 frag u_model_h 832 float 1 0
U 1fde9cd2 frag u_view 848 mat4 1 0 U 1fde9cd2 frag u_fac_base_inv 848 vec4 1 0
U 1fde9cd2 frag u_tint 912 vec3 1 0 U 1fde9cd2 frag u_fac_mr_inv 864 vec2 1 0
U 1fde9cd2 frag u_rough_scale 924 float 1 0 U 1fde9cd2 frag u_fac_emis 880 vec3 1 0
U 1fde9cd2 frag u_emissive 928 float 1 0 U 1fde9cd2 frag u_view 896 mat4 1 0
U 1fde9cd2 frag u_tint 960 vec3 1 0
U 1fde9cd2 frag u_rough_scale 972 float 1 0
U 1fde9cd2 frag u_emissive 976 float 1 0
T 1fde9cd2 u_arm 2 T 1fde9cd2 u_arm 2
T 1fde9cd2 u_blade_tex 3 T 1fde9cd2 u_blade_tex 3
T 1fde9cd2 u_brdf 4 T 1fde9cd2 u_brdf 4
@ -2897,7 +2945,7 @@ I a5ad521e a_joints 5 vec4
I a5ad521e a_pos 0 vec3 I a5ad521e a_pos 0 vec3
I a5ad521e a_nrm 1 vec3 I a5ad521e a_nrm 1 vec3
I a5ad521e a_uv 2 vec2 I a5ad521e a_uv 2 vec2
B a5ad521e frag 1 932 B a5ad521e frag 1 980
U a5ad521e frag u_cascade_vp 0 mat4 5 64 U a5ad521e frag u_cascade_vp 0 mat4 5 64
U a5ad521e frag u_cascade_split 320 float 5 16 U a5ad521e frag u_cascade_split 320 float 5 16
U a5ad521e frag u_cascade_range 400 float 5 16 U a5ad521e frag u_cascade_range 400 float 5 16
@ -2935,10 +2983,13 @@ U a5ad521e frag u_fog_inscatter 820 float 1 0
U a5ad521e frag u_fog_desat 824 float 1 0 U a5ad521e frag u_fog_desat 824 float 1 0
U a5ad521e frag u_fog_wall 828 float 1 0 U a5ad521e frag u_fog_wall 828 float 1 0
U a5ad521e frag u_model_h 832 float 1 0 U a5ad521e frag u_model_h 832 float 1 0
U a5ad521e frag u_view 848 mat4 1 0 U a5ad521e frag u_fac_base_inv 848 vec4 1 0
U a5ad521e frag u_tint 912 vec3 1 0 U a5ad521e frag u_fac_mr_inv 864 vec2 1 0
U a5ad521e frag u_rough_scale 924 float 1 0 U a5ad521e frag u_fac_emis 880 vec3 1 0
U a5ad521e frag u_emissive 928 float 1 0 U a5ad521e frag u_view 896 mat4 1 0
U a5ad521e frag u_tint 960 vec3 1 0
U a5ad521e frag u_rough_scale 972 float 1 0
U a5ad521e frag u_emissive 976 float 1 0
T a5ad521e u_arm 2 T a5ad521e u_arm 2
T a5ad521e u_blade_tex 3 T a5ad521e u_blade_tex 3
T a5ad521e u_brdf 4 T a5ad521e u_brdf 4
@ -3858,7 +3909,7 @@ I b20fdcb5 i_ground 6 vec4
I b20fdcb5 a_pos 0 vec3 I b20fdcb5 a_pos 0 vec3
I b20fdcb5 i_tint 5 vec4 I b20fdcb5 i_tint 5 vec4
I b20fdcb5 a_uv 2 vec2 I b20fdcb5 a_uv 2 vec2
B b20fdcb5 frag 1 980 B b20fdcb5 frag 1 1028
U b20fdcb5 frag u_cascade_vp 0 mat4 5 64 U b20fdcb5 frag u_cascade_vp 0 mat4 5 64
U b20fdcb5 frag u_cascade_split 320 float 5 16 U b20fdcb5 frag u_cascade_split 320 float 5 16
U b20fdcb5 frag u_cascade_range 400 float 5 16 U b20fdcb5 frag u_cascade_range 400 float 5 16
@ -3896,14 +3947,17 @@ U b20fdcb5 frag u_fog_inscatter 820 float 1 0
U b20fdcb5 frag u_fog_desat 824 float 1 0 U b20fdcb5 frag u_fog_desat 824 float 1 0
U b20fdcb5 frag u_fog_wall 828 float 1 0 U b20fdcb5 frag u_fog_wall 828 float 1 0
U b20fdcb5 frag u_model_h 832 float 1 0 U b20fdcb5 frag u_model_h 832 float 1 0
U b20fdcb5 frag u_view 848 mat4 1 0 U b20fdcb5 frag u_fac_base_inv 848 vec4 1 0
U b20fdcb5 frag u_tint 912 vec3 1 0 U b20fdcb5 frag u_fac_mr_inv 864 vec2 1 0
U b20fdcb5 frag u_rough_scale 924 float 1 0 U b20fdcb5 frag u_fac_emis 880 vec3 1 0
U b20fdcb5 frag u_emissive 928 float 1 0 U b20fdcb5 frag u_view 896 mat4 1 0
U b20fdcb5 frag u_blade_base 944 vec3 1 0 U b20fdcb5 frag u_tint 960 vec3 1 0
U b20fdcb5 frag u_blade_tip 960 vec3 1 0 U b20fdcb5 frag u_rough_scale 972 float 1 0
U b20fdcb5 frag u_blade_cols 972 float 1 0 U b20fdcb5 frag u_emissive 976 float 1 0
U b20fdcb5 frag u_blade_tex_on 976 float 1 0 U b20fdcb5 frag u_blade_base 992 vec3 1 0
U b20fdcb5 frag u_blade_tip 1008 vec3 1 0
U b20fdcb5 frag u_blade_cols 1020 float 1 0
U b20fdcb5 frag u_blade_tex_on 1024 float 1 0
T b20fdcb5 u_arm 2 T b20fdcb5 u_arm 2
T b20fdcb5 u_blade_tex 3 T b20fdcb5 u_blade_tex 3
T b20fdcb5 u_brdf 4 T b20fdcb5 u_brdf 4