diff --git a/shaders/compiled/frag_rt_quad.spv b/shaders/compiled/frag_rt_quad.spv
index 6cb39ac..8bba5d6 100644
Binary files a/shaders/compiled/frag_rt_quad.spv and b/shaders/compiled/frag_rt_quad.spv differ
diff --git a/shaders/rt_quad.frag b/shaders/rt_quad.frag
index 848e342..091b247 100644
--- a/shaders/rt_quad.frag
+++ b/shaders/rt_quad.frag
@@ -281,7 +281,7 @@ Tracing trace_ray(uint volume_start, vec3 starting_pos, vec3 start_direction, fl
             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);
 
-            if (color_sample == uvec4(0, 0, 0, 0)) {
+            if (color_sample.xyz == uvec3(0, 0, 0)) {
                 // not a color hit, so check neighbor
                 if (next_neighbor != 0) {
                     volume_index = next_neighbor;
@@ -290,6 +290,8 @@ Tracing trace_ray(uint volume_start, vec3 starting_pos, vec3 start_direction, fl
                     volume_pos_z = scene_info.infos[volume_index + 2];
                 } else {
                     // neighbor miss
+                    end_color_transparent = uvec4(255, 0, 0, 255);
+                    result.end_color = uvec4(255, 0, 0, 255);
                     break;
                 }
             } else {
@@ -377,7 +379,7 @@ vec3 get_lighting_color(uint volume_start, vec3 starting_pos, vec4 orig_color_sa
     uint light_num = 0;
 
     // initialize color
-    vec3 color_sum = vec3(0.0, 0.0, 0.0) + (orig_color_sample.xyz * 0.01);
+    vec3 color_sum = vec3(0.0, 0.0, 0.0) + (orig_color_sample.xyz * 0.005);
 
     uint max_iterations = max_num_lights * max_iterations_per_light;
     uint iteration = 0;
diff --git a/src/main.rs b/src/main.rs
index a5923b6..9f7d013 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -223,8 +223,8 @@ impl App {
         image::create_texture_image_view(&device, &mut data)?;
         image::create_texture_sampler(&device, &mut data)?;
         
-        let cur_pos = generators::generate_test_scene(&mut scene_handler, &mut data)?;
-        //let cur_pos = generators::generate_test_scene2(&mut scene_handler, &mut data, 1, 1,1, 1)?;
+        //let cur_pos = generators::generate_test_scene(&mut scene_handler, &mut data)?;
+        let cur_pos = generators::generate_test_scene2(&mut scene_handler, &mut data, 3, 3,1, 2)?;
         scene_handler.prepare_data(&instance, &device, &mut data)?;
 
         buffer::create_uniform_buffers(&instance, &device, &mut data)?;
diff --git a/src/scene/empty_volume.rs b/src/scene/empty_volume.rs
index 42474c8..bde0226 100644
--- a/src/scene/empty_volume.rs
+++ b/src/scene/empty_volume.rs
@@ -105,30 +105,38 @@ impl EmptyVolume {
                             continue;
                         }
                         println!("new starting pos: {}, {}, {}", x_index, y_index, z_index);
-                        println!("start growing volume x");
                         // MARK: Start new Volume
                         let mut x_size = 0;
                         let mut y_size = 0;
                         let mut z_size = 0;
-                        if query_result.1 > 1 {
+
+                        let neighbor_result = neighbors.test_element(x_index, y_index, z_index);
+
+                        if query_result.1 > 1 && query_result.2.0 >= neighbor_result.2.0 && query_result.2.1 >= neighbor_result.2.1 && query_result.2.2 >= neighbor_result.2.2 && query_result.1 <= neighbor_result.1 {
                             x_size = query_result.1 - 1 - (x_index - query_result.2.0);
                             y_size = query_result.1 - 1 - (y_index - query_result.2.1);
                             z_size = query_result.1 - 1 - (z_index - query_result.2.2);
                             println!("enhanced starting size: {}, {}, {}", x_size+1, y_size+1, z_size+1);
                         }
+                        println!("start growing volume x");
                         let mut grow = true;
                         while grow {
                             grow &= (x_index + x_size + 1) < tree.borrow().size;
                             if grow {
                                 let mut z = 0;
                                 let mut y = 0;
-                                while z < z_size.max(1) && y < y_size.max(1) {
+                                while z < z_size + 1 && y < y_size + 1 {
                                     let query_result = tree.borrow().test_element(x_index + x_size + 1, y_index + y, z_index + z);
+                                    let neighbor_result = neighbors.test_element(x_index + x_size + 1, y_index + y, z_index + z);
                                     check_its += 1;
                                     grow &= ((!query_result.0 && !transparent) || (transparent && EmptyVolume::check_transparent(query_result.3, &transparent_color, &tranparent_roughness))) &&
-                                        neighbors.get_element(x_index + x_size + 1, y_index + y, z_index + z).is_none();
+                                        !neighbor_result.0;
+                                                                        
+                                    if !grow {
+                                        break;
+                                    }
 
-                                    if query_result.1 > 1 {
+                                    if query_result.1 > 1 && query_result.2.1 >= neighbor_result.2.1 && query_result.2.2 >= neighbor_result.2.2 && query_result.1 <= neighbor_result.1 {
                                         let start_x = query_result.2.0;
                                         let start_y = query_result.2.1;
                                         let start_z = query_result.2.2;
@@ -137,22 +145,20 @@ impl EmptyVolume {
                                         let end_y = query_result.2.1 + query_result.1;
                                         let end_z = query_result.2.2 + query_result.1;
 
-                                        if start_z <= z && z_index + z_size <= end_z {
+                                        if start_z <= z_index + z && z_index + z_size <= end_z {
                                             // we can skip iterating z
-                                            z = end_z;
-                                            if start_y <= y && y_index + y_size <= end_y {
+                                            z = end_z - z_index;
+                                            if start_y <= y_index + y && y_index + y_size <= end_y && start_z <= z_index {
                                                 // we can skip iterating y
-                                                y = end_y;
+                                                y = end_y - y_index;
+                                                z = 0;
+                                                continue;
                                             }
                                         }
                                     }
-                                    
-                                    if !grow {
-                                        break;
-                                    }
 
                                     z += 1;
-                                    if z >= z_size {
+                                    if z >= z_size + 1 {
                                         z = 0;
                                         y += 1;
                                     }
@@ -169,13 +175,18 @@ impl EmptyVolume {
                             if grow {
                                 let mut z = 0;
                                 let mut x = 0;
-                                while z < z_size.max(1) && x < x_size.max(1) {
+                                while z < z_size + 1 && x < x_size + 1 {
                                     let query_result = tree.borrow().test_element(x_index + x, y_index + y_size + 1, z_index + z);
+                                    let neighbor_result = neighbors.test_element(x_index + x, y_index + y_size + 1, z_index + z);
                                     check_its += 1;
                                     grow &= ((!query_result.0 && !transparent) || (transparent && EmptyVolume::check_transparent(query_result.3, &transparent_color, &tranparent_roughness))) &&
-                                        neighbors.get_element(x_index + x, y_index + y_size + 1, z_index + z).is_none();
-
-                                    if query_result.1 > 1 {
+                                        !neighbor_result.0;
+                                    
+                                    if !grow {
+                                        break;
+                                    }
+                                    
+                                    if query_result.1 > 1 && query_result.2.0 >= neighbor_result.2.0 && query_result.2.2 >= neighbor_result.2.2 && query_result.1 <= neighbor_result.1 {
                                         let start_x = query_result.2.0;
                                         let start_y = query_result.2.1;
                                         let start_z = query_result.2.2;
@@ -184,22 +195,20 @@ impl EmptyVolume {
                                         let end_y = query_result.2.1 + query_result.1;
                                         let end_z = query_result.2.2 + query_result.1;
 
-                                        if start_z <= z && z_index + z_size <= end_z {
+                                        if start_z <= z_index + z && z_index + z_size <= end_z {
                                             // we can skip iterating z
-                                            z = end_z;
-                                            if start_x <= x && x_index + x_size <= end_x {
+                                            z = end_z - z_index;
+                                            if start_x <= x_index + x && x_index + x_size <= end_x && start_z <= z_index {
                                                 // we can skip iterating x
-                                                x = end_x;
+                                                x = end_x - x_index;
+                                                z = 0;
+                                                continue;
                                             }
                                         }
                                     }
-                                    
-                                    if !grow {
-                                        break;
-                                    }
 
                                     z += 1;
-                                    if z >= z_size {
+                                    if z >= z_size + 1 {
                                         z = 0;
                                         x += 1;
                                     }
@@ -217,13 +226,18 @@ impl EmptyVolume {
                             if grow {
                                 let mut y = 0;
                                 let mut x = 0;
-                                while y < y_size.max(1) && x < x_size.max(1) {
+                                while y < y_size + 1 && x < x_size + 1 {
                                     let query_result = tree.borrow().test_element(x_index + x, y_index + y, z_index + z_size + 1);
+                                    let neighbor_result = neighbors.test_element(x_index + x, y_index + y, z_index + z_size + 1);
                                     check_its += 1;
                                     grow &= ((!query_result.0 && !transparent) || (transparent && EmptyVolume::check_transparent(query_result.3, &transparent_color, &tranparent_roughness))) &&
-                                        neighbors.get_element(x_index + x, y_index + y, z_index + z_size + 1).is_none();
+                                        !neighbor_result.0;
+                                                                        
+                                    if !grow {
+                                        break;
+                                    }
 
-                                    if query_result.1 > 1 {
+                                    if query_result.1 > 1 && query_result.2.1 >= neighbor_result.2.1 && query_result.2.0 >= neighbor_result.2.0 && query_result.1 <= neighbor_result.1 {
                                         let start_x = query_result.2.0;
                                         let start_y = query_result.2.1;
                                         let start_z = query_result.2.2;
@@ -232,22 +246,20 @@ impl EmptyVolume {
                                         let end_y = query_result.2.1 + query_result.1;
                                         let end_z = query_result.2.2 + query_result.1;
 
-                                        if start_x <= x && x_index + x_size <= end_x {
+                                        if start_x <= x_index + x && x_index + x_size <= end_x {
                                             // we can skip iterating x
-                                            x = end_x;
-                                            if start_y <= y && y_index + y_size <= end_y {
+                                            x = end_x - x_index;
+                                            if start_y <= y_index + y && y_index + y_size <= end_y && start_x <= x_index {
                                                 // we can skip iterating y
-                                                y = end_y;
+                                                y = end_y - y_index;
+                                                x = 0;
+                                                continue;
                                             }
                                         }
                                     }
-                                    
-                                    if !grow {
-                                        break;
-                                    }
 
                                     x += 1;
-                                    if x >= x_size {
+                                    if x >= x_size + 1 {
                                         x = 0;
                                         y += 1;
                                     }
@@ -509,7 +521,7 @@ impl EmptyVolume {
                 x_min_pos = 0;
             }
             else {
-                x_min_pos = reference.borrow().position.x -1;
+                x_min_pos = reference.borrow().position.x - 1;
             }
             let y_min_pos;
             if reference.borrow().position.y == 0 {
@@ -517,7 +529,7 @@ impl EmptyVolume {
                 y_min_pos = 0;
             }
             else {
-                y_min_pos = reference.borrow().position.y -1;
+                y_min_pos = reference.borrow().position.y - 1;
             }
             let z_min_pos;
             if reference.borrow().position.z == 0 {
@@ -525,7 +537,7 @@ impl EmptyVolume {
                 z_min_pos = 0;
             }
             else {
-                z_min_pos = reference.borrow().position.z -1;
+                z_min_pos = reference.borrow().position.z - 1;
             }
             let x_max_pos = reference.borrow().position.x + reference.borrow().size_x;
             let y_max_pos = reference.borrow().position.y + reference.borrow().size_y;
@@ -534,18 +546,16 @@ impl EmptyVolume {
             let mut bottom_neighbors = vec![];
             let mut bottom_elements_num = 0;
             let mut all_same = true;
-            if z_min_pos != 0 {
-                for x in 0..reference.borrow().size_x {
-                    for y in 0..reference.borrow().size_y {
-                        if let Some(c) = neighbors.get_element(reference.borrow().position.x + x, reference.borrow().position.y + y, z_min_pos) {
-                            bottom_elements_num += 1;
-                            bottom_neighbors.push(Some(c.clone()));
-                            all_same = all_same && (bottom_neighbors[0] == Some(c));
-                        }
-                        else {
-                            bottom_neighbors.push(None);
-                            all_same = all_same && (bottom_neighbors[0] == None);
-                        }
+            for x in 0..reference.borrow().size_x {
+                for y in 0..reference.borrow().size_y {
+                    if let Some(c) = neighbors.get_element(reference.borrow().position.x + x, reference.borrow().position.y + y, z_min_pos) {
+                        bottom_elements_num += 1;
+                        bottom_neighbors.push(Some(c.clone()));
+                        all_same = all_same && (bottom_neighbors[0] == Some(c));
+                    }
+                    else {
+                        bottom_neighbors.push(None);
+                        all_same = all_same && (bottom_neighbors[0] == None);
                     }
                 }
             }
@@ -622,18 +632,16 @@ impl EmptyVolume {
             let mut front_neighbors = vec![];
             let mut front_elements_num = 0;
             let mut all_same = true;
-            if y_min_pos != 0{
-                for x in 0..reference.borrow().size_x {
-                    for z in 0..reference.borrow().size_z {
-                        if let Some(c) = neighbors.get_element(reference.borrow().position.x + x, y_min_pos, reference.borrow().position.z + z) {
-                            front_elements_num += 1;
-                            front_neighbors.push(Some(c.clone()));
-                            all_same = all_same && (front_neighbors[0] == Some(c));
-                        }
-                        else {
-                            front_neighbors.push(None);
-                            all_same = all_same && (front_neighbors[0] == None);
-                        }
+            for x in 0..reference.borrow().size_x {
+                for z in 0..reference.borrow().size_z {
+                    if let Some(c) = neighbors.get_element(reference.borrow().position.x + x, y_min_pos, reference.borrow().position.z + z) {
+                        front_elements_num += 1;
+                        front_neighbors.push(Some(c.clone()));
+                        all_same = all_same && (front_neighbors[0] == Some(c));
+                    }
+                    else {
+                        front_neighbors.push(None);
+                        all_same = all_same && (front_neighbors[0] == None);
                     }
                 }
             }
@@ -653,18 +661,16 @@ impl EmptyVolume {
             let mut left_neighbors = vec![];
             let mut left_elements_num = 0;
             let mut all_same = true;
-            if x_min_pos != 0 {
-                for y in 0..reference.borrow().size_y {
-                    for z in 0..reference.borrow().size_z {
-                        if let Some(c) = neighbors.get_element(x_min_pos, reference.borrow().position.y + y, reference.borrow().position.z + z) {
-                            left_elements_num += 1;
-                            left_neighbors.push(Some(c.clone()));
-                            all_same = all_same && (left_neighbors[0] == Some(c));
-                        }
-                        else {
-                            left_neighbors.push(None);
-                            all_same = all_same && (left_neighbors[0] == None);
-                        }
+            for y in 0..reference.borrow().size_y {
+                for z in 0..reference.borrow().size_z {
+                    if let Some(c) = neighbors.get_element(x_min_pos, reference.borrow().position.y + y, reference.borrow().position.z + z) {
+                        left_elements_num += 1;
+                        left_neighbors.push(Some(c.clone()));
+                        all_same = all_same && (left_neighbors[0] == Some(c));
+                    }
+                    else {
+                        left_neighbors.push(None);
+                        all_same = all_same && (left_neighbors[0] == None);
                     }
                 }
             }
@@ -723,13 +729,20 @@ impl EmptyVolume {
                 if self.color_bottom.len() <= index {
                     continue;
                 }
-                if self.neighbor_bottom.len() > index {
-                    if let Some(_) = self.neighbor_bottom[index] {
+                if self.neighbor_bottom.len() > index || self.neighbor_bottom.len() == 1 {
+                    if let Some(_) = self.neighbor_bottom[index.min(self.neighbor_bottom.len() - 1)] {
                         if self.color_bottom[index] == (Vector3 {x: 0, y: 0, z: 0}) {
                             continue;
                         }
                     }
                 }
+                if self.color_bottom[index] == (Vector3 {x: 0, y: 0, z: 0}) {
+                    println!("No neighbor reference, but no color! x: {}, y: {}, z: {}", self.position.x + x, self.position.y + y, self.position.z);
+                    if self.neighbor_bottom.len() == 1 {
+                        println!("neighbor length is one!");
+                    }
+                }
+
                 let quad = Quad {
                     pos1: float_pos + Vector3 { x: -0.5 + x as f32, y: -0.5 + y as f32, z: -0.5 },
                     pos4: float_pos + Vector3 { x: 0.5 + x as f32, y: -0.5 + y as f32, z: -0.5 }, 
@@ -749,13 +762,21 @@ impl EmptyVolume {
                 if self.color_top.len() <= 0 {
                     continue;
                 }
-                if self.neighbor_top.len() > index {
-                    if let Some(_) = self.neighbor_top[index] {
+                if self.neighbor_top.len() > index || self.neighbor_top.len() == 1 {
+                    if let Some(_) = self.neighbor_top[index.min(self.neighbor_top.len() - 1)] {
                         if self.color_top[index] == (Vector3 {x: 0, y: 0, z: 0}) {
                             continue;
                         }
                     }
                 }
+
+                if self.color_top[index] == (Vector3 {x: 0, y: 0, z: 0}) {
+                    println!("No neighbor reference, but no color! x: {}, y: {}, z: {}", self.position.x + x, self.position.y + y, self.position.z + self.size_z);
+
+                    if self.neighbor_top.len() == 1 {
+                        println!("neighbor length is one!");
+                    }
+                }
                 let quad = Quad {
                     pos4: float_pos + Vector3 { x: -0.5 + x as f32, y: -0.5 + y as f32, z: self.size_z as f32 - 0.5 },
                     pos1: float_pos + Vector3 { x: 0.5 + x as f32, y: -0.5 + y as f32, z: self.size_z as f32 - 0.5 }, 
@@ -776,13 +797,20 @@ impl EmptyVolume {
                 if self.color_front.len() <= 0 {
                     continue;
                 }
-                if self.neighbor_front.len() > index {
-                    if let Some(_) = self.neighbor_front[index] {
+                if self.neighbor_front.len() > index || self.neighbor_front.len() == 1 {
+                    if let Some(_) = self.neighbor_front[index.min(self.neighbor_front.len() - 1)] {
                         if self.color_front[index] == (Vector3 {x: 0, y: 0, z: 0}) {
                             continue;
                         }
                     }
                 }
+
+                if self.color_front[index] == (Vector3 {x: 0, y: 0, z: 0}) {
+                    println!("No neighbor reference, but no color! x: {}, y: {}, z: {}", self.position.x + x, self.position.y, self.position.z + z);
+                    if self.neighbor_front.len() == 1 {
+                        println!("neighbor length is one!");
+                    }
+                }
                 let quad = Quad {
                     pos1: float_pos + Vector3 { x: -0.5 + x as f32, y: -0.5 + 0 as f32, z: z as f32 - 0.5 },
                     pos4: float_pos + Vector3 { x: -0.5 + x as f32, y: -0.5 + 0 as f32, z: z as f32 + 0.5 }, 
@@ -803,13 +831,20 @@ impl EmptyVolume {
                 if self.color_back.len() <= 0 {
                     continue;
                 }
-                if self.neighbor_back.len() > index {
-                    if let Some(_) = self.neighbor_back[index] {
+                if self.neighbor_back.len() > index || self.neighbor_back.len() == 1 {
+                    if let Some(_) = self.neighbor_back[index.min(self.neighbor_back.len() - 1)] {
                         if self.color_back[index] == (Vector3 {x: 0, y: 0, z: 0}) {
                             continue;
                         }
                     }
                 }
+
+                if self.color_back[index] == (Vector3 {x: 0, y: 0, z: 0}) {
+                    println!("No neighbor reference, but no color! x: {}, y: {}, z: {}", self.position.x + x, self.position.y + self.size_y, self.position.z + z);
+                    if self.neighbor_back.len() == 1 {
+                        println!("neighbor length is one!");
+                    }
+                }
                 let quad = Quad {
                     pos4: float_pos + Vector3 { x: -0.5 + x as f32, y: -0.5 + self.size_y as f32, z: z as f32 - 0.5 },
                     pos1: float_pos + Vector3 { x: -0.5 + x as f32, y: -0.5 + self.size_y as f32, z: z as f32 + 0.5 }, 
@@ -830,13 +865,20 @@ impl EmptyVolume {
                 if self.color_left.len() <= 0 {
                     continue;
                 }
-                if self.neighbor_left.len() > index {
-                    if let Some(_) = self.neighbor_left[index] {
+                if self.neighbor_left.len() > index || self.neighbor_left.len() == 1 {
+                    if let Some(_) = self.neighbor_left[index.min(self.neighbor_left.len() - 1)] {
                         if self.color_left[index] == (Vector3 {x: 0, y: 0, z: 0}) {
                             continue;
                         }
                     }
                 }
+
+                if self.color_left[index] == (Vector3 {x: 0, y: 0, z: 0}) {
+                    println!("No neighbor reference, but no color! x: {}, y: {}, z: {}", self.position.x, self.position.y + y, self.position.z + z);
+                    if self.neighbor_left.len() == 1 {
+                        println!("neighbor length is one!");
+                    }
+                }
                 let quad = Quad {
                     pos4: float_pos + Vector3 { x: -0.5 + 0.0 as f32, y: y as f32 - 0.5, z: z as f32 - 0.5 },
                     pos1: float_pos + Vector3 { x: -0.5 + 0.0 as f32, y: y as f32 - 0.5, z: z as f32 + 0.5 }, 
@@ -857,13 +899,20 @@ impl EmptyVolume {
                 if self.color_right.len() <= 0 {
                     continue;
                 }
-                if self.neighbor_right.len() > index {
-                    if let Some(_) = self.neighbor_right[index] {
+                if self.neighbor_right.len() > index || self.neighbor_right.len() == 1 {
+                    if let Some(_) = self.neighbor_right[index.min(self.neighbor_right.len() - 1)] {
                         if self.color_right[index] == (Vector3 {x: 0, y: 0, z: 0}) {
                             continue;
                         }
                     }
                 }
+
+                if self.color_right[index] == (Vector3 {x: 0, y: 0, z: 0}) {
+                    println!("No neighbor reference, but no color! x: {}, y: {}, z: {}", self.position.x + self.size_x, self.position.y + y, self.position.z + z);
+                    if self.neighbor_right.len() == 1 {
+                        println!("neighbor length is one!");
+                    }
+                }
                 let quad = Quad {
                     pos1: float_pos + Vector3 { x: -0.5 + self.size_x as f32, y: y as f32 - 0.5, z: z as f32 - 0.5 },
                     pos4: float_pos + Vector3 { x: -0.5 + self.size_x as f32, y: y as f32 - 0.5, z: z as f32 + 0.5 }, 
@@ -1238,7 +1287,7 @@ impl Memorizable for EmptyVolume {
         mem_index += 2;
 
         //color and roughness
-        //check which endian should be used in conjun´ction of the graphicscard (might already be handled by vulkan)
+        //check which endian should be used in conjunction of the graphics card (might already be handled by vulkan)
         if self.color_top.len() > 0 {
             for index in 0..self.color_top.len() {
                 let value = &self.color_top[index];
@@ -1419,7 +1468,7 @@ impl Memorizable for EmptyVolume {
             v[mem_index] = 0;
             mem_index += 1;
         }
-        println!("last memory index of volume was {}, equivalent to {}kB", mem_index, mem_index * 32 / 8 / 1024);
+        //println!("last memory index of volume was {}, equivalent to {}kB", mem_index, mem_index * 32 / 8 / 1024);
         v
     }
 
diff --git a/src/scene/generators.rs b/src/scene/generators.rs
index 07eb61c..1919378 100644
--- a/src/scene/generators.rs
+++ b/src/scene/generators.rs
@@ -121,6 +121,7 @@ pub fn generate_test_scene(scene: &mut Scene, data: &mut AppData) -> Result<(Poi
 
 pub fn generate_test_scene2(scene: &mut Scene, data: &mut AppData, chunk_num_x: usize, chunk_num_y: usize, chunk_num_z: usize, num_gaussians: usize) -> Result<(Point3<f32>)> {
     let mut rng = rand::thread_rng();
+    
     let grid_size = CHUNK_SIZE as i32;
 
     let max_x = chunk_num_x * grid_size as usize;
@@ -130,7 +131,7 @@ pub fn generate_test_scene2(scene: &mut Scene, data: &mut AppData, chunk_num_x:
     let mut height_map = vec![vec![0.0; max_y]; max_x];
 
     for i in 0..num_gaussians {
-        let height = rng.gen_range(0..max_z / 2) as f32;
+        let height = rng.gen_range(16..max_z / 2) as f32;
         let center_x = rng.gen_range(0..max_x) as f32;
         let center_y = rng.gen_range(0..max_y) as f32;
 
@@ -144,7 +145,17 @@ pub fn generate_test_scene2(scene: &mut Scene, data: &mut AppData, chunk_num_x:
         }
     }
 
-    let oct_trees = vec![vec![vec![Rc::new(RefCell::new(OctTree::<Cube>::create(CHUNK_SIZE)?)); chunk_num_x]; chunk_num_y]; chunk_num_z];
+    let mut oct_trees = vec![];
+
+    for z in 0..chunk_num_z {
+        oct_trees.push(vec![]);
+        for y in 0..chunk_num_y {
+            oct_trees[z].push(vec![]);
+            for x in 0..chunk_num_x {
+                oct_trees[z][y].push(Rc::new(RefCell::new(OctTree::<Cube>::create(CHUNK_SIZE)?)));
+            }
+        }
+    }
 
     for x in 0..max_x {
         for y in 0..max_y {
@@ -153,7 +164,7 @@ pub fn generate_test_scene2(scene: &mut Scene, data: &mut AppData, chunk_num_x:
             if height < max_z {
                 let shade = (rng.gen_range(0..50) as f32) / 100.0;
                 let cube = Cube {
-                    pos: vec3(x as f32, y as f32, (height % grid_size as usize) as f32),
+                    pos: vec3((x % grid_size as usize) as f32, (y % grid_size as usize) as f32, (height % grid_size as usize) as f32),
                     color: vec3(shade, 1.0, shade),
                     tex_coord: vec2(0.0, 0.0),
                     transparent: false,
@@ -171,7 +182,7 @@ pub fn generate_test_scene2(scene: &mut Scene, data: &mut AppData, chunk_num_x:
                 pillar_height -= 1;
                 let shade = (rng.gen_range(1..50) as f32) / 100.0;
                 let cube = Cube {
-                    pos: vec3(x as f32, y as f32, (pillar_height % grid_size as usize) as f32),
+                    pos: vec3((x % grid_size as usize) as f32, (y % grid_size as usize) as f32, (pillar_height % grid_size as usize) as f32),
                     color: vec3(shade, shade / 2.0, 0.0),
                     tex_coord: vec2(0.0, 0.0),
                     transparent: false,
diff --git a/src/scene/mod.rs b/src/scene/mod.rs
index b2e933e..2bfed34 100644
--- a/src/scene/mod.rs
+++ b/src/scene/mod.rs
@@ -175,6 +175,7 @@ impl Scene {
         }
 
         if self.rt_vertices.len() != 0 {
+            println!("number of quad vertices is {}", self.rt_vertices.len());
             (self.vertex_buffer_quad, self.vertex_buffer_memory_quad) = buffer::create_vertex_buffer(instance, device, &data, &self.rt_vertices)?;
             (self.index_buffer_quad, self.index_buffer_memory_quad) = buffer::create_index_buffer(&instance, &device, &data, &self.indices_rt)?;
         }
diff --git a/src/scene/oct_tree.rs b/src/scene/oct_tree.rs
index a156557..e1c4970 100644
--- a/src/scene/oct_tree.rs
+++ b/src/scene/oct_tree.rs
@@ -191,9 +191,6 @@ impl<T: Clone> OctTree<T> {
             }
         }
         else {
-            if let Some(_) = self.blocks[z * MIN_CHUNK_SIZE * MIN_CHUNK_SIZE + y * MIN_CHUNK_SIZE + x] {
-                println!("overwriting block!")
-            }
             self.blocks[z * MIN_CHUNK_SIZE * MIN_CHUNK_SIZE + y * MIN_CHUNK_SIZE + x] = Some(element);
         }
     }
@@ -471,10 +468,10 @@ impl<T: Clone> OctTree<T> {
         }
         else {
             if let Some(c) = &self.blocks[z * MIN_CHUNK_SIZE * MIN_CHUNK_SIZE + y * MIN_CHUNK_SIZE + x] {
-                (true, 1, (x, y, z), Some(c.clone()))
+                (true, 1, (node_start_x + x, node_start_y + y, node_start_z + z), Some(c.clone()))
             }
             else {
-                (false, 1, (x, y, z), None)
+                (false, 1, (node_start_x + x, node_start_y + y, node_start_z + z), None)
             }
         }
     }