[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://ck8h6dvojuegj"] [sub_resource type="Shader" id="Shader_eumy4"] code = "shader_type spatial; render_mode blend_mix,depth_draw_opaque,cull_back,unshaded; uniform sampler2D texture_albedo : filter_linear_mipmap_anisotropic,repeat_enable; uniform sampler2DArray lightmap_albedo : filter_linear_mipmap_anisotropic,repeat_enable; uniform bool lightmap_2x; uniform ivec2 lightmap_bitmask; float srgb_to_linear_e(float input) { float output; if (input <= 0.04045) { output = input / 12.92; } else { output = pow((input + 0.055) / 1.055, 2.4); } return output; } vec3 srgb_to_linear(vec3 input) { vec3 output; output.r = srgb_to_linear_e(input.r); output.g = srgb_to_linear_e(input.g); output.b = srgb_to_linear_e(input.b); return output; } void fragment() { vec4 albedo_tex = texture(texture_albedo,UV); if (lightmap_bitmask.x == 0 && lightmap_bitmask.y == 0) { ALBEDO = srgb_to_linear(albedo_tex.rgb); } else { vec4 lightmap_tex = vec4(0.0); int mask = lightmap_bitmask.x; for (int i = 0; i < 33; i++) { if (i == 32) { mask = lightmap_bitmask.y; } bool layer_enabled = (mask & (1 << (i % 32))) != 0; if (layer_enabled) { lightmap_tex += texture(lightmap_albedo, vec3(UV2, float(i))); } } lightmap_tex = min(vec4(1.0), lightmap_tex); if (lightmap_2x) { lightmap_tex *= 2.0f; } ALBEDO = srgb_to_linear((albedo_tex * lightmap_tex).rgb); } } " [resource] render_priority = 0 shader = SubResource("Shader_eumy4") shader_parameter/lightmap_2x = null shader_parameter/lightmap_bitmask = null