From 4c4b8288d5f64fb939532b3c0b1c1a52bffec7d7 Mon Sep 17 00:00:00 2001 From: zomseffen <steffen@tom.bi> Date: Tue, 14 Jan 2025 16:01:18 +0100 Subject: [PATCH] void tracing for spot lights --- shaders/compiled/frag_rt_quad.spv | Bin 23196 -> 22728 bytes shaders/rt_quad.frag | 65 +++++++++-------------------- src/main.rs | 2 +- src/scene/empty_volume.rs | 67 +++++++++++++++--------------- src/scene/mod.rs | 2 +- 5 files changed, 55 insertions(+), 81 deletions(-) diff --git a/shaders/compiled/frag_rt_quad.spv b/shaders/compiled/frag_rt_quad.spv index 16608e1a0c74a7c99e5cd0ccce2329ec41aaa49d..eafd9b98c8190e4dd8473bd0b06d3c639a892a0b 100644 GIT binary patch literal 22728 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 literal 23196 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 diff --git a/shaders/rt_quad.frag b/shaders/rt_quad.frag index 307b9aa..f47bd82 100644 --- a/shaders/rt_quad.frag +++ b/shaders/rt_quad.frag @@ -109,9 +109,6 @@ uvec4 sample_color_from_scene_info(uint volume_start, uvec2 raster_pos, uint f) uint back_color_size_u = scene_info.infos[array_descr_start + 10]; uint back_color_size_v = scene_info.infos[array_descr_start + 11]; - uint top_neighbor_size_u = scene_info.infos[array_descr_start + 12]; - uint top_neighbor_size_v = scene_info.infos[array_descr_start + 13]; - uint top_size = top_color_size_u * top_color_size_v; uint bottom_size = bottom_color_size_u * bottom_color_size_v; uint left_size = left_color_size_u * left_color_size_v; @@ -142,28 +139,32 @@ void main() { uint last = scene_info.infos[max_length]; uvec4 color_roughness = sample_color_from_scene_info(fragVolumeStart, fragRasterPos, facing); - vec4 color_sample = vec4(float(color_roughness.x) / 255.0, float(color_roughness.y) / 255.0, float(color_roughness.z) / 255.0, 1); + vec4 orig_color_sample = vec4(float(color_roughness.x) / 255.0, float(color_roughness.y) / 255.0, float(color_roughness.z) / 255.0, 1); uint max_light_num = scene_info.infos[0]; uint light_num = 0; uint volume_index = fragVolumeStart; + uint volume_pos_x = scene_info.infos[volume_index + 0]; uint volume_pos_y = scene_info.infos[volume_index + 1]; uint volume_pos_z = scene_info.infos[volume_index + 2]; + uint light_index = scene_info.infos[volume_index + 6]; vec3 light_direction = get_light_position(light_index) - origPosition; vec3 light_color = get_light_color(light_index); bool x_pos = light_direction.x > 0.0; bool x_null = (light_direction.x == 0.0); + bool y_pos = light_direction.y > 0.0; bool y_null = (light_direction.y == 0.0); + bool z_pos = light_direction.z > 0.0; bool z_null = (light_direction.z == 0.0); - vec3 color_sum = vec3(0.0, 0.0, 0.0) + (color_sample.xyz * 0.01); + vec3 color_sum = vec3(0.0, 0.0, 0.0) + (orig_color_sample.xyz * 0.01); - uint max_iterations = 2; //max_light_num * 20; + uint max_iterations = max_light_num * 20; for (int i = 0; i < max_iterations; i++) { float x_border = float(volume_pos_x + (scene_info.infos[volume_index + 3]) * uint(x_pos)) - 0.5; float y_border = float(volume_pos_y + (scene_info.infos[volume_index + 4]) * uint(y_pos)) - 0.5; @@ -185,9 +186,9 @@ void main() { z_factor = (z_border - origPosition.z) / light_direction.z; } - if ((x_factor >= 0.999 && y_factor >= 0.999 && z_factor >= 0.999)) { + if ((x_factor >= 1.0) && (y_factor >= 1.0) && (z_factor >= 1.0)) { // no hit, add light color result - color_sum += (color_sample.xyz * light_color) / (0.01 * light_direction.length() * light_direction.length() + 1.0); + color_sum += (orig_color_sample.xyz * light_color) / ((0.01 * light_direction.length() * light_direction.length()) + 1.0); needs_next_light = true; } else { // if there is a border hit before reaching the light @@ -203,8 +204,8 @@ void main() { hit_facing = 2; } vec3 intersection_pos = origPosition + x_factor * light_direction; - u = uint(ceil(intersection_pos.y)) - volume_pos_y; - v = uint(ceil(intersection_pos.z)) - volume_pos_z; + u = uint(round(intersection_pos.y)) - volume_pos_y; + v = uint(round(intersection_pos.z)) - volume_pos_z; } if (y_factor <= x_factor && y_factor <= z_factor) { @@ -214,19 +215,19 @@ void main() { hit_facing = 4; } vec3 intersection_pos = origPosition + y_factor * light_direction; - u = uint(ceil(intersection_pos.x)) - volume_pos_x; - v = uint(ceil(intersection_pos.z)) - volume_pos_z; + u = uint(round(intersection_pos.x)) - volume_pos_x; + v = uint(round(intersection_pos.z)) - volume_pos_z; } if (z_factor <= x_factor && z_factor <= y_factor) { - if (y_pos) { + if (z_pos) { hit_facing = 0; } else { hit_facing = 1; } vec3 intersection_pos = origPosition + z_factor * light_direction; - u = uint(ceil(intersection_pos.x)) - volume_pos_x; - v = uint(ceil(intersection_pos.y)) - volume_pos_y; + u = uint(round(intersection_pos.x)) - volume_pos_x; + v = uint(round(intersection_pos.y)) - volume_pos_y; } uint next_neighbor = sample_neighbor_from_scene_info(volume_index, uvec2(u, v), hit_facing); uvec4 color_sample = sample_color_from_scene_info(volume_index, uvec2(u, v), hit_facing); @@ -234,18 +235,15 @@ void main() { if (color_sample == uvec4(0, 0, 0, 0)) { // not a color hit, so check neighbor if (next_neighbor != 0) { - color_sum = vec3(1.0, 0.0, 0.0); volume_index = next_neighbor; - uint volume_pos_x = scene_info.infos[volume_index + 0]; - uint volume_pos_y = scene_info.infos[volume_index + 1]; - uint volume_pos_z = scene_info.infos[volume_index + 2]; + volume_pos_x = scene_info.infos[volume_index + 0]; + volume_pos_y = scene_info.infos[volume_index + 1]; + volume_pos_z = scene_info.infos[volume_index + 2]; } else { - color_sum = vec3(0.0, 0.0, 1.0); // neightbor miss, shouldn't happen with a light inside of a volume. Might happen with ambient light. For now move on to next light. needs_next_light = true; } } else { - color_sum = vec3(1.0, 0.0, 1.0); // color hit, move on to next light (may change once transparents are implemnted) needs_next_light = true; } @@ -254,30 +252,5 @@ void main() { break; } } - - // todo light color memory index does not contain the expected values -> check outColor = vec4(color_sum, 1.0); - - /*if (scene_info.infos[1] == 16) { - outColor = vec4(0, 1, 0, 1); - }*/ - - /*if (fragVolumeStart == 1 && scene_info.infos[fragVolumeStart] == 16) { - outColor = vec4(0, 1, 0, 1); - }*/ - - /*if (facing == 0) { - outColor = vec4(1, 0, 0, 1); - } else if (facing == 1) { - outColor = vec4(0, 1, 1, 1); - } else if (facing == 2) { - outColor = vec4(0, 1, 0, 1); - } else if (facing == 3) { - outColor = vec4(1, 0, 1, 1); - } else if (facing == 4) { - outColor = vec4(0, 0, 1, 1); - } else if (facing == 5) { - outColor = vec4(1, 1, 0, 1); - }*/ - } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index b10bddb..9674aea 100644 --- a/src/main.rs +++ b/src/main.rs @@ -457,7 +457,7 @@ impl App { vk::MemoryMapFlags::empty(), )?; - memcpy(self.scene_handler.rt_memory.as_ptr(), memory.cast(), 2103); + memcpy(self.scene_handler.rt_memory.as_ptr(), memory.cast(), self.scene_handler.rt_memory.len()); self.device.unmap_memory(self.data.storage_buffers_memory[image_index]); diff --git a/src/scene/empty_volume.rs b/src/scene/empty_volume.rs index d6407f6..6176f33 100644 --- a/src/scene/empty_volume.rs +++ b/src/scene/empty_volume.rs @@ -168,10 +168,11 @@ impl EmptyVolume { for x in 0..x_size+1 { for y in 0..y_size+1 { for z in 0..z_size+1 { + neighbors.set_element(reference.clone(), reference.borrow().position.x + x, reference.borrow().position.y + y, reference.borrow().position.z + z); // fill only the edges - if x == 0 || x == x_size || y == 0 || y == y_size || z==0 || z == z_size { + /*if x == 0 || x == x_size || y == 0 || y == y_size || z==0 || z == z_size { neighbors.set_element(reference.clone(), reference.borrow().position.x + x, reference.borrow().position.y + y, reference.borrow().position.z + z) - } + }*/ } } } @@ -724,7 +725,7 @@ impl EmptyVolume { mem_index += 1; v[mem_index] = self.position.y as u32; mem_index += 1; - v[mem_index] = self.position.y as u32; + v[mem_index] = self.position.z as u32; mem_index += 1; //max sizes v[mem_index] = self.size_x as u32; @@ -740,7 +741,7 @@ impl EmptyVolume { mem_index += 1; } //color/roughness buffer sizes, 2 values each - if self.color_top.len() > 0 { + if self.color_top.len() > 1 { v[mem_index] = self.size_x as u32; v[mem_index + 1] = self.size_y as u32; } else { @@ -749,7 +750,7 @@ impl EmptyVolume { } mem_index += 2; - if self.color_bottom.len() > 0 { + if self.color_bottom.len() > 1 { v[mem_index] = self.size_x as u32; v[mem_index + 1] = self.size_y as u32; } else { @@ -758,7 +759,7 @@ impl EmptyVolume { } mem_index += 2; - if self.color_left.len() > 0 { + if self.color_left.len() > 1 { v[mem_index] = self.size_y as u32; v[mem_index + 1] = self.size_z as u32; } else { @@ -767,7 +768,7 @@ impl EmptyVolume { } mem_index += 2; - if self.color_right.len() > 0 { + if self.color_right.len() > 1 { v[mem_index] = self.size_y as u32; v[mem_index + 1] = self.size_z as u32; } else { @@ -776,7 +777,7 @@ impl EmptyVolume { } mem_index += 2; - if self.color_front.len() > 0 { + if self.color_front.len() > 1 { v[mem_index] = self.size_x as u32; v[mem_index + 1] = self.size_z as u32; } else { @@ -785,7 +786,7 @@ impl EmptyVolume { } mem_index += 2; - if self.color_back.len() > 0 { + if self.color_back.len() > 1 { v[mem_index] = self.size_x as u32; v[mem_index + 1] = self.size_z as u32; } else { @@ -794,7 +795,7 @@ impl EmptyVolume { } mem_index += 2; //neighbor buffer sizes, 2 values each - if self.neighbor_top.len() > 0 { + if self.neighbor_top.len() > 1 { v[mem_index] = self.size_x as u32; v[mem_index + 1] = self.size_y as u32; } else { @@ -803,7 +804,7 @@ impl EmptyVolume { } mem_index += 2; - if self.neighbor_bottom.len() > 0 { + if self.neighbor_bottom.len() > 1 { v[mem_index] = self.size_x as u32; v[mem_index + 1] = self.size_y as u32; } else { @@ -812,7 +813,7 @@ impl EmptyVolume { } mem_index += 2; - if self.neighbor_left.len() > 0 { + if self.neighbor_left.len() > 1 { v[mem_index] = self.size_y as u32; v[mem_index + 1] = self.size_z as u32; } else { @@ -821,7 +822,7 @@ impl EmptyVolume { } mem_index += 2; - if self.neighbor_right.len() > 0 { + if self.neighbor_right.len() > 1 { v[mem_index] = self.size_y as u32; v[mem_index + 1] = self.size_z as u32; } else { @@ -830,7 +831,7 @@ impl EmptyVolume { } mem_index += 2; - if self.neighbor_front.len() > 0 { + if self.neighbor_front.len() > 1 { v[mem_index] = self.size_x as u32; v[mem_index + 1] = self.size_z as u32; } else { @@ -839,7 +840,7 @@ impl EmptyVolume { } mem_index += 2; - if self.neighbor_back.len() > 0 { + if self.neighbor_back.len() > 1 { v[mem_index] = self.size_x as u32; v[mem_index + 1] = self.size_z as u32; } else { @@ -860,7 +861,7 @@ impl EmptyVolume { } } else { - v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]); + v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]); mem_index += 1; } @@ -874,7 +875,7 @@ impl EmptyVolume { } } else { - v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]); + v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]); mem_index += 1; } @@ -888,7 +889,7 @@ impl EmptyVolume { } } else { - v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]); + v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]); mem_index += 1; } @@ -902,7 +903,7 @@ impl EmptyVolume { } } else { - v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]); + v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]); mem_index += 1; } @@ -916,7 +917,7 @@ impl EmptyVolume { } } else { - v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]); + v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]); mem_index += 1; } @@ -930,14 +931,14 @@ impl EmptyVolume { } } else { - v[mem_index] = u32::from_ne_bytes([255, 255, 255, 255]); + v[mem_index] = u32::from_ne_bytes([0, 0, 0, 0]); mem_index += 1; } // neighbors if self.neighbor_top.len() > 0 { - for value in &self.neighbor_top { - if let Some(reference) = value { + for nvalue in &self.neighbor_top { + if let Some(reference) = nvalue { v[mem_index] = reference.borrow().memory_start as u32; } else { @@ -952,8 +953,8 @@ impl EmptyVolume { } if self.neighbor_bottom.len() > 0 { - for value in &self.neighbor_bottom { - if let Some(reference) = value { + for nvalue in &self.neighbor_bottom { + if let Some(reference) = nvalue { v[mem_index] = reference.borrow().memory_start as u32; } else { @@ -968,8 +969,8 @@ impl EmptyVolume { } if self.neighbor_left.len() > 0 { - for value in &self.neighbor_left { - if let Some(reference) = value { + for nvalue in &self.neighbor_left { + if let Some(reference) = nvalue { v[mem_index] = reference.borrow().memory_start as u32; } else { @@ -984,8 +985,8 @@ impl EmptyVolume { } if self.neighbor_right.len() > 0 { - for value in &self.neighbor_right { - if let Some(reference) = value { + for nvalue in &self.neighbor_right { + if let Some(reference) = nvalue { v[mem_index] = reference.borrow().memory_start as u32; } else { @@ -1000,8 +1001,8 @@ impl EmptyVolume { } if self.neighbor_front.len() > 0 { - for value in &self.neighbor_front { - if let Some(reference) = value { + for nvalue in &self.neighbor_front { + if let Some(reference) = nvalue { v[mem_index] = reference.borrow().memory_start as u32; } else { @@ -1016,8 +1017,8 @@ impl EmptyVolume { } if self.neighbor_back.len() > 0 { - for value in &self.neighbor_back { - if let Some(reference) = value { + for nvalue in &self.neighbor_back { + if let Some(reference) = nvalue { v[mem_index] = reference.borrow().memory_start as u32; } else { diff --git a/src/scene/mod.rs b/src/scene/mod.rs index e241b51..61609bd 100644 --- a/src/scene/mod.rs +++ b/src/scene/mod.rs @@ -82,7 +82,7 @@ impl Scene { let shade = (rng.gen_range(0..25) as f32) / 100.0; let cube = Cube { pos: vec3(10.0, 10.0, 10.0), - color: vec3(shade, 1.0, shade), + color: vec3(1.0, 1.0, 0.0), tex_coord: vec2(0.0, 0.0) };