diff options
| author | ladevieq <qladevie@wanadev.fr> | 2021-02-10 14:00:37 +0100 |
|---|---|---|
| committer | ladevieq <qladevie@wanadev.fr> | 2021-02-10 14:00:37 +0100 |
| commit | 5e39b7485d08345a4eb3686b344840791888d1f9 (patch) | |
| tree | 0d2a51845709a5ecd25fecedd60cc65b2999c61e /shaders/compute.comp | |
| parent | 3a43bab624f271588401daca46c512a1f85593f6 (diff) | |
Accumulation working
Diffstat (limited to 'shaders/compute.comp')
| -rw-r--r-- | shaders/compute.comp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/shaders/compute.comp b/shaders/compute.comp index 1e903b0..01a0f71 100644 --- a/shaders/compute.comp +++ b/shaders/compute.comp @@ -62,9 +62,12 @@ layout(set = 0, binding = 0) buffer Inputs { uint samples_per_pixel; uint width; uint height; + + uint sample_index; + uint[3] padding; }; -layout(set = 0, binding = 1, rgba8) uniform writeonly image2D output_image; +layout(set = 0, binding = 1, rgba8) uniform image2D output_image; vec3 at(ray r, float t) { return r.origin + r.direction * t; @@ -214,16 +217,15 @@ void main() { vec4 out_color = vec4(0.0); - for (uint sample_index = 0; sample_index < samples_per_pixel; sample_index++) { - vec2 jittered_uvs = uv + vec2(random_disk[sample_index].x / (width - 1), random_disk[sample_index].y / (height - 1)); - vec2 lens_disk = random_disk[sample_index] * cam.lens_radius; - vec3 offset = lens_disk.x * cam.right.xyz + lens_disk.y * cam.up.xyz; - vec4 proj_plane_pos = cam.first_pixel + jittered_uvs.x * cam.horizontal + jittered_uvs.y * cam.vertical; - ray r = ray(cam.position.xyz + offset, proj_plane_pos.xyz - cam.position.xyz - offset); + vec2 jittered_uvs = uv + vec2(random_disk[sample_index].x / (width - 1), random_disk[sample_index].y / (height - 1)); + vec2 lens_disk = random_disk[sample_index] * cam.lens_radius; + vec3 offset = lens_disk.x * cam.right.xyz + lens_disk.y * cam.up.xyz; + vec4 proj_plane_pos = cam.first_pixel + jittered_uvs.x * cam.horizontal + jittered_uvs.y * cam.vertical; + ray r = ray(cam.position.xyz + offset, proj_plane_pos.xyz - cam.position.xyz - offset); - out_color += ray_color(r, sample_index); - } + out_color += ray_color(r, sample_index); float spp_scale = (1.0 / samples_per_pixel); - imageStore(output_image, ivec2(x, y), sqrt(out_color * spp_scale)); + vec4 acc_color = imageLoad(output_image, ivec2(x, y)); + imageStore(output_image, ivec2(x, y), acc_color + (out_color * spp_scale)); } |
