diff --git a/Shaders/voxel_offsetprev/voxel_offsetprev.comp.glsl b/Shaders/voxel_offsetprev/voxel_offsetprev.comp.glsl index 2983f5cc9..b93e46fda 100644 --- a/Shaders/voxel_offsetprev/voxel_offsetprev.comp.glsl +++ b/Shaders/voxel_offsetprev/voxel_offsetprev.comp.glsl @@ -30,11 +30,11 @@ layout (local_size_x = 8, local_size_y = 8, local_size_z = 8) in; #include "std/voxels_constants.glsl" #ifdef _VoxelGI -uniform layout(rgba16) image3D voxelsB; -uniform layout(rgba16) image3D voxelsOut; +uniform layout(rgba8) image3D voxelsB; +uniform layout(rgba8) image3D voxelsOut; #else -uniform layout(r16) image3D voxelsB; -uniform layout(r16) image3D voxelsOut; +uniform layout(r8) image3D voxelsB; +uniform layout(r8) image3D voxelsOut; #endif uniform int clipmapLevel; diff --git a/Shaders/voxel_resolve_ao/voxel_resolve_ao.comp.glsl b/Shaders/voxel_resolve_ao/voxel_resolve_ao.comp.glsl index 030e7201d..6abf9d127 100644 --- a/Shaders/voxel_resolve_ao/voxel_resolve_ao.comp.glsl +++ b/Shaders/voxel_resolve_ao/voxel_resolve_ao.comp.glsl @@ -67,7 +67,7 @@ void main() { n.xy = n.z >= 0.0 ? g0.xy : octahedronWrap(g0.xy); n = normalize(n); - float occ = traceAO(P, n, voxels, clipmaps); + float occ = 1.0 - traceAO(P, n, voxels, clipmaps); imageStore(voxels_ao, ivec2(pixel), vec4(occ)); } diff --git a/Shaders/voxel_sdf_jumpflood/voxel_sdf_jumpflood.comp.glsl b/Shaders/voxel_sdf_jumpflood/voxel_sdf_jumpflood.comp.glsl index d224df667..5e6a0ea72 100644 --- a/Shaders/voxel_sdf_jumpflood/voxel_sdf_jumpflood.comp.glsl +++ b/Shaders/voxel_sdf_jumpflood/voxel_sdf_jumpflood.comp.glsl @@ -23,8 +23,8 @@ THE SOFTWARE. #include "compiled.inc" -uniform layout(r16) image3D input_sdf; -uniform layout(r16) image3D output_sdf; +uniform layout(r8) image3D input_sdf; +uniform layout(r8) image3D output_sdf; uniform float jump_size; uniform int clipmapLevel; diff --git a/Shaders/voxel_temporal/voxel_temporal.comp.glsl b/Shaders/voxel_temporal/voxel_temporal.comp.glsl index eb930f991..5ede10d9a 100644 --- a/Shaders/voxel_temporal/voxel_temporal.comp.glsl +++ b/Shaders/voxel_temporal/voxel_temporal.comp.glsl @@ -45,9 +45,8 @@ uniform sampler3D voxelsSampler; uniform sampler3D voxelsSDFSampler; uniform layout(r32ui) uimage3D voxels; uniform layout(r32ui) uimage3D voxelsLight; -uniform layout(rgba16) image3D voxelsB; -uniform layout(rgba16) image3D voxelsOut; -uniform layout(rgba16) image3D voxelsBounce; +uniform layout(rgba8) image3D voxelsB; +uniform layout(rgba8) image3D voxelsOut; #ifdef _ShadowMap uniform sampler2DShadow shadowMap; uniform sampler2DShadow shadowMapSpot; @@ -77,15 +76,15 @@ uniform vec3 eye; uniform vec3 eyeLook; uniform vec3 viewRay; uniform vec2 cameraProj; -uniform layout(r16) image3D SDF; +uniform layout(r8) image3D SDF; #else #ifdef _VoxelAOvar #ifdef _VoxelShadow -uniform layout(r16) image3D SDF; +uniform layout(r8) image3D SDF; #endif uniform layout(r32ui) uimage3D voxels; -uniform layout(r16) image3D voxelsB; -uniform layout(r16) image3D voxelsOut; +uniform layout(r8) image3D voxelsB; +uniform layout(r8) image3D voxelsOut; #endif #endif @@ -208,7 +207,7 @@ void main() { envl.rgb *= backgroundCol * (f0 * envBRDF.x + envBRDF.y); #endif #endif - envl *= envmapStrength; + envl *= envmapStrength * 100; #else vec3 envl = vec3(0.0); #endif @@ -216,7 +215,7 @@ void main() { radiance = basecol; vec4 trace = traceDiffuse(wposition, wnormal, voxelsSampler, clipmaps); vec3 diffuse_indirect = trace.rgb + envl * (1.0 - trace.a); - radiance.rgb *= max(light, envmapStrength * trace.a) / PI * diffuse_indirect; + radiance.rgb *= light / PI + diffuse_indirect; radiance.rgb += emission.rgb; #else opac = float(imageLoad(voxels, src)) / 255; diff --git a/Sources/armory/renderpath/Inc.hx b/Sources/armory/renderpath/Inc.hx index 11d103928..c620ee48a 100644 --- a/Sources/armory/renderpath/Inc.hx +++ b/Sources/armory/renderpath/Inc.hx @@ -575,7 +575,7 @@ class Inc { } else { if (t.name == "voxelsSDF" || t.name == "voxelsSDFtmp") { - t.format = "R16"; + t.format = "R8"; t.width = res; t.height = res * Main.voxelgiClipmapCount; t.depth = res; @@ -584,7 +584,7 @@ class Inc { #if (rp_voxels == "Voxel AO") { if (t.name == "voxelsOut" || t.name == "voxelsOutB") { - t.format = "R16"; + t.format = "R8"; t.width = res * (6 + 16); t.height = res * Main.voxelgiClipmapCount; t.depth = res; @@ -599,7 +599,7 @@ class Inc { #else { if (t.name == "voxelsOut" || t.name == "voxelsOutB") { - t.format = "RGBA64"; + t.format = "RGBA32"; t.width = res * (6 + 16); t.height = res * Main.voxelgiClipmapCount; t.depth = res; diff --git a/Sources/armory/renderpath/RenderPathDeferred.hx b/Sources/armory/renderpath/RenderPathDeferred.hx index 5a3770208..ee5fbdba1 100644 --- a/Sources/armory/renderpath/RenderPathDeferred.hx +++ b/Sources/armory/renderpath/RenderPathDeferred.hx @@ -569,8 +569,7 @@ class RenderPathDeferred { Inc.computeVoxelsBegin(); - if (iron.RenderPath.pre_clear == true) - { + if (iron.RenderPath.pre_clear == true) { #if (rp_voxels == "Voxel GI") path.clearImage("voxelsLight", 0x00000000); #end @@ -583,17 +582,11 @@ class RenderPathDeferred { #end iron.RenderPath.pre_clear = false; } - else - { + else { #if (rp_voxels == "Voxel GI") path.clearImage("voxelsLight", 0x00000000); #end path.clearImage("voxels", 0x00000000); - path.clearImage("voxelsOutB", 0x00000000); - #if (arm_voxelgi_shadows || rp_voxels == "Voxel GI") - path.clearImage("voxelsSDF", 0x00000000); - path.clearImage("voxelsSDFtmp", 0x00000000); - #end Inc.computeVoxelsOffsetPrev(); } @@ -606,6 +599,7 @@ class RenderPathDeferred { #if (rp_voxels == "Voxel GI") Inc.computeVoxelsLight(); #end + Inc.computeVoxelsTemporal(); #if (arm_voxelgi_shadows || rp_voxels == "Voxel GI") diff --git a/Sources/armory/renderpath/RenderPathForward.hx b/Sources/armory/renderpath/RenderPathForward.hx index 58ad4fb00..c299a51d9 100644 --- a/Sources/armory/renderpath/RenderPathForward.hx +++ b/Sources/armory/renderpath/RenderPathForward.hx @@ -391,11 +391,6 @@ class RenderPathForward { path.clearImage("voxelsLight", 0x00000000); #end path.clearImage("voxels", 0x00000000); - path.clearImage("voxelsOutB", 0x00000000); - #if (arm_voxelgi_shadows || rp_voxels == "Voxel GI") - path.clearImage("voxelsSDF", 0x00000000); - path.clearImage("voxelsSDFtmp", 0x00000000); - #end Inc.computeVoxelsOffsetPrev(); }