diff --git a/Shaders/deferred_light/deferred_light.frag.glsl b/Shaders/deferred_light/deferred_light.frag.glsl index e119349e..fe81fad3 100644 --- a/Shaders/deferred_light/deferred_light.frag.glsl +++ b/Shaders/deferred_light/deferred_light.frag.glsl @@ -94,7 +94,7 @@ uniform vec3 eye; uniform vec3 eyeLook; #ifdef _Clusters -uniform vec4 lightsArray[maxLights * 2]; +uniform vec4 lightsArray[maxLights * 3]; #ifdef _Spot uniform vec4 lightsArraySpot[maxLights]; #endif @@ -456,18 +456,19 @@ void main() { n, v, dotNV, - lightsArray[li * 2].xyz, // lp - lightsArray[li * 2 + 1].xyz, // lightCol + lightsArray[li * 3].xyz, // lp + lightsArray[li * 3 + 1].xyz, // lightCol albedo, roughness, occspec.y, f0 #ifdef _ShadowMap - , li, lightsArray[li * 2].w, true // bias + // light index, shadow bias, cast_shadows + , li, lightsArray[li * 3 + 2].x, lightsArray[li * 3 + 2].z != 0.0 #endif #ifdef _Spot - , lightsArray[li * 2 + 1].w != 0.0 - , lightsArray[li * 2 + 1].w // cutoff + , lightsArray[li * 3 + 2].y != 0.0 + , lightsArray[li * 3 + 2].y // cutoff , lightsArraySpot[li].w // cutoff - exponent , lightsArraySpot[li].xyz // spotDir #endif diff --git a/Shaders/deferred_light_mobile/deferred_light.frag.glsl b/Shaders/deferred_light_mobile/deferred_light.frag.glsl index f1b32985..3d679c7e 100644 --- a/Shaders/deferred_light_mobile/deferred_light.frag.glsl +++ b/Shaders/deferred_light_mobile/deferred_light.frag.glsl @@ -37,7 +37,7 @@ uniform vec3 eye; uniform vec3 eyeLook; #ifdef _Clusters -uniform vec4 lightsArray[maxLights * 2]; +uniform vec4 lightsArray[maxLights * 3]; #ifdef _Spot uniform vec4 lightsArraySpot[maxLights]; #endif @@ -258,18 +258,19 @@ void main() { n, v, dotNV, - lightsArray[li * 2].xyz, // lp - lightsArray[li * 2 + 1].xyz, // lightCol + lightsArray[li * 3].xyz, // lp + lightsArray[li * 3 + 1].xyz, // lightCol albedo, roughness, occspec.y, f0 #ifdef _ShadowMap - , li, lightsArray[li * 2].w, true // bias + // light index, shadow bias, cast_shadows + , li, lightsArray[li * 3 + 2].x, lightsArray[li * 3 + 2].z != 0.0 #endif #ifdef _Spot - , lightsArray[li * 2 + 1].w != 0.0 - , lightsArray[li * 2 + 1].w // cutoff + , lightsArray[li * 3 + 2].y != 0.0 + , lightsArray[li * 3 + 2].y // cutoff , lightsArraySpot[li].w // cutoff - exponent , lightsArraySpot[li].xyz // spotDir #endif diff --git a/Shaders/volumetric_light/volumetric_light.frag.glsl b/Shaders/volumetric_light/volumetric_light.frag.glsl index e1306b06..a0817b54 100644 --- a/Shaders/volumetric_light/volumetric_light.frag.glsl +++ b/Shaders/volumetric_light/volumetric_light.frag.glsl @@ -12,7 +12,7 @@ uniform sampler2D gbufferD; uniform sampler2D snoise; #ifdef _Clusters -uniform vec4 lightsArray[maxLights * 2]; +uniform vec4 lightsArray[maxLights * 3]; #ifdef _Spot uniform vec4 lightsArraySpot[maxLights]; #endif diff --git a/Sources/armory/renderpath/Inc.hx b/Sources/armory/renderpath/Inc.hx index 940732a3..62109321 100644 --- a/Sources/armory/renderpath/Inc.hx +++ b/Sources/armory/renderpath/Inc.hx @@ -57,7 +57,11 @@ class Inc { break; if (LightObject.discardLightCulled(light)) continue; if (light.data.raw.type == "point") { - for(k in 0...light.tileOffsetX.length) { + if (!light.data.raw.cast_shadow) { + j += 4 * 6; + continue; + } + for(k in 0...6) { LightObject.pointLightsData[j ] = light.tileOffsetX[k]; // posx LightObject.pointLightsData[j + 1] = light.tileOffsetY[k]; // posy LightObject.pointLightsData[j + 2] = light.tileScale[k]; // tile scale factor relative to atlas diff --git a/blender/arm/material/make_cluster.py b/blender/arm/material/make_cluster.py index 1ac91d5f..e3d104f1 100644 --- a/blender/arm/material/make_cluster.py +++ b/blender/arm/material/make_cluster.py @@ -9,7 +9,7 @@ def write(vert, frag): frag.add_include_front('std/clusters.glsl') frag.add_uniform('vec2 cameraProj', link='_cameraPlaneProj') frag.add_uniform('vec2 cameraPlane', link='_cameraPlane') - frag.add_uniform('vec4 lightsArray[maxLights * 2]', link='_lightsArray') + frag.add_uniform('vec4 lightsArray[maxLights * 3]', link='_lightsArray') frag.add_uniform('sampler2D clustersData', link='_clustersData') if is_shadows: frag.add_uniform('bool receiveShadow') @@ -56,19 +56,19 @@ def write(vert, frag): frag.write(' n,') frag.write(' vVec,') frag.write(' dotNV,') - frag.write(' lightsArray[li * 2].xyz,') # lp - frag.write(' lightsArray[li * 2 + 1].xyz,') # lightCol + frag.write(' lightsArray[li * 3].xyz,') # lp + frag.write(' lightsArray[li * 3 + 1].xyz,') # lightCol frag.write(' albedo,') frag.write(' roughness,') frag.write(' specular,') frag.write(' f0') if is_shadows: - frag.write(' , li, lightsArray[li * 2].w, receiveShadow') # bias + frag.write('\t, li, lightsArray[li * 3 + 2].x, lightsArray[li * 3 + 2].z != 0.0') # bias if '_Spot' in wrd.world_defs: - frag.write(' , lightsArray[li * 2 + 1].w != 0.0') - frag.write(' , lightsArray[li * 2 + 1].w') # cutoff - frag.write(' , lightsArraySpot[li].w') # cutoff - exponent - frag.write(' , lightsArraySpot[li].xyz') # spotDir + frag.write('\t, lightsArray[li * 3 + 2].y != 0.0') + frag.write('\t, lightsArray[li * 3 + 2].y') # cutoff + frag.write('\t, lightsArraySpot[li].w') # cutoff - exponent + frag.write('\t, lightsArraySpot[li].xyz') # spotDir if '_VoxelShadow' in wrd.world_defs and '_VoxelAOvar' in wrd.world_defs: frag.write(' , voxels, voxpos') frag.write(');')