From 7f39479948aa12287181d8374d83fb346d9d920c Mon Sep 17 00:00:00 2001 From: Onek8 Date: Thu, 14 May 2026 23:18:07 -0700 Subject: [PATCH] Update --- Krom/kinc.dmp | Bin 0 -> 130402 bytes .../volumetric_light.frag.glsl | 2 +- .../Shaders/voxel_light/voxel_light.comp.glsl | 11 +- .../voxel_temporal/voxel_temporal.comp.glsl | 105 ++++++++---------- leenkx/Sources/leenkx/renderpath/Inc.hx | 76 ++++++------- leenkx/blender/lnx/material/make_voxel.py | 2 +- 6 files changed, 87 insertions(+), 109 deletions(-) create mode 100644 Krom/kinc.dmp diff --git a/Krom/kinc.dmp b/Krom/kinc.dmp new file mode 100644 index 0000000000000000000000000000000000000000..9599794978980a351ff429978c4dc2cc1b175b9b GIT binary patch literal 130402 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 literal 0 HcmV?d00001 diff --git a/leenkx/Shaders/volumetric_light/volumetric_light.frag.glsl b/leenkx/Shaders/volumetric_light/volumetric_light.frag.glsl index bb342fc..2a3fb23 100644 --- a/leenkx/Shaders/volumetric_light/volumetric_light.frag.glsl +++ b/leenkx/Shaders/volumetric_light/volumetric_light.frag.glsl @@ -137,7 +137,7 @@ void rayStep(inout vec3 curPos, inout float curOpticalDepth, inout float scatter visibility *= spotlightMask(normalize(pointPos - curPos), spotDir, spotRight, spotData.zw, spotData.x, spotData.y); #else vec3 ld = pointPos - curPos; - visibility = PCFCube(shadowMapPoint[0], ld, -normalize(ld), pointBias, lightProj, vec3(0.0)); + visibility = PCFCube(shadowMapPoint[0], ld, -normalize(ld), pointBias, lightProj, vec3(0.0)).x; #endif #endif diff --git a/leenkx/Shaders/voxel_light/voxel_light.comp.glsl b/leenkx/Shaders/voxel_light/voxel_light.comp.glsl index 3fbdd82..759fc78 100644 --- a/leenkx/Shaders/voxel_light/voxel_light.comp.glsl +++ b/leenkx/Shaders/voxel_light/voxel_light.comp.glsl @@ -96,7 +96,7 @@ void main() { wposition += vec3(clipmaps[clipmapLevel * 10 + 4], clipmaps[clipmapLevel * 10 + 5], clipmaps[clipmapLevel * 10 + 6]); float visibility; - vec3 lp = lightPos -wposition; + vec3 lp = lightPos - wposition; vec3 l; if (lightType == 0) { l = lightDir; visibility = 1.0; } else { l = normalize(lp); visibility = attenuate(distance(wposition, lightPos)); } @@ -105,7 +105,7 @@ void main() { if (lightShadow == 1) { vec4 lightPosition = LVP * vec4(wposition, 1.0); vec3 lPos = lightPosition.xyz / lightPosition.w; - visibility = texture(shadowMap, vec3(lPos.xy, lPos.z - shadowsBias)).r; + visibility *= texture(shadowMap, vec3(lPos.xy, lPos.z - shadowsBias)).r; } else if (lightShadow == 2) { vec4 lightPosition = LVP * vec4(wposition, 1.0); @@ -129,7 +129,8 @@ void main() { } #endif - imageAtomicAdd(voxelsLight, dst, uint(visibility * lightColor.r * 255)); - imageAtomicAdd(voxelsLight, dst + ivec3(0, 0, voxelgiResolution.x), uint(visibility * lightColor.g * 255)); - imageAtomicAdd(voxelsLight, dst + ivec3(0, 0, voxelgiResolution.x * 2), uint(visibility * lightColor.b * 255)); + vec3 light = visibility * lightColor; + imageAtomicAdd(voxelsLight, dst, uint(light.r * 255)); + imageAtomicAdd(voxelsLight, dst + ivec3(0, 0, voxelgiResolution.x), uint(light.g * 255)); + imageAtomicAdd(voxelsLight, dst + ivec3(0, 0, voxelgiResolution.x * 2), uint(light.b * 255)); } diff --git a/leenkx/Shaders/voxel_temporal/voxel_temporal.comp.glsl b/leenkx/Shaders/voxel_temporal/voxel_temporal.comp.glsl index 919e01a..75f35c5 100644 --- a/leenkx/Shaders/voxel_temporal/voxel_temporal.comp.glsl +++ b/leenkx/Shaders/voxel_temporal/voxel_temporal.comp.glsl @@ -74,9 +74,13 @@ void main() { #endif #endif - int nor_count = 0; - vec3 avgNormal = vec3(0.0); - mat3 TBN = mat3(0.0); + #ifdef _VoxelGI + vec3 light = vec3(0.0); + light.r = float(imageLoad(voxelsLight, ivec3(gl_GlobalInvocationID.xyz)).r) / 255; + light.g = float(imageLoad(voxelsLight, ivec3(gl_GlobalInvocationID.xyz) + ivec3(0, 0, voxelgiResolution.x)).r) / 255; + light.b = float(imageLoad(voxelsLight, ivec3(gl_GlobalInvocationID.xyz) + ivec3(0, 0, voxelgiResolution.x * 2)).r) / 255; + light /= 3; + #endif for (int i = 0; i < 6 + DIFFUSE_CONE_COUNT; i++) { @@ -99,67 +103,46 @@ void main() { if (i < 6) { #ifdef _VoxelGI - int count = int(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 15))); - if (count > 0) { - vec4 basecol = vec4(0.0); - basecol.r = float(imageLoad(voxels, src)) / 255; - basecol.g = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x))) / 255; - basecol.b = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 2))) / 255; - basecol.a = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 3))) / 255; - basecol /= count; - vec3 emission = vec3(0.0); - emission.r = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 4))) / 255; - emission.g = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 5))) / 255; - emission.b = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 6))) / 255; - emission /= count; - vec3 N = vec3(0.0); - N.r = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 7))) / 255; - N.g = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 8))) / 255; - N /= count; - N = decode_oct(N.rg * 2.0 - 1.0); + vec4 basecol = vec4(0.0); + basecol.r = float(imageLoad(voxels, src)) / 255; + basecol.g = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x))) / 255; + basecol.b = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 2))) / 255; + basecol.a = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 3))) / 255; + basecol /= 4; + vec3 emission = vec3(0.0); + emission.r = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 4))) / 255; + emission.g = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 5))) / 255; + emission.b = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 6))) / 255; + emission /= 3; + vec3 N = vec3(0.0); + N.r = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 7))) / 255; + N.g = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 8))) / 255; + N /= 2; + vec3 wnormal = decode_oct(N.rg * 2 - 1); + vec3 envl = vec3(0.0); + envl.r = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 9))) / 255; + envl.g = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 10))) / 255; + envl.b = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 11))) / 255; + envl /= 3; + #ifdef _HOSEK + envl *= 100; + #endif - if (abs(N.x) > 0) - avgNormal.x += N.x; - if (abs(N.y) > 0) - avgNormal.y += N.y; - if (abs(N.z) > 0) - avgNormal.z += N.z; - if (i == 5) - { - avgNormal = normalize(avgNormal); - TBN = makeTangentBasis(avgNormal); - } + //clipmap to world + vec3 wposition = (gl_GlobalInvocationID.xyz + 0.5) / voxelgiResolution.x; + wposition = wposition * 2.0 - 1.0; + wposition *= float(clipmaps[int(clipmapLevel * 10)]); + wposition *= voxelgiResolution.x; + wposition += vec3(clipmaps[clipmapLevel * 10 + 4], clipmaps[clipmapLevel * 10 + 5], clipmaps[clipmapLevel * 10 + 6]); - vec3 envl = vec3(0.0); - envl.r = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 9))) / 255; - envl.g = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 10))) / 255; - envl.b = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 11))) / 255; - envl /= count; - vec3 light = vec3(0.0); - light.r = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 12))) / 255; - light.g = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 13))) / 255; - light.b = float(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x * 14))) / 255; - light /= count; + radiance = basecol; + vec4 trace = traceDiffuse(wposition, wnormal, voxelsSampler, clipmaps); + vec3 indirect = trace.rgb + envl.rgb * (1.0 - trace.a); + radiance.rgb *= light.rgb + indirect.rgb; + radiance.rgb += emission.rgb; - //clipmap to world - vec3 wposition = (gl_GlobalInvocationID.xyz + 0.5) / voxelgiResolution.x; - wposition = wposition * 2.0 - 1.0; - wposition *= float(clipmaps[int(clipmapLevel * 10)]); - wposition *= voxelgiResolution.x; - wposition += vec3(clipmaps[clipmapLevel * 10 + 4], clipmaps[clipmapLevel * 10 + 5], clipmaps[clipmapLevel * 10 + 6]); - - radiance = basecol; - vec4 trace = traceDiffuse(wposition, N, voxelsSampler, clipmaps); - vec3 indirect = trace.rgb + envl.rgb * (1.0 - trace.a); - radiance.rgb *= light + indirect; - radiance.rgb += emission.rgb; - } #else - int count = int(imageLoad(voxels, src + ivec3(0, 0, voxelgiResolution.x))); - if (count > 0) { - opac = float(imageLoad(voxels, src)) / 255; - opac /= count; - } + opac = float(imageLoad(voxels, src)) / 255; #endif #ifdef _VoxelGI @@ -213,7 +196,7 @@ void main() { } else { // precompute cone sampling: - vec3 coneDirection = TBN * DIFFUSE_CONE_DIRECTIONS[i - 6]; + vec3 coneDirection = DIFFUSE_CONE_DIRECTIONS[i - 6]; vec3 aniso_direction = -coneDirection; uvec3 face_offsets = uvec3( aniso_direction.x > 0 ? 0 : 1, diff --git a/leenkx/Sources/leenkx/renderpath/Inc.hx b/leenkx/Sources/leenkx/renderpath/Inc.hx index 7198b98..5e90488 100644 --- a/leenkx/Sources/leenkx/renderpath/Inc.hx +++ b/leenkx/Sources/leenkx/renderpath/Inc.hx @@ -19,10 +19,6 @@ class Inc { #end #end - #if ((rp_voxels != 'Off') && lnx_config) - static var voxelsCreated = false; - #end - #if (rp_voxels != "Off") static var voxel_sh0:kha.compute.Shader = null; static var voxel_sh1:kha.compute.Shader = null; @@ -636,7 +632,7 @@ class Inc { } // Init voxels #if (rp_voxels != 'Off') - if (!voxelsCreated) initGI(); + initGI(); #if (rp_voxels == "Voxel GI") initGI("voxelsLight"); #end @@ -744,12 +740,6 @@ class Inc { var t = new RenderTargetRaw(); t.name = tname; - #if lnx_config - var config = leenkx.data.Config.raw; - if (config.rp_voxels != true || voxelsCreated) return; - voxelsCreated = true; - #end - var res = iron.RenderPath.getVoxelRes(); var resZ = iron.RenderPath.getVoxelResZ(); @@ -761,48 +751,38 @@ class Inc { } else { if (t.name == "voxelsSDF" || t.name == "voxelsSDFtmp") { - t.format = "R8"; + t.format = "R16"; t.width = res; t.height = res * Main.voxelgiClipmapCount; t.depth = res; } else if (t.name == "voxelsLight") { - t.format = "RGBA32"; + t.format = "R32UI"; t.width = res; t.height = res * Main.voxelgiClipmapCount; + t.depth = res * 3; // Store R, G, B in separate z-slices + } + else if (t.name == "voxelsOut" || t.name == "voxelsOutB") { + #if (rp_voxels == "Voxel AO") + t.format = "R8"; + #else + t.format = "RGBA32"; + #end + t.width = res * (6 + 16); + t.height = res * Main.voxelgiClipmapCount; t.depth = res; } else { #if (rp_voxels == "Voxel AO") - { - if (t.name == "voxelsOut" || t.name == "voxelsOutB") { - t.format = "R8"; - t.width = res * (6 + 16); - t.height = res * Main.voxelgiClipmapCount; - t.depth = res; - } - else { - t.format = "R32UI"; - t.width = res * 6; - t.height = res; - t.depth = res * 2; - } - } + t.format = "R32UI"; + t.width = res * 6; + t.height = res; + t.depth = res * 2; #else - { - if (t.name == "voxelsOut" || t.name == "voxelsOutB") { - t.format = "RGBA32"; - t.width = res * (6 + 16); - t.height = res * Main.voxelgiClipmapCount; - t.depth = res; - } - else { - t.format = "R32UI"; - t.width = res * 6; - t.height = res; - t.depth = res * 16; - } - } + t.format = "R32UI"; + t.width = res * 6; + t.height = res; + t.depth = res * 16; #end } } @@ -1063,6 +1043,20 @@ class Inc { var clipmaps = iron.RenderPath.clipmaps; var clipmap = clipmaps[iron.RenderPath.clipmapLevel]; + // Ensure all required render targets exist + if (rts.get("voxels") == null) initGI("voxels"); + if (rts.get("voxelsOut") == null) initGI("voxelsOut"); + if (rts.get("voxelsOutB") == null) initGI("voxelsOutB"); + #if (rp_voxels == "Voxel GI") + if (rts.get("voxelsLight") == null) initGI("voxelsLight"); + if (rts.get("voxelsSDF") == null) initGI("voxelsSDF"); + #elseif lnx_voxelgi_shadows + if (rts.get("voxelsSDF") == null) initGI("voxelsSDF"); + #end + + // Check again after init + if (rts.get("voxels") == null || rts.get("voxelsOutB") == null || rts.get("voxelsOut") == null) return; + kha.compute.Compute.setShader(voxel_sh1); kha.compute.Compute.setTexture(voxel_ta1, rts.get("voxels").image, kha.compute.Access.Read); diff --git a/leenkx/blender/lnx/material/make_voxel.py b/leenkx/blender/lnx/material/make_voxel.py index 7851b95..dd38f1a 100644 --- a/leenkx/blender/lnx/material/make_voxel.py +++ b/leenkx/blender/lnx/material/make_voxel.py @@ -369,7 +369,7 @@ def make_gi(context_id): frag.add_uniform('samplerCubeShadow shadowMapPoint[1]', included=True) if is_transparent_shadows: frag.add_uniform('samplerCube shadowMapPointTransparent[1]', included=True) - frag.write('direct += sampleLight(') + frag.write('direct += sampleLightVoxels(') frag.write(' P, N, vVec, dotNV, pointPos, pointCol, albedo, roughness, specular, f0') if is_shadows: frag.write(', 0, pointBias, receiveShadow')