From 729fcb8559b094b6a9459e646edc792fb58400da Mon Sep 17 00:00:00 2001
From: zomseffen <steffen@tom.bi>
Date: Wed, 15 Jan 2025 13:09:54 +0100
Subject: [PATCH] adds multilight handling

---
 shaders/compiled/frag_rt_quad.spv | Bin 22728 -> 24048 bytes
 shaders/rt_quad.frag              |  33 +++++++++++++++++++++++++++---
 src/main.rs                       |   2 +-
 src/scene/mod.rs                  |  14 +++++++++++--
 4 files changed, 43 insertions(+), 6 deletions(-)

diff --git a/shaders/compiled/frag_rt_quad.spv b/shaders/compiled/frag_rt_quad.spv
index eafd9b98c8190e4dd8473bd0b06d3c639a892a0b..32ca9f02830832efa29626333a924d7786d65827 100644
GIT binary patch
literal 24048
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
Bkw^dl

delta 7111
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

diff --git a/shaders/rt_quad.frag b/shaders/rt_quad.frag
index f47bd82..b6ce9aa 100644
--- a/shaders/rt_quad.frag
+++ b/shaders/rt_quad.frag
@@ -149,7 +149,8 @@ void main() {
     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];
+    // setup light info
+    uint light_index = scene_info.infos[fragVolumeStart + 6 + light_num];
     vec3 light_direction = get_light_position(light_index) - origPosition;
     vec3 light_color = get_light_color(light_index);
     
@@ -162,6 +163,7 @@ void main() {
     bool z_pos = light_direction.z > 0.0;
     bool z_null = (light_direction.z == 0.0);
 
+    // initialize color
     vec3 color_sum = vec3(0.0, 0.0, 0.0) + (orig_color_sample.xyz * 0.01);
 
     uint max_iterations = max_light_num * 20;
@@ -188,7 +190,7 @@ void main() {
 
         if ((x_factor >= 1.0) && (y_factor >= 1.0) && (z_factor >= 1.0)) {
             // no hit, add light color result
-            color_sum += (orig_color_sample.xyz * light_color) / ((0.01 * light_direction.length() * light_direction.length()) + 1.0);
+            color_sum += (orig_color_sample.xyz * light_color) / ((0.1 * light_direction.length() * light_direction.length()) + 1.0);
             needs_next_light = true;
         } else {
             // if there is a border hit before reaching the light
@@ -249,7 +251,32 @@ void main() {
             }
         }
         if (needs_next_light) {
-            break;
+            light_num += 1;
+            if (light_num >= max_light_num) {
+                break;
+            }
+            // set up the new light
+            light_index = scene_info.infos[fragVolumeStart + 6 + light_num];
+            if (light_index == 0) {
+                // abort if there is no new light
+                break;
+            }
+            light_direction = get_light_position(light_index) - origPosition;
+            light_color = get_light_color(light_index);
+            
+            x_pos = light_direction.x > 0.0;
+            x_null = (light_direction.x == 0.0);
+            
+            y_pos = light_direction.y > 0.0;
+            y_null = (light_direction.y == 0.0);
+
+            z_pos = light_direction.z > 0.0;
+            z_null = (light_direction.z == 0.0);
+            // reset volume info
+            volume_index = fragVolumeStart;
+            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]; 
         }
     }
     outColor = vec4(color_sum, 1.0);
diff --git a/src/main.rs b/src/main.rs
index 9674aea..5c6dc6b 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -178,7 +178,7 @@ impl App {
         let entry = Entry::new(loader).map_err(|b| anyhow!("{}", b))?;
         let mut data = app_data::AppData::default();
         data.use_geometry_shader = false;
-        data.num_lights_per_volume = 1;
+        data.num_lights_per_volume = 2;
         let mut scene_handler = scene::Scene::default();
         
         //load_model::load_model(&mut data)?;
diff --git a/src/scene/mod.rs b/src/scene/mod.rs
index 61609bd..2006ece 100644
--- a/src/scene/mod.rs
+++ b/src/scene/mod.rs
@@ -88,7 +88,8 @@ impl Scene {
 
         oct_tree.set_cube(cube.clone());
 
-        self.point_lights.push(PointLight { pos: vec3(11.0, 11.0, 11.0), color: vec3(1.0, 1.0, 1.0), memory_start: 0 });
+        self.point_lights.push(PointLight { pos: vec3(11.0, 11.0, 11.0), color: vec3(0.5, 0.5, 0.5), memory_start: 0 });
+        self.point_lights.push(PointLight { pos: vec3(9.0, 9.0, 11.0), color: vec3(0.5, 0.5, 0.5), memory_start: 0 });
 
         let mut empty_volumes: Vec<Rc<RefCell<EmptyVolume>>>;
         (empty_volumes, _) = EmptyVolume::from_oct_tree(&oct_tree);
@@ -113,7 +114,7 @@ impl Scene {
                     else {
                         cube.draw(&data.topology, index, self);
                     }*/
-                    cube.draw(&data.topology, index, self);
+                    //cube.draw(&data.topology, index, self);
                 }
                 None => {}
             }
@@ -127,6 +128,15 @@ impl Scene {
         };
         let index = self.sized_vertices.len();
         cube.draw(&data.topology, index, self);
+
+        let cube = Cuboid {
+            pos: vec3(9.0, 9.0, 11.0),
+            color: vec3(shade, 1.0, shade),
+            tex_coord: vec2(0.0, 0.0),
+            size: Vector3 {x: 0.5, y: 0.5, z: 0.5}
+        };
+        let index = self.sized_vertices.len();
+        cube.draw(&data.topology, index, self);
         
         let mut memory_index = 1; // zero should be the location for the overall length (also will be the invalid memory allocation for pointing to a nonexistant neighbor)
         for light in &mut self.point_lights {