Update leenkx/blender/lnx/material/make_mesh.py
This commit is contained in:
		@ -646,6 +646,7 @@ def make_forward_base(con_mesh, parse_opacity=False, transluc_pass=False):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    frag.add_include('std/light.glsl')
 | 
					    frag.add_include('std/light.glsl')
 | 
				
			||||||
    is_shadows = '_ShadowMap' in wrd.world_defs
 | 
					    is_shadows = '_ShadowMap' in wrd.world_defs
 | 
				
			||||||
 | 
					    is_transparent_shadows = '_ShadowMapTransparent' in wrd.world_defs
 | 
				
			||||||
    is_shadows_atlas = '_ShadowMapAtlas' in wrd.world_defs
 | 
					    is_shadows_atlas = '_ShadowMapAtlas' in wrd.world_defs
 | 
				
			||||||
    is_single_atlas = is_shadows_atlas and '_SingleAtlas' in wrd.world_defs
 | 
					    is_single_atlas = is_shadows_atlas and '_SingleAtlas' in wrd.world_defs
 | 
				
			||||||
    shadowmap_sun = 'shadowMap'
 | 
					    shadowmap_sun = 'shadowMap'
 | 
				
			||||||
@ -662,7 +663,9 @@ def make_forward_base(con_mesh, parse_opacity=False, transluc_pass=False):
 | 
				
			|||||||
        frag.add_uniform('sampler2D senvmapBrdf', link='$brdf.png')
 | 
					        frag.add_uniform('sampler2D senvmapBrdf', link='$brdf.png')
 | 
				
			||||||
        frag.write('vec2 envBRDF = texelFetch(senvmapBrdf, ivec2(vec2(dotNV, 1.0 - roughness) * 256.0), 0).xy;')
 | 
					        frag.write('vec2 envBRDF = texelFetch(senvmapBrdf, ivec2(vec2(dotNV, 1.0 - roughness) * 256.0), 0).xy;')
 | 
				
			||||||
        frag.write('vec3 F = f0 * envBRDF.x + envBRDF.y;')
 | 
					        frag.write('vec3 F = f0 * envBRDF.x + envBRDF.y;')
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        frag.write('vec3 F = f0;')
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
    if '_Irr' in wrd.world_defs:
 | 
					    if '_Irr' in wrd.world_defs:
 | 
				
			||||||
        frag.add_include('std/shirr.glsl')
 | 
					        frag.add_include('std/shirr.glsl')
 | 
				
			||||||
        frag.add_uniform('vec4 shirr[7]', link='_envmapIrradiance')
 | 
					        frag.add_uniform('vec4 shirr[7]', link='_envmapIrradiance')
 | 
				
			||||||
@ -730,17 +733,21 @@ def make_forward_base(con_mesh, parse_opacity=False, transluc_pass=False):
 | 
				
			|||||||
        if is_shadows:
 | 
					        if is_shadows:
 | 
				
			||||||
            frag.add_uniform('bool receiveShadow')
 | 
					            frag.add_uniform('bool receiveShadow')
 | 
				
			||||||
            frag.add_uniform(f'sampler2DShadow {shadowmap_sun}', top=True)
 | 
					            frag.add_uniform(f'sampler2DShadow {shadowmap_sun}', top=True)
 | 
				
			||||||
            frag.add_uniform(f'sampler2D {shadowmap_sun_tr}', top=True)
 | 
					            if is_transparent_shadows:
 | 
				
			||||||
 | 
					                frag.add_uniform(f'sampler2D {shadowmap_sun_tr}', top=True)
 | 
				
			||||||
            frag.add_uniform('float shadowsBias', '_sunShadowsBias')
 | 
					            frag.add_uniform('float shadowsBias', '_sunShadowsBias')
 | 
				
			||||||
            frag.write('if (receiveShadow) {')
 | 
					            frag.write('if (receiveShadow) {')
 | 
				
			||||||
            if '_CSM' in wrd.world_defs:
 | 
					            if '_CSM' in wrd.world_defs:
 | 
				
			||||||
                frag.add_include('std/shadows.glsl')
 | 
					                frag.add_include('std/shadows.glsl')
 | 
				
			||||||
                frag.add_uniform('vec4 casData[shadowmapCascades * 4 + 4]', '_cascadeData', included=True)
 | 
					                frag.add_uniform('vec4 casData[shadowmapCascades * 4 + 4]', '_cascadeData', included=True)
 | 
				
			||||||
                frag.add_uniform('vec3 eye', '_cameraPosition')
 | 
					                frag.add_uniform('vec3 eye', '_cameraPosition')
 | 
				
			||||||
                if parse_opacity:
 | 
					                frag.write(f'svisibility = shadowTestCascade({shadowmap_sun},')
 | 
				
			||||||
                    frag.write(f'svisibility = shadowTestCascade({shadowmap_sun}, {shadowmap_sun_tr}, eye, wposition + n * shadowsBias * 10, shadowsBias, true);')
 | 
					                if is_transparent_shadows:
 | 
				
			||||||
                else:
 | 
					                    frag.write(f'{shadowmap_sun_tr},')
 | 
				
			||||||
                    frag.write(f'svisibility = shadowTestCascade({shadowmap_sun}, {shadowmap_sun_tr}, eye, wposition + n * shadowsBias * 10, shadowsBias, false);')
 | 
					                frag.write('eye, wposition + n * shadowsBias * 10, shadowsBias')
 | 
				
			||||||
 | 
					                if is_transparent_shadows:
 | 
				
			||||||
 | 
					                    frag.write(', false')
 | 
				
			||||||
 | 
					                frag.write(');')
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                if tese is not None:
 | 
					                if tese is not None:
 | 
				
			||||||
                    tese.add_out('vec4 lightPosition')
 | 
					                    tese.add_out('vec4 lightPosition')
 | 
				
			||||||
@ -757,10 +764,13 @@ def make_forward_base(con_mesh, parse_opacity=False, transluc_pass=False):
 | 
				
			|||||||
                        vert.write('lightPosition = LWVP * pos;')
 | 
					                        vert.write('lightPosition = LWVP * pos;')
 | 
				
			||||||
                frag.write('vec3 lPos = lightPosition.xyz / lightPosition.w;')
 | 
					                frag.write('vec3 lPos = lightPosition.xyz / lightPosition.w;')
 | 
				
			||||||
                frag.write('const vec2 smSize = shadowmapSize;')
 | 
					                frag.write('const vec2 smSize = shadowmapSize;')
 | 
				
			||||||
                if parse_opacity:
 | 
					                frag.write(f'svisibility = PCF({shadowmap_sun},')
 | 
				
			||||||
                    frag.write(f'svisibility = PCF({shadowmap_sun}, {shadowmap_sun_tr}, lPos.xy, lPos.z - shadowsBias, smSize, true);')
 | 
					                if is_transparent_shadows:
 | 
				
			||||||
                else:
 | 
					                    frag.write(f'{shadowmap_sun_tr},')
 | 
				
			||||||
                    frag.write(f'svisibility = PCF({shadowmap_sun}, {shadowmap_sun_tr}, lPos.xy, lPos.z - shadowsBias, smSize, false);')
 | 
					                frag.write('lPos.xy, lPos.z - shadowsBias, smSize')
 | 
				
			||||||
 | 
					                if is_transparent_shadows:
 | 
				
			||||||
 | 
					                    frag.write(', false')
 | 
				
			||||||
 | 
					                frag.write(');')
 | 
				
			||||||
            if '_VoxelShadow' in wrd.world_defs:
 | 
					            if '_VoxelShadow' in wrd.world_defs:
 | 
				
			||||||
                frag.write('svisibility *= (1.0 - traceShadow(wposition, n, voxels, voxelsSDF, sunDir, clipmaps, gl_FragCoord.xy, velocity).r) * voxelgiShad;')
 | 
					                frag.write('svisibility *= (1.0 - traceShadow(wposition, n, voxels, voxelsSDF, sunDir, clipmaps, gl_FragCoord.xy, velocity).r) * voxelgiShad;')
 | 
				
			||||||
            frag.write('}') # receiveShadow
 | 
					            frag.write('}') # receiveShadow
 | 
				
			||||||
@ -781,7 +791,8 @@ def make_forward_base(con_mesh, parse_opacity=False, transluc_pass=False):
 | 
				
			|||||||
                # Skip world matrix, already in world-space
 | 
					                # Skip world matrix, already in world-space
 | 
				
			||||||
                frag.add_uniform('mat4 LWVPSpot[1]', link='_biasLightViewProjectionMatrixSpotArray', included=True)
 | 
					                frag.add_uniform('mat4 LWVPSpot[1]', link='_biasLightViewProjectionMatrixSpotArray', included=True)
 | 
				
			||||||
                frag.add_uniform('sampler2DShadow shadowMapSpot[1]', included=True)
 | 
					                frag.add_uniform('sampler2DShadow shadowMapSpot[1]', included=True)
 | 
				
			||||||
                frag.add_uniform('sampler2D shadowMapSpotTransparent[1]', included=True)
 | 
					                if is_transparent_shadows:
 | 
				
			||||||
 | 
					                    frag.add_uniform('sampler2D shadowMapSpotTransparent[1]', included=True)
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                frag.add_uniform('vec2 lightProj', link='_lightPlaneProj', included=True)
 | 
					                frag.add_uniform('vec2 lightProj', link='_lightPlaneProj', included=True)
 | 
				
			||||||
                frag.add_uniform('samplerCubeShadow shadowMapPoint[1]', included=True)
 | 
					                frag.add_uniform('samplerCubeShadow shadowMapPoint[1]', included=True)
 | 
				
			||||||
@ -790,10 +801,8 @@ def make_forward_base(con_mesh, parse_opacity=False, transluc_pass=False):
 | 
				
			|||||||
        frag.write('  wposition, n, vVec, dotNV, pointPos, pointCol, albedo, roughness, specular, f0')
 | 
					        frag.write('  wposition, n, vVec, dotNV, pointPos, pointCol, albedo, roughness, specular, f0')
 | 
				
			||||||
        if is_shadows:
 | 
					        if is_shadows:
 | 
				
			||||||
            frag.write(', 0, pointBias, receiveShadow')
 | 
					            frag.write(', 0, pointBias, receiveShadow')
 | 
				
			||||||
            if '_ShadowMapTransparent' in wrd.world_defs and parse_opacity:
 | 
					            if is_transparent_shadows:
 | 
				
			||||||
                frag.write(', opacity != 1.0')
 | 
					                frag.write(', opacity != 1.0')
 | 
				
			||||||
            else:
 | 
					 | 
				
			||||||
                frag.write(', false')
 | 
					 | 
				
			||||||
        if '_Spot' in wrd.world_defs:
 | 
					        if '_Spot' in wrd.world_defs:
 | 
				
			||||||
            frag.write(', true, spotData.x, spotData.y, spotDir, spotData.zw, spotRight')
 | 
					            frag.write(', true, spotData.x, spotData.y, spotDir, spotData.zw, spotRight')
 | 
				
			||||||
        if '_VoxelShadow' in wrd.world_defs:
 | 
					        if '_VoxelShadow' in wrd.world_defs:
 | 
				
			||||||
@ -803,9 +812,10 @@ def make_forward_base(con_mesh, parse_opacity=False, transluc_pass=False):
 | 
				
			|||||||
        if '_MicroShadowing' in wrd.world_defs:
 | 
					        if '_MicroShadowing' in wrd.world_defs:
 | 
				
			||||||
            frag.write(', occlusion')
 | 
					            frag.write(', occlusion')
 | 
				
			||||||
        if '_SSRS' in wrd.world_defs:
 | 
					        if '_SSRS' in wrd.world_defs:
 | 
				
			||||||
 | 
					            frag.add_uniform('sampler2D gbufferD')
 | 
				
			||||||
            frag.add_uniform('mat4 invVP', '_inverseViewProjectionMatrix')
 | 
					            frag.add_uniform('mat4 invVP', '_inverseViewProjectionMatrix')
 | 
				
			||||||
            frag.add_uniform('vec3 eye', '_cameraPosition')
 | 
					            frag.add_uniform('vec3 eye', '_cameraPosition')
 | 
				
			||||||
            frag.write(', wposition.z, invVP, eye')
 | 
					            frag.write(', gbufferD, invVP, eye')
 | 
				
			||||||
        frag.write(');')
 | 
					        frag.write(');')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if '_Clusters' in wrd.world_defs:
 | 
					    if '_Clusters' in wrd.world_defs:
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user