shader_type spatial; render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx; uniform sampler2DArray textures : source_color, filter_linear_mipmap, repeat_enable; uniform sampler2DArray blend_textures : source_color, filter_nearest_mipmap, repeat_enable; void fragment() { int num_textures = textureSize(textures, 0).z; int num_blend_textures = textureSize(blend_textures, 0).z; float tex_primary_index = COLOR.r * float(num_textures); float tex_secondary_index = COLOR.g * float(num_textures); float tex_blend_index = COLOR.b * float(num_blend_textures); vec4 tex_primary = texture(textures, vec3(UV, tex_primary_index)); vec4 tex_secondary = texture(textures, vec3(UV, tex_secondary_index)); vec4 blend = texture(blend_textures, vec3(UV, tex_blend_index)); ALBEDO = mix(tex_secondary, tex_primary, blend.a).rgb; METALLIC = 0.0; SPECULAR = 0.5; ROUGHNESS = 1.0; }