From 7b17633c283efedfd2093d93aa92e8a266dc211c Mon Sep 17 00:00:00 2001 From: Onek8 Date: Sat, 7 Jun 2025 19:47:12 +0000 Subject: [PATCH] Update leenkx/blender/lnx/material/make_cluster.py --- leenkx/blender/lnx/material/make_cluster.py | 30 ++++++++++++--------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/leenkx/blender/lnx/material/make_cluster.py b/leenkx/blender/lnx/material/make_cluster.py index 8e40606..abe68f1 100644 --- a/leenkx/blender/lnx/material/make_cluster.py +++ b/leenkx/blender/lnx/material/make_cluster.py @@ -19,6 +19,7 @@ def write(vert: shader.Shader, frag: shader.Shader): parse_opacity = blend or mat_utils.is_transluc(mat_state.material) is_mobile = rpdat.lnx_material_model == 'Mobile' is_shadows = '_ShadowMap' in wrd.world_defs + is_transparent_shadows = '_ShadowMapTransparent' in wrd.world_defs is_shadows_atlas = '_ShadowMapAtlas' in wrd.world_defs is_single_atlas = '_SingleAtlas' in wrd.world_defs @@ -33,14 +34,17 @@ def write(vert: shader.Shader, frag: shader.Shader): if is_shadows_atlas: if not is_single_atlas: frag.add_uniform('sampler2DShadow shadowMapAtlasPoint', included=True) - frag.add_uniform('sampler2D shadowMapAtlasPointTransparent', included=True) + if is_transparent_shadows: + frag.add_uniform('sampler2D shadowMapAtlasPointTransparent', included=True) else: frag.add_uniform('sampler2DShadow shadowMapAtlas', top=True) - frag.add_uniform('sampler2D shadowMapAtlasTransparent', top=True) + if is_transparent_shadows: + frag.add_uniform('sampler2D shadowMapAtlasTransparent', top=True) frag.add_uniform('vec4 pointLightDataArray[maxLightsCluster]', link='_pointLightsAtlasArray', included=True) else: frag.add_uniform('samplerCubeShadow shadowMapPoint[4]', included=True) - frag.add_uniform('samplerCube shadowMapPointTransparent[4]', included=True) + if is_transparent_shadows: + frag.add_uniform('samplerCube shadowMapPointTransparent[4]', included=True) if not '_VoxelAOvar' in wrd.world_defs and not '_VoxelGI' in wrd.world_defs or ((parse_opacity or '_VoxelShadow' in wrd.world_defs) and ('_VoxelAOvar' in wrd.world_defs or '_VoxelGI' in wrd.world_defs)): vert.add_out('vec4 wvpposition') @@ -62,13 +66,16 @@ def write(vert: shader.Shader, frag: shader.Shader): if is_shadows_atlas: if not is_single_atlas: frag.add_uniform('sampler2DShadow shadowMapAtlasSpot', included=True) - frag.add_uniform('sampler2D shadowMapAtlasSpotTransparent', included=True) + if is_transparent_shadows: + frag.add_uniform('sampler2D shadowMapAtlasSpotTransparent', included=True) else: frag.add_uniform('sampler2DShadow shadowMapAtlas', top=True) - frag.add_uniform('sampler2D shadowMapAtlasTransparent', top=True) + if is_transparent_shadows: + frag.add_uniform('sampler2D shadowMapAtlasTransparent', top=True) else: frag.add_uniform('sampler2DShadow shadowMapSpot[4]', included=True) - frag.add_uniform('sampler2D shadowMapSpotTransparent[4]', included=True) + if is_transparent_shadows: + frag.add_uniform('sampler2D shadowMapSpotTransparent[4]', included=True) frag.add_uniform('mat4 LWVPSpotArray[maxLightsCluster]', link='_biasLightWorldViewProjectionMatrixSpotArray', included=True) frag.write('for (int i = 0; i < min(numLights, maxLightsCluster); i++) {') @@ -85,11 +92,9 @@ def write(vert: shader.Shader, frag: shader.Shader): frag.write(' specular,') frag.write(' f0') if is_shadows: - frag.write('\t, li, lightsArray[li * 3 + 2].x, lightsArray[li * 3 + 2].z != 0.0') - if '_ShadowMapTransparent' in wrd.world_defs and parse_opacity: - frag.write(', opacity != 1.0') - else: - frag.write(', false') + frag.write('\t, li, lightsArray[li * 3 + 2].x, lightsArray[li * 3 + 2].z != 0.0') # bias + if is_transparent_shadows: + frag.write('\t, opacity != 1.0') if '_Spot' in wrd.world_defs: frag.write('\t, lightsArray[li * 3 + 2].y != 0.0') frag.write('\t, lightsArray[li * 3 + 2].y') # spot size (cutoff) @@ -102,9 +107,10 @@ def write(vert: shader.Shader, frag: shader.Shader): if '_MicroShadowing' in wrd.world_defs and not is_mobile: frag.write('\t, occlusion') if '_SSRS' in wrd.world_defs: + frag.add_uniform('sampler2D gbufferD') frag.add_uniform('mat4 invVP', '_inverseViewProjectionMatrix') frag.add_uniform('vec3 eye', '_cameraPosition') - frag.write(', wposition.z, invVP, eye') + frag.write(', gbufferD, invVP, eye') frag.write(');') frag.write('}') # for numLights