From e9e6aec8f8ba96c169c3b3651dc294bc0d50019e Mon Sep 17 00:00:00 2001
From: zomseffen <steffen@tom.bi>
Date: Mon, 19 May 2025 11:44:05 +0200
Subject: [PATCH] first working version of volumetric shadows

---
 shaders/compiled/frag_rt_quad.spv          | Bin 48832 -> 76768 bytes
 shaders/compiled/rt_compute_grow_one.spv   | Bin 4744 -> 4744 bytes
 shaders/compiled/rt_compute_grow_three.spv | Bin 4852 -> 4892 bytes
 shaders/compiled/rt_compute_grow_two.spv   | Bin 4852 -> 4892 bytes
 shaders/compiled/rt_compute_mempos.spv     | Bin 45852 -> 49864 bytes
 shaders/compiled/rt_compute_rasterize.spv  | Bin 23524 -> 23524 bytes
 shaders/rt_compute_grow_one.comp           |   2 +-
 shaders/rt_compute_grow_three.comp         |   4 +-
 shaders/rt_compute_grow_two.comp           |   4 +-
 shaders/rt_compute_mempos.comp             |  54 ++--
 shaders/rt_compute_rasterize.comp          |   4 +-
 shaders/rt_quad.frag                       | 285 ++++++++++++++++++++-
 src/app_data.rs                            |   1 +
 src/buffer.rs                              |   2 +-
 src/command_buffer.rs                      |  35 +--
 src/main.rs                                |   3 +-
 src/scene/empty_volume.rs                  |  39 ++-
 src/scene/generators.rs                    |  11 +-
 src/scene/mod.rs                           |  65 ++---
 src/scene/volumetrics/mod.rs               |  11 +-
 20 files changed, 426 insertions(+), 94 deletions(-)

diff --git a/shaders/compiled/frag_rt_quad.spv b/shaders/compiled/frag_rt_quad.spv
index 5523307721e2846a9fac6286f038154b20da90df..a738849b8da732710694744fb2f76179284f1f06 100644
GIT binary patch
literal 76768
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

literal 48832
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
E2PMuS2LJ#7

diff --git a/shaders/compiled/rt_compute_grow_one.spv b/shaders/compiled/rt_compute_grow_one.spv
index 23863abd403c5b111fbfab3367c669fdc790a780..ee4c26c5932b2774ea1210466d17b7a2ca06bd90 100644
GIT binary patch
delta 1597
zcmZ9LOHUM05QT5^8dv}`BM$+A0UQzW{Qwj}KyXGBm7t<47BCoM6oIgD(`qD=7#E~>
z#`p)+goKp~<JuqKlBMwnm>6~CcbYEJ+LP)!r_Q-mx4ZAGXV<fveO^PObME5egGY<2
z59dZ!=jRK{&Xw_N3?{w$u6?MwN?pQ@l4m35%)RA>xtW!P#|3F+ZhULQ`|eFPU@0R?
zh&*>S*R_|(V>I3oR-Mba;;>c>&*9g&_FWCW^`-bnk>8D^wrRp6nptL}TA~)>8GKFT
zB0{73Bd)fp)xw*}8A5&3SG<MLrS%!IyqZ@7>U6FrG^#K}NUURMo}3Az#9byQ2-WIo
zazi*+N;G--;8nt})sQ!YhDv`M>TTtpOZ7<U;9L20O0QQvv}yGl4<;(!`O<$ga}W7f
zlz-x=h1U_fq}P+BD-WP+w|eX4G2RMJ5yPk%avPynqsNzK>)OH6;C|RhpDVs_Kin2d
zvxQl(wCCZOaP9zD%~XF+jd$q|655!wKWtRIhR_4)0fenzm-GJ}d<fA7cg2j|U}?7S
zFgU*9BXC<M&3s3}(rm-W!0M%X=wZG)PQ;s?fLk+Z*6bu$nl(EGRzuaza~hl^o<wix
z3|KXJ2RT&IR5QQd1Bnmsh1+mxX6yq?Gkz8vUv~~}>!g{lA1uu_eIBe{s^i)D{sRyl
zq-W8t2Sd?0nYC+aJGGsIcLA>9_LRe5)rJT=d?R4nkaXM7MX)sWP3ilqpcAgst^=YR
z|3~QH*y1s8{HZU&ZHP4U<-pQ3WRxs!+7<Bb<};A1go^qr+U_U7VdG$<vdPcGt`pY?
zwH%MQT1uNDR9oZyiQkH9H_7I?4UT)J;i|<wcmDI-g;NW<tH!+1V5w@B``4-$6?&vi
z{ojH@^%S*_)g9cot8?75$*IZ=`cq<sXbIMmy<TVVDcS0!gYBex45#ETq~!mQnhpK0
M@xBcG&FTAp0jNKOyZ`_I

delta 1596
zcmZ9MOHUL*6osqhZ3Jd`ia0QUgCM>ifFdX$4v44(6<x95VTe%#!p2Rjkw{`(nBEzq
zKR``LSh+B+{Q)jnxG??z6Qi#DPETKHZF0NLx#!faTQ$|JW!5t5-CkXtb8c|q&b@_|
zyE6kTb91vx&K2@k7mRzg?e(a73S5yJWSowiQ@57pXQr0t@6SprbR!$jy>H(5PAr8)
zJ~7N&#q}sZjL~>Ym~}4e^1@smJd0n;HUHJ%8=vyNZ}U^wtaL*(MLf-vU5wiZmF|hS
z$|zS2-_4jNJfb7wDX<>RZ)B8LZC8O>8RZi{L!foK8Wzn$(qZJY7sr99=PmOnSc}v$
z`HHk)v8dk52G5H8YBljProRgHrs9tUnl&1HEuKv3cvVxIQ2mi$tmKWq1N4g~Dj0u8
z;}0BF@M=Pj^cqI#8hfMmYr(}a-T+P#{cKL#P7^vR9fvfV*91=IxF4QFGbBDyKc7vM
zW)t^-r9BSsgmW3NiYfn=oX&PHp~j^Brcv=qLL1Tsgsoni^Z#AA9nltUiy8NUrP;&|
zaJ=FDaGNL1d<VeNtl@)T)lxq6u)aG)#ETt<TQO-?><Czz6*~%6LFLVJ44fbyL??6{
ztem`kTrz3OncqJFi7(y>x5cHIu?sBCcsDpc?<CyjNi*LmurzDB2drAk<H`O0ry;sX
zkD{)7!OF?3u5*`ct7sp2EpEF!8~SqJlU=@ka@LS^YiIy0O?8uUD4`p!+pY_uG5jKe
zFWW2qbFlb6hu~ILnw32dmZq}$(!@=>0FJkN5w4uRO>1`yY;~nabA#8VrM~_PTqZ6N
zsy`BOd8ADc%B^yI;@6_wRYvn%2gf~=aOL8j8~=H3!pQ|4WkcRzuvj+D`*Yco676qY
zpIb0nK0)q%c?<8&@+|L6Vxm;v{zGD!NCm5jF0VECkZANqgUy6$^e5$?P0If+IUV|6
M;C&kUQx&)W0O19N<p2Nx

diff --git a/shaders/compiled/rt_compute_grow_three.spv b/shaders/compiled/rt_compute_grow_three.spv
index 625eb4ba9966b3720f7f14f1a68c5358ae1f5679..b3a00fdec2595f9c3219e4bbddfb63801c7fde0d 100644
GIT binary patch
literal 4892
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

literal 4852
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

diff --git a/shaders/compiled/rt_compute_grow_two.spv b/shaders/compiled/rt_compute_grow_two.spv
index 5d56e66caf168269f4509489428ae5c815dcfeab..08a31878e0e8a22d40f5e975cb8acbef6278fa6e 100644
GIT binary patch
literal 4892
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

literal 4852
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

diff --git a/shaders/compiled/rt_compute_mempos.spv b/shaders/compiled/rt_compute_mempos.spv
index 891a76f8bbc50dd19122341f24f594e8c8404310..e7775cd3e01e3480b7c248a5413ab9c051c54010 100644
GIT binary patch
literal 49864
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
Q0N7mG{Cm7|{~quE0Z0Up2><{9

literal 45852
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
AkpKVy

diff --git a/shaders/compiled/rt_compute_rasterize.spv b/shaders/compiled/rt_compute_rasterize.spv
index fc8e3b052d2ac700e2fdfc121aea111a5f5debd9..be9960867a8fcbafa9761fb3ef29a6a0c4daebd6 100644
GIT binary patch
delta 7284
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

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

diff --git a/shaders/rt_compute_grow_one.comp b/shaders/rt_compute_grow_one.comp
index 27e27eb..6fc2845 100644
--- a/shaders/rt_compute_grow_one.comp
+++ b/shaders/rt_compute_grow_one.comp
@@ -30,7 +30,7 @@ layout (local_size_x = 16, local_size_y = 1, local_size_z = 1) in;
 void main() {
     uint index = gl_GlobalInvocationID.x;
     uint output_offset = 0;
-    uint compound_start = 0;
+    uint compound_start = 1;
     // iterate over the compounds and find the work index inside of it
     while (index > compounds[compound_start] * compounds[compound_start]) {
         output_offset += compounds[compound_start] * compounds[compound_start] * compounds[compound_start];
diff --git a/shaders/rt_compute_grow_three.comp b/shaders/rt_compute_grow_three.comp
index 2127584..652a4cf 100644
--- a/shaders/rt_compute_grow_three.comp
+++ b/shaders/rt_compute_grow_three.comp
@@ -32,9 +32,9 @@ layout(binding = 8) buffer SizeBuffer3D {
 layout (local_size_x = 16, local_size_y = 1, local_size_z = 1) in;
 
 void main() {
-    uint index = gl_GlobalInvocationID.x;
+    uint index = gl_GlobalInvocationID.x * 2 + 1;
     uint output_offset = 0;
-    uint compound_start = 0;
+    uint compound_start = 1;
     // iterate over the compounds and find the work index inside of it
     while (index > compounds[compound_start] * compounds[compound_start]) {
         output_offset += compounds[compound_start] * compounds[compound_start] * compounds[compound_start];
diff --git a/shaders/rt_compute_grow_two.comp b/shaders/rt_compute_grow_two.comp
index 0631b0c..12acbb4 100644
--- a/shaders/rt_compute_grow_two.comp
+++ b/shaders/rt_compute_grow_two.comp
@@ -32,9 +32,9 @@ layout(binding = 8) readonly buffer SizeBuffer3D {
 layout (local_size_x = 16, local_size_y = 1, local_size_z = 1) in;
 
 void main() {
-    uint index = gl_GlobalInvocationID.x;
+    uint index = gl_GlobalInvocationID.x * 2 + 1;
     uint output_offset = 0;
-    uint compound_start = 0;
+    uint compound_start = 1;
     // iterate over the compounds and find the work index inside of it
     while (index > compounds[compound_start] * compounds[compound_start]) {
         output_offset += compounds[compound_start] * compounds[compound_start] * compounds[compound_start];
diff --git a/shaders/rt_compute_mempos.comp b/shaders/rt_compute_mempos.comp
index 25c5a63..831a827 100644
--- a/shaders/rt_compute_mempos.comp
+++ b/shaders/rt_compute_mempos.comp
@@ -198,22 +198,28 @@ void add_cube(uint cube_num, float scale, vec3 pos, vec3 color) {
 
 }
 
+uint cohort_index_from_pos(uint x, uint y, uint z, uint block_size, uint compound_size) {
+   uint steps = compound_size / block_size;
+   return (z / block_size) * (steps*steps) + (y / block_size) * steps + (x / block_size);
+}
+
 void main() {
    uint index = gl_GlobalInvocationID.x;
    uint output_offset = 1;
    uint input_offset = 0;
-   uint compound_start = 0;
+   uint compound_start = 1;
 
    uint nodes = num_nodes(compounds[compound_start]);
    // iterate over the compounds and find the work index inside of it
    while (index > nodes) {
-      output_offset += nodes * 9;
       input_offset += compounds[compound_start] * compounds[compound_start] * compounds[compound_start];
       index -= nodes;
       compound_start = compounds[compound_start + 2];
       nodes = num_nodes(compounds[compound_start]);
    }
 
+   output_offset = compounds[compound_start + 8];
+
    uint compound_grid_size = compounds[compound_start];
    uint parent_start = 0;
    uint cohort_start = 0;
@@ -230,21 +236,30 @@ void main() {
       size = size / 2;
    }
 
-   uint parent = parent_start + ((cohort_index - cohort_index % 8) / 8) * 9;
-   uint start = cohort_start + 9 * cohort_index;
    uint steps = compounds[compound_start] / size;
 
    float compound_scale = uintBitsToFloat(compounds[compound_start + 1]);
    vec3 mid_offset = vec3(compound_scale * 0.5, compound_scale * 0.5, compound_scale * 0.5);
    
-   uint x = (cohort_index % steps) * size;
-   uint y = (((cohort_index - (cohort_index % steps)) % (steps * steps)) / (steps)) * size;
-   uint z = (((cohort_index - (cohort_index % (steps * steps)))) / (steps * steps)) * size;
+   uint x_no_offset = (cohort_index % steps) * size;
+   uint y_no_offset = (((cohort_index - (cohort_index % steps)) % (steps * steps)) / (steps)) * size;
+   uint z_no_offset = (((cohort_index - (cohort_index % (steps * steps)))) / (steps * steps)) * size;
+
+   uint parent_size = size * 2;
+   uint parent_steps = compounds[compound_start] / parent_size;
+   uint x_parent = uint(floor(float(x_no_offset) / float(parent_size))) * parent_size;
+   uint y_parent = uint(floor(float(y_no_offset) / float(parent_size))) * parent_size;
+   uint z_parent = uint(floor(float(z_no_offset) / float(parent_size))) * parent_size;
+
+   uint parent = output_offset + parent_start + cohort_index_from_pos(x_parent, y_parent, z_parent, parent_size, compound_grid_size) * 9;;
+   if (size == compounds[compound_start]) {
+      parent = 0;
+   }
 
    // plus one size offset, since we want to place the nodes at the far end. This aligns with the iteration directions in the previous shaders
-   x = x  + (size - 1);
-   y = y  + (size - 1);
-   z = z  + (size - 1);
+   uint x = x_no_offset + (size - 1);
+   uint y = y_no_offset + (size - 1);
+   uint z = z_no_offset + (size - 1);
 
    // sum of all elements with coordinates lower than x, y, z
    uint contained_entries = grid_size_in[input_offset + x * compound_grid_size * compound_grid_size + y * compound_grid_size + z];
@@ -283,19 +298,20 @@ void main() {
    }
 
    if (contained_entries > 0) {
-      out_memory[output_offset + cohort_start + cohort_index * 9 + 0] = parent * uint(size != 64);
+      out_memory[output_offset + cohort_start + cohort_index * 9 + 0] = parent;
 
       if (size > 2) {
          // add child node reference
+         uint child_size = size / 2;
          uint cohort_end = cohort_start + 9 * add_size;
-         out_memory[output_offset + cohort_start + cohort_index * 9 + 1] = cohort_end + cohort_index * 9 + 9 * 0; // xyz
-         out_memory[output_offset + cohort_start + cohort_index * 9 + 2] = cohort_end + cohort_index * 9 + 9 * 1; // Xyz
-         out_memory[output_offset + cohort_start + cohort_index * 9 + 3] = cohort_end + cohort_index * 9 + 9 * 2; // xYz
-         out_memory[output_offset + cohort_start + cohort_index * 9 + 4] = cohort_end + cohort_index * 9 + 9 * 3; // XYz
-         out_memory[output_offset + cohort_start + cohort_index * 9 + 5] = cohort_end + cohort_index * 9 + 9 * 4; // xyZ
-         out_memory[output_offset + cohort_start + cohort_index * 9 + 6] = cohort_end + cohort_index * 9 + 9 * 5; // XyZ
-         out_memory[output_offset + cohort_start + cohort_index * 9 + 7] = cohort_end + cohort_index * 9 + 9 * 6; // xYZ
-         out_memory[output_offset + cohort_start + cohort_index * 9 + 8] = cohort_end + cohort_index * 9 + 9 * 7; // XYZ
+         out_memory[output_offset + cohort_start + cohort_index * 9 + 1] = output_offset + cohort_end + cohort_index_from_pos(x_no_offset,              y_no_offset,              z_no_offset,              child_size, compound_grid_size) * 9; // xyz
+         out_memory[output_offset + cohort_start + cohort_index * 9 + 2] = output_offset + cohort_end + cohort_index_from_pos(x_no_offset + child_size, y_no_offset,              z_no_offset,              child_size, compound_grid_size) * 9; // Xyz
+         out_memory[output_offset + cohort_start + cohort_index * 9 + 3] = output_offset + cohort_end + cohort_index_from_pos(x_no_offset,              y_no_offset + child_size, z_no_offset,              child_size, compound_grid_size) * 9; // xYz
+         out_memory[output_offset + cohort_start + cohort_index * 9 + 4] = output_offset + cohort_end + cohort_index_from_pos(x_no_offset + child_size, y_no_offset + child_size, z_no_offset,              child_size, compound_grid_size) * 9; // XYz
+         out_memory[output_offset + cohort_start + cohort_index * 9 + 5] = output_offset + cohort_end + cohort_index_from_pos(x_no_offset,              y_no_offset,              z_no_offset + child_size, child_size, compound_grid_size) * 9; // xyZ
+         out_memory[output_offset + cohort_start + cohort_index * 9 + 6] = output_offset + cohort_end + cohort_index_from_pos(x_no_offset + child_size, y_no_offset,              z_no_offset + child_size, child_size, compound_grid_size) * 9; // XyZ
+         out_memory[output_offset + cohort_start + cohort_index * 9 + 7] = output_offset + cohort_end + cohort_index_from_pos(x_no_offset,              y_no_offset + child_size, z_no_offset + child_size, child_size, compound_grid_size) * 9; // xYZ
+         out_memory[output_offset + cohort_start + cohort_index * 9 + 8] = output_offset + cohort_end + cohort_index_from_pos(x_no_offset + child_size, y_no_offset + child_size, z_no_offset + child_size, child_size, compound_grid_size) * 9; // XYZ
 
       } else {
          // copy color values and add cubes to rendering
diff --git a/shaders/rt_compute_rasterize.comp b/shaders/rt_compute_rasterize.comp
index 67912b2..836a54c 100644
--- a/shaders/rt_compute_rasterize.comp
+++ b/shaders/rt_compute_rasterize.comp
@@ -9,7 +9,7 @@ layout(binding = 0) uniform UniformBufferObject {
     bool[16] use_geom_shader;
 } ubo;
 
-layout(binding = 3) readonly buffer SceneInfoBuffer {
+layout(binding = 3) readonly buffer CompoundBuffer {
    uint compounds[];
 };
 
@@ -175,7 +175,7 @@ void add_cube(uint cube_num, float scale, vec3 pos, vec3 color) {
 void main() {
     uint index = gl_GlobalInvocationID.x;
     uint output_offset = 0;
-    uint compound_start = 0;
+    uint compound_start = 1;
     // iterate over the compounds and find the work index inside of it
     while (index > compounds[compound_start] * compounds[compound_start]) {
         output_offset += compounds[compound_start] * compounds[compound_start] * compounds[compound_start];
diff --git a/shaders/rt_quad.frag b/shaders/rt_quad.frag
index 378ccc8..d43de76 100644
--- a/shaders/rt_quad.frag
+++ b/shaders/rt_quad.frag
@@ -24,13 +24,19 @@ layout(binding = 0) uniform UniformBufferObject {
 // 3 - diffuse raster size (float, needs to be decoded)
 // 4 - max recursive rays
 // 5 - diffuse rays per hit
+// 6 - maximum number of compounds per light
 layout(binding = 2) readonly buffer SceneInfoBuffer{
      uint infos[]; 
 } scene_info;
 
-layout(binding = 4) buffer SceneInfoBuffer2 {
-   uint infos[];
-} scene_info2;
+layout(binding = 3) readonly buffer CompoundBuffer {
+   uint compounds[];
+};
+
+layout(binding = 10) readonly buffer OctTreeMemory {
+   uint oct_tree_mem[];
+};
+
 uint max_num_lights = scene_info.infos[0];
 uint max_iterations_per_light = scene_info.infos[1];
 // diffuse raytracing using a quadratic raster of rays
@@ -41,6 +47,7 @@ float pos_infinity = uintBitsToFloat(0x7F800000);
 // set limit for maximal iterations
 uint max_iterations = max_num_lights * max_iterations_per_light * raster_points;
 uint iteration_num = 0;
+uint max_num_compounds = scene_info.infos[6];
 
 uvec4 unpack_color(uint val) {
     // left most 8 bits first
@@ -52,7 +59,7 @@ uvec4 unpack_color(uint val) {
     return uvec4(val4, val3, val2, val1);
 }
 
-uint array_descr_offset = 6 + max_num_lights;
+uint array_descr_offset = 6 + max_num_lights + max_num_compounds;
 uint color_array_offset = 24 + 1;
 
 uint sample_neighbor_from_scene_info(uint volume_start, uvec2 raster_pos, uint f) {
@@ -204,6 +211,63 @@ vec3 reflect_vector(vec3 direction, uint facing) {
     return direction - 2.0 * dot(direction, normal) * normal;
 }
 
+uvec3 parent_child_vec(uint child_size, uint child_index) {
+    if (child_index == 1) {
+        return uvec3(0, 0, 0);
+    }
+    if (child_index == 2) {
+        return uvec3(child_size, 0, 0);
+    }
+    if (child_index == 3) {
+        return uvec3(0, child_size, 0);
+    }
+    if (child_index == 4) {
+        return uvec3(child_size, child_size, 0);
+    }
+    if (child_index == 5) {
+        return uvec3(0, 0, child_size);
+    }
+    if (child_index == 6) {
+        return uvec3(child_size, 0, child_size);
+    }
+    if (child_index == 7) {
+        return uvec3(0, child_size, child_size);
+    }
+    if (child_index == 8) {
+        return uvec3(child_size, child_size, child_size);
+    }
+    return uvec3(0, 0, 0);
+}
+
+uint next_oct_tree_child(vec3 mid_point, vec3 check_pos, bool child_open[8]) {
+    if (check_pos.x <= mid_point.x && check_pos.y <= mid_point.y && check_pos.z <= mid_point.z && child_open[0]) {
+        return 1;
+    }
+    if (check_pos.x >= mid_point.x && check_pos.y <= mid_point.y && check_pos.z <= mid_point.z && child_open[1]) {
+        return 2;
+    }
+    if (check_pos.x <= mid_point.x && check_pos.y >= mid_point.y && check_pos.z <= mid_point.z && child_open[2]) {
+        return 3;
+    }
+    if (check_pos.x >= mid_point.x && check_pos.y >= mid_point.y && check_pos.z <= mid_point.z && child_open[3]) {
+        return 4;
+    }
+    if (check_pos.x <= mid_point.x && check_pos.y <= mid_point.y && check_pos.z >= mid_point.z && child_open[4]) {
+        return 5;
+    }
+    if (check_pos.x >= mid_point.x && check_pos.y <= mid_point.y && check_pos.z >= mid_point.z && child_open[5]) {
+        return 6;
+    }
+    if (check_pos.x <= mid_point.x && check_pos.y >= mid_point.y && check_pos.z >= mid_point.z && child_open[6]) {
+        return 7;
+    }
+    if (check_pos.x >= mid_point.x && check_pos.y >= mid_point.y && check_pos.z >= mid_point.z && child_open[7]) {
+        return 8;
+    }
+
+    return 0; // return to parent
+}
+
 struct Tracing {
     vec3 end_pos;
     uvec4 end_color;
@@ -259,6 +323,210 @@ Tracing trace_ray(uint volume_start, vec3 starting_pos, vec3 start_direction, fl
 
     while (iteration_num < max_iterations) {
         iteration_num ++;
+
+        uint compound_num = 0;
+        while (scene_info.infos[volume_index + 6 + max_num_lights + compound_num] != 0 && compound_num < max_num_compounds && iteration_num < max_iterations && !result.has_hit) {
+            //iteration_num ++;
+            uint compound_start = scene_info.infos[volume_index + 6 + max_num_lights + compound_num];
+            uint oct_tree_index = compounds[compound_start + 8];
+            uint compound_grid_size = compounds[compound_start];
+            float compound_scale = uintBitsToFloat(compounds[compound_start + 1]);
+            vec3 compound_pos = vec3(uintBitsToFloat(compounds[compound_start + 5]), uintBitsToFloat(compounds[compound_start + 6]), uintBitsToFloat(compounds[compound_start + 7]));
+            // check if we hit the volume
+            float x_border = compound_pos.x + float((compound_grid_size) * uint(!x_pos)) * compound_scale;
+            float y_border = compound_pos.y + float((compound_grid_size) * uint(!y_pos)) * compound_scale;
+            float z_border = compound_pos.z + float((compound_grid_size) * uint(!z_pos)) * compound_scale;
+
+            if (!x_null) {
+                x_factor = (x_border - pos.x) / direction.x;
+            } else {
+                x_factor = max_factor;
+            }
+            if (!y_null) {
+                y_factor = (y_border - pos.y) / direction.y;
+            } else {
+                y_factor = max_factor;
+            }
+            if (!z_null) {
+                z_factor = (z_border - pos.z) / direction.z;
+            } else {
+                z_factor = max_factor;
+            }
+
+            vec3 intersection_pos = pos;
+            bool is_x_hit = false;
+            bool is_y_hit = false;
+            bool is_z_hit = false;
+            bool hit_inside = false;
+            if ((compound_pos.x <= intersection_pos.x && intersection_pos.x <= compound_pos.x + float(compound_grid_size) * compound_scale) && 
+                (compound_pos.y <= intersection_pos.y && intersection_pos.y <= compound_pos.y + float(compound_grid_size) * compound_scale) && 
+                (compound_pos.z <= intersection_pos.z && intersection_pos.z <= compound_pos.z + float(compound_grid_size) * compound_scale)){
+                hit_inside = true;
+            } else {
+                vec3 intersection_pos_x = pos + x_factor * direction;
+                vec3 intersection_pos_y = pos + y_factor * direction;
+                vec3 intersection_pos_z = pos + z_factor * direction;
+                if ((compound_pos.x <= intersection_pos_x.x && intersection_pos_x.x <= compound_pos.x + float(compound_grid_size) * compound_scale) && 
+                    (compound_pos.y <= intersection_pos_x.y && intersection_pos_x.y <= compound_pos.y + float(compound_grid_size) * compound_scale) && 
+                    (compound_pos.z <= intersection_pos_x.z && intersection_pos_x.z <= compound_pos.z + float(compound_grid_size) * compound_scale) && x_factor > 0.0) {
+                    hit_inside = true;
+                    is_x_hit = true;
+                    intersection_pos = intersection_pos_x;
+                }
+                    
+                if ((compound_pos.x <= intersection_pos_y.x && intersection_pos_y.x <= compound_pos.x + float(compound_grid_size) * compound_scale) && 
+                    (compound_pos.y <= intersection_pos_y.y && intersection_pos_y.y <= compound_pos.y + float(compound_grid_size) * compound_scale) && 
+                    (compound_pos.z <= intersection_pos_y.z && intersection_pos_y.z <= compound_pos.z + float(compound_grid_size) * compound_scale) && y_factor > 0.0 && (y_factor < x_factor || !is_x_hit)) {
+                    hit_inside = true;
+                    is_y_hit = true;
+                    intersection_pos = intersection_pos_y;
+                }
+                        
+                if ((compound_pos.x <= intersection_pos_z.x && intersection_pos_z.x <= compound_pos.x + float(compound_grid_size) * compound_scale) && 
+                    (compound_pos.y <= intersection_pos_z.y && intersection_pos_z.y <= compound_pos.y + float(compound_grid_size) * compound_scale) && 
+                    (compound_pos.z <= intersection_pos_z.z && intersection_pos_z.z <= compound_pos.z + float(compound_grid_size) * compound_scale) && z_factor > 0.0 && (z_factor < x_factor || !is_x_hit) && (z_factor < y_factor || !is_y_hit)) {
+                    hit_inside = true;
+                    is_z_hit = true;
+                    intersection_pos = intersection_pos_z;
+                }
+            }
+
+            // check that either the hit is in range or we are inside of the compound from the start
+            if (hit_inside) {
+                vec3 oct_tree_pos = vec3(compound_pos);
+                uint current_size = compound_grid_size;
+                vec3 mid_point = oct_tree_pos + float(current_size / 2) * vec3(compound_scale, compound_scale, compound_scale);
+                bool children_open[8] = {true, true, true, true, true, true, true, true};
+                uint oct_tree_address = oct_tree_index;
+                // iterate through the oct_tree
+                uint check_it = 0;
+                uint prev_child = 0;
+                uint prev_prev_child = 0;
+
+                uvec3 grid_pos = uvec3(0, 0, 0);
+                uvec3 parent_pos = uvec3(0, 0, 0);
+
+                bool has_moved = false;
+                while (!result.has_hit && check_it < 60) {
+                    // failsafe to get out in case has_moved runs into an accuracy issue
+                    check_it ++;
+                    oct_tree_pos = vec3(grid_pos) * compound_scale + compound_pos;
+                    mid_point = oct_tree_pos + (float(current_size / 2) * vec3(compound_scale, compound_scale, compound_scale));
+
+                    uint child_index = next_oct_tree_child(mid_point, intersection_pos, children_open);
+                    if (child_index == 0) {
+                        // go up to parent
+                        // if parent is 0 abort, as we have reached the root node again and try to exit it
+                        if (oct_tree_mem[oct_tree_address] == 0) {
+                            break;
+                        }
+                        for (int i=0; i < 8; i++) {
+                            children_open[i] = true;
+                        }
+                        uint parent_index = oct_tree_mem[oct_tree_address];
+                        // check which child we came from
+                        child_index = 1 * uint(oct_tree_address == oct_tree_mem[parent_index + 1]) + 2 * uint(oct_tree_address == oct_tree_mem[parent_index + 2]) + 3 * uint(oct_tree_address == oct_tree_mem[parent_index + 3]) + 4 * uint(oct_tree_address == oct_tree_mem[parent_index + 4]) + 5 * uint(oct_tree_address == oct_tree_mem[parent_index + 5]) + 6 * uint(oct_tree_address == oct_tree_mem[parent_index + 6]) + 7 * uint(oct_tree_address == oct_tree_mem[parent_index + 7]) + 8 * uint(oct_tree_address == oct_tree_mem[parent_index + 8]);
+                        // mark as done to avoid reinvestigating, since intersection_pos is on its edge                        
+                        children_open[child_index - 1] = false;
+                        if (!has_moved) {
+                            for (int i=0; i < child_index; i++) {
+                                children_open[i] = false;
+                            }
+                        }
+                        prev_prev_child = prev_child;
+                        prev_child = oct_tree_address;
+
+                        uvec3 back_vec = parent_child_vec(current_size, child_index);
+                        grid_pos -= parent_child_vec(current_size, child_index);
+                        current_size *= 2;
+                        oct_tree_address = parent_index;
+                        // todo remove once parent is implemented
+                        //break;
+                    } else {
+                        // go down into child
+                        if (current_size == 2) {
+                            // check block if hit break
+                            if (oct_tree_mem[oct_tree_address + child_index] != 0) {
+                                result.has_hit = true;
+                                result.end_color = uvec4(255, 0, 0, 32);
+                                break;
+                            }                            
+                        } else {
+                            // check if the child has content, else skip to next child of current parent
+                            uint x = oct_tree_mem[oct_tree_address + child_index];
+                            if (oct_tree_mem[x] != 0) {
+                                // change base address and position to child
+                                current_size /= 2;
+                                oct_tree_address = x;
+                                grid_pos += parent_child_vec(current_size, child_index);
+                                for (int i=0; i < 8; i++) {
+                                    children_open[i] = true;
+                                }
+                                continue;
+                            }
+                        }
+                        children_open[child_index - 1] = false;
+                        
+                        // we did not go deeper or had a hit, so intersection pos needs to be updated
+                        // new intersection pos calc
+                        vec3 offset = vec3(parent_child_vec(current_size / 2, child_index)) * compound_scale;
+                        vec3 low = oct_tree_pos + offset;
+                        float x_border = low.x + float((compound_scale * current_size / 2) * uint(x_pos));
+                        float y_border = low.y + float((compound_scale * current_size / 2) * uint(y_pos));
+                        float z_border = low.z + float((compound_scale * current_size / 2) * uint(z_pos));
+
+                        if (!x_null) {
+                            x_factor = (x_border - pos.x) / direction.x;
+                        } else {
+                            x_factor = max_factor;
+                        }
+                        if (!y_null) {
+                            y_factor = (y_border - pos.y) / direction.y;
+                        } else {
+                            y_factor = max_factor;
+                        }
+                        if (!z_null) {
+                            z_factor = (z_border - pos.z) / direction.z;
+                        } else {
+                            z_factor = max_factor;
+                        }
+                        float smallest_factor = min(min(x_factor, y_factor), z_factor);
+
+                        has_moved = length(intersection_pos - (pos + smallest_factor * direction)) > 0.00001;
+                        //has_moved = intersection_pos != (pos + smallest_factor * direction);
+                        intersection_pos = pos + smallest_factor * direction;
+                    }
+                }
+
+                uint hit_facing = uint(is_x_hit) * (2 + uint(x_pos)) + uint(is_y_hit) * (4 + uint(y_pos)) + uint(is_z_hit && !z_pos);
+                //result.has_hit = true;
+                if (!has_moved) {
+                    //result.has_hit = true;
+                }
+                if (!((compound_pos.x <= intersection_pos.x && intersection_pos.x <= compound_pos.x + float(compound_grid_size) * compound_scale) && 
+                    (compound_pos.y <= intersection_pos.y && intersection_pos.y <= compound_pos.y + float(compound_grid_size) * compound_scale) && 
+                    (compound_pos.z <= intersection_pos.z && intersection_pos.z <= compound_pos.z + float(compound_grid_size) * compound_scale))) {
+                    //result.has_hit = true;
+                }
+
+                if (!((compound_pos.x <= oct_tree_pos.x && oct_tree_pos.x <= compound_pos.x + float(compound_grid_size) * compound_scale) && 
+                    (compound_pos.y <= oct_tree_pos.y && oct_tree_pos.y <= compound_pos.y + float(compound_grid_size) * compound_scale) && 
+                    (compound_pos.z <= oct_tree_pos.z && oct_tree_pos.z <= compound_pos.z + float(compound_grid_size) * compound_scale))) {
+                    //result.has_hit = true;
+                }
+                result.end_pos = intersection_pos;
+                result.end_facing = hit_facing;
+                result.end_volume = volume_index;
+                result.end_direction = direction;
+            }
+
+            compound_num += 1;
+        }
+
+        if (result.has_hit) {
+            break;
+        }
+
         float x_border = volume_pos_x + float((scene_info.infos[volume_index + 3]) * uint(x_pos)) * volume_scale - 0.5 * volume_scale;
         float y_border = volume_pos_y + float((scene_info.infos[volume_index + 4]) * uint(y_pos)) * volume_scale - 0.5 * volume_scale;
         float z_border = volume_pos_z + float((scene_info.infos[volume_index + 5]) * uint(z_pos)) * volume_scale - 0.5 * volume_scale;
@@ -267,12 +535,18 @@ Tracing trace_ray(uint volume_start, vec3 starting_pos, vec3 start_direction, fl
 
         if (!x_null) {
             x_factor = (x_border - pos.x) / direction.x;
+        } else {
+            x_factor = max_factor;
         }
         if (!y_null) {
             y_factor = (y_border - pos.y) / direction.y;
+        } else {
+            y_factor = max_factor;
         }
         if (!z_null) {
             z_factor = (z_border - pos.z) / direction.z;
+        } else {
+            z_factor = max_factor;
         }
 
         if ((x_factor >= max_factor) && (y_factor >= max_factor) && (z_factor >= max_factor)) {
@@ -515,6 +789,7 @@ void main() {
         float opacity = float(color_roughness.w) / 255.0;
         vec3 color_seen_through;
         if (t.has_hit) {
+            //color_seen_through = vec3(float(t.end_color.x) / 255.0, float(t.end_color.y) / 255.0, float(t.end_color.z) / 255.0);
             color_seen_through = diffuse_tracing(t.end_volume, t.end_raster, t.end_pos, t.end_facing) * orig_color_sample * t.color_mul;
             color_seen_through = add_reflection(t.end_direction, t.end_facing, t.end_volume, t.end_pos, t.end_color, color_seen_through);
         }
@@ -525,6 +800,8 @@ void main() {
 
         color_direct = add_reflection(normalize(clamped_pos - ubo.camera_pos), facing, fragVolumeStart, clamped_pos, color_roughness, color_direct);
         color_sum = opacity * color_direct + (1.0 - opacity) * color_seen_through;
+        
+        //color_sum = color_seen_through;
     }
     else {
         color_sum = diffuse_tracing(fragVolumeStart, clamped_raster_pos, clamped_pos, facing);
diff --git a/src/app_data.rs b/src/app_data.rs
index bfacaf4..2bfad28 100644
--- a/src/app_data.rs
+++ b/src/app_data.rs
@@ -99,6 +99,7 @@ pub struct AppData {
     pub compute_task_oct_tree_nodes: u64,
     // values passed to shader
     pub num_lights_per_volume: u32,
+    pub num_compound_per_volume: u32,
     pub min_light_weight: f32,
     pub max_iterations_per_light: u32,
     pub diffuse_raster_steps: u32,
diff --git a/src/buffer.rs b/src/buffer.rs
index c2b7572..9326b71 100644
--- a/src/buffer.rs
+++ b/src/buffer.rs
@@ -212,7 +212,7 @@ pub unsafe fn create_descriptor_set_layout(
         .binding(3)
         .descriptor_type(vk::DescriptorType::STORAGE_BUFFER)
         .descriptor_count(1)
-        .stage_flags(vk::ShaderStageFlags::COMPUTE);
+        .stage_flags(vk::ShaderStageFlags::COMPUTE | vk::ShaderStageFlags::FRAGMENT);
     
     let storage_binding_compute_out_color = vk::DescriptorSetLayoutBinding::builder()
         .binding(4)
diff --git a/src/command_buffer.rs b/src/command_buffer.rs
index 7b6289b..ae41ae1 100644
--- a/src/command_buffer.rs
+++ b/src/command_buffer.rs
@@ -85,14 +85,6 @@ pub unsafe fn create_command_buffers(device: &Device, data: &mut app_data::AppDa
                 .size(vk::WHOLE_SIZE as u64)
                 .build();
 
-            device.cmd_pipeline_barrier(*command_buffer,
-                vk::PipelineStageFlags::COMPUTE_SHADER,
-                vk::PipelineStageFlags::VERTEX_INPUT,
-                vk::DependencyFlags::DEVICE_GROUP,
-                &[] as &[vk::MemoryBarrier],
-                &[buffer_memory_barrier_index, buffer_memory_barrier_vertex],
-                &[] as &[vk::ImageMemoryBarrier]);
-
             // compute storage barrier
             let buffer_memory_barrier_color = vk::BufferMemoryBarrier::builder()
                 .buffer(data.compute_out_storage_buffers_color[i])
@@ -155,7 +147,7 @@ pub unsafe fn create_command_buffers(device: &Device, data: &mut app_data::AppDa
                 &[data.descriptor_sets[i]],
                     &[]);
             
-            device.cmd_dispatch(*command_buffer, (data.compute_task_one_size as f64 / 16.0).ceil() as u32, 1, 1);
+            device.cmd_dispatch(*command_buffer, ((data.compute_task_one_size / 2) as f64 / 16.0).ceil() as u32, 1, 1);
             
             let buffer_memory_barrier_in = vk::BufferMemoryBarrier::builder()
                 .buffer(data.compute_out_storage_buffers_size_three[i])
@@ -191,7 +183,7 @@ pub unsafe fn create_command_buffers(device: &Device, data: &mut app_data::AppDa
                 &[data.descriptor_sets[i]],
                     &[]);
             
-            device.cmd_dispatch(*command_buffer, (data.compute_task_one_size as f64 / 16.0).ceil() as u32, 1, 1);
+            device.cmd_dispatch(*command_buffer, ((data.compute_task_one_size / 2) as f64 / 16.0).ceil() as u32, 1, 1);
             
             let buffer_memory_barrier_in = vk::BufferMemoryBarrier::builder()
                 .buffer(data.compute_out_storage_buffers_size_two[i])
@@ -227,17 +219,10 @@ pub unsafe fn create_command_buffers(device: &Device, data: &mut app_data::AppDa
                 &[data.descriptor_sets[i]],
                     &[]);
             
-            device.cmd_dispatch(*command_buffer, data.compute_task_oct_tree_nodes as u32, 1, 1);
-            
-            let buffer_memory_barrier_in = vk::BufferMemoryBarrier::builder()
-                .buffer(data.compute_out_storage_buffers_size_three[i])
-                .src_access_mask(vk::AccessFlags::SHADER_READ)
-                .dst_access_mask(vk::AccessFlags::SHADER_WRITE)
-                .size(vk::WHOLE_SIZE as u64)
-                .build();
+            device.cmd_dispatch(*command_buffer, (data.compute_task_oct_tree_nodes as f64 / 16.0).ceil() as u32, 1, 1);
 
             let buffer_memory_barrier_out = vk::BufferMemoryBarrier::builder()
-                .buffer(data.compute_out_storage_buffers_size_two[i])
+                .buffer(data.compute_out_storage_buffers_oct_tree[i])
                 .src_access_mask(vk::AccessFlags::SHADER_WRITE)
                 .dst_access_mask(vk::AccessFlags::SHADER_READ)
                 .size(vk::WHOLE_SIZE as u64)
@@ -245,10 +230,18 @@ pub unsafe fn create_command_buffers(device: &Device, data: &mut app_data::AppDa
 
             device.cmd_pipeline_barrier(*command_buffer,
                 vk::PipelineStageFlags::COMPUTE_SHADER,
-                vk::PipelineStageFlags::COMPUTE_SHADER,
+                vk::PipelineStageFlags::FRAGMENT_SHADER,
                 vk::DependencyFlags::DEVICE_GROUP,
                 &[] as &[vk::MemoryBarrier],
-                &[buffer_memory_barrier_in, buffer_memory_barrier_out],
+                &[buffer_memory_barrier_out],
+                &[] as &[vk::ImageMemoryBarrier]);
+
+            device.cmd_pipeline_barrier(*command_buffer,
+                vk::PipelineStageFlags::COMPUTE_SHADER,
+                vk::PipelineStageFlags::VERTEX_INPUT,
+                vk::DependencyFlags::DEVICE_GROUP,
+                &[] as &[vk::MemoryBarrier],
+                &[buffer_memory_barrier_index, buffer_memory_barrier_vertex],
                 &[] as &[vk::ImageMemoryBarrier]);
         }
         // start render pass
diff --git a/src/main.rs b/src/main.rs
index d5905b4..9c525e7 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -195,6 +195,7 @@ impl App {
         let mut data = app_data::AppData::default();
         data.use_geometry_shader = false;
         data.num_lights_per_volume = 5;
+        data.num_compound_per_volume = 5;
         data.min_light_weight = 0.0001;
         data.max_iterations_per_light = 20;
         data.diffuse_raster_steps = 0;
@@ -281,7 +282,7 @@ impl App {
 
         self.update_uniform_buffer(image_index)?;
         let time = self.appstart.elapsed().as_secs_f32() / 1.0;
-        self.scene_handler.point_lights[0].borrow_mut().set_pos(cgmath::vec3((10.0 + 64.0) as f32 + time.sin() * 2.0, (10.0 + 64.0) as f32 + time.cos() * 2.0, 11.0));
+        //self.scene_handler.point_lights[0].borrow_mut().set_pos(cgmath::vec3((10.0 + 64.0) as f32 + time.sin() * 2.0, (10.0 + 64.0) as f32 + time.cos() * 2.0, 11.0));
         self.synchronized = 0;
 
         if self.synchronized < MAX_FRAMES_IN_FLIGHT {
diff --git a/src/scene/empty_volume.rs b/src/scene/empty_volume.rs
index 36e3a1f..00ee843 100644
--- a/src/scene/empty_volume.rs
+++ b/src/scene/empty_volume.rs
@@ -13,6 +13,7 @@ use crate::scene::oct_tree::OctTree;
 use super::memorizable::Memorizable;
 use super::light::LightSource;
 use super::light::PointLight;
+use super::volumetrics::ShapeComposition;
 use super::AppData;
 use super::LightsIter;
 use super::Scene;
@@ -1063,10 +1064,10 @@ impl EmptyVolume {
 
         let mut out_index = vec![];
         for index in 0..weighted_indices.len() {
-            out_index.push(weighted_indices[weighted_indices.len() - (index + 1)].1 as u32);
             if out_index.len() == light_number as usize {
                 break;
             }
+            out_index.push(weighted_indices[weighted_indices.len() - (index + 1)].1 as u32);
         }
         while out_index.len() < light_number as usize {
             out_index.push(0);
@@ -1074,6 +1075,31 @@ impl EmptyVolume {
         out_index
     }
 
+    pub fn select_compounds(&self, compounds: &Vec<Rc<RefCell<ShapeComposition>>>, compound_number: u32) -> Vec<u32> {
+        let mut weighted_indices = vec![];
+        for compound in compounds {
+            let bbox_low = compound.borrow().bbox_low;
+            let bbox_high = compound.borrow().bbox_high;
+            let diag = bbox_high - bbox_low;
+            if (self.real_position.x < bbox_high.x || self.real_position.y < bbox_high.y || self.real_position.z < bbox_high.z) && (bbox_low.x < self.real_position.x + self.size_x as f32 || bbox_low.y < self.real_position.y + self.size_y as f32 || bbox_low.z < self.real_position.z + self.size_z as f32) {
+                let le = diag.dot(diag);
+                weighted_indices.push((le, compound.borrow().get_memory_start()));
+            }
+        }
+        weighted_indices.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap());
+        let mut out_index = vec![];
+        for index in 0..weighted_indices.len() {
+            if out_index.len() == compound_number as usize {
+                break;
+            }
+            out_index.push(weighted_indices[weighted_indices.len() - (index + 1)].1 as u32);
+        }
+        while out_index.len() < compound_number as usize {
+            out_index.push(0);
+        }
+        out_index
+    }
+
     pub fn combine_results(first: &Rc<RefCell<OctTree<Cube>>>,first_neighbors: &Rc<OctTree<Rc<RefCell<EmptyVolume>>>>, second: &Rc<RefCell<OctTree<Cube>>>, second_neighbors: &Rc<OctTree<Rc<RefCell<EmptyVolume>>>>, facing: vertex::Facing) {
         let mut first_start;
         let mut second_start;
@@ -1261,6 +1287,7 @@ impl Memorizable for EmptyVolume {
         mem_size += 12; //color/roughness buffer sizes, 2 values each
         mem_size += 12; //neighbor buffer sizes, 2 values each
         mem_size += 1; //scale of the volume, 1 float
+        mem_size += data.num_compound_per_volume; // compound references
 
         // this covers full color and roughness
         mem_size += (self.color_top.len() as u32).max(1);
@@ -1296,12 +1323,20 @@ impl Memorizable for EmptyVolume {
         mem_index += 1;
         v[mem_index] = self.size_z as u32;
         mem_index += 1;
-        //Todo: insert lights
+        //insert lights
         let selected_lights = self.select_lights(scene.get_light_iter(), data.num_lights_per_volume, data.min_light_weight);
         for light in selected_lights {
             v[mem_index] = light;
             mem_index += 1;
         }
+
+        // compound references
+        let selected_compounds = self.select_compounds(&scene.volumetrics, data.num_compound_per_volume);
+        for compound in selected_compounds {
+            v[mem_index] = compound;
+            mem_index += 1;
+        }
+
         //color/roughness buffer sizes, 2 values each
         if self.color_top.len() > 1 {
             v[mem_index] = self.size_x as u32;
diff --git a/src/scene/generators.rs b/src/scene/generators.rs
index c628790..a1a4a89 100644
--- a/src/scene/generators.rs
+++ b/src/scene/generators.rs
@@ -57,7 +57,7 @@ pub fn generate_test_scene(scene: &mut Scene, data: &mut AppData) -> Result<(Poi
     let shade = (rng.gen_range(0..25) as f32) / 100.0;
     let cube = Cube {
         pos: vec3(10.0, 10.0, 10.0),
-        color: vec3(0.0, 0.0, 0.9),
+        color: vec3(0.9, 0.9, 0.9),
         tex_coord: vec2(0.0, 0.0),
         transparent: true,
         roughness: 32,
@@ -66,7 +66,7 @@ pub fn generate_test_scene(scene: &mut Scene, data: &mut AppData) -> Result<(Poi
 
     let cube = Cube {
         pos: vec3(10.0, 10.0, 9.0),
-        color: vec3(0.0, 0.0, 0.9),
+        color: vec3(0.9, 0.9, 0.9),
         tex_coord: vec2(0.0, 0.0),
         transparent: true,
         roughness: 32,
@@ -93,7 +93,7 @@ pub fn generate_test_scene(scene: &mut Scene, data: &mut AppData) -> Result<(Poi
     oct_tree2.set_cube(cube.clone());
 
     scene.point_lights.push(Rc::new(RefCell::new(PointLight::init(vec3(11.0 + grid_size as f32, 11.0 + grid_size as f32, 11.0) * scale, vec3(2.0, 2.0, 2.0)))));
-    scene.point_lights.push(Rc::new(RefCell::new(PointLight::init(vec3(9.0 + grid_size as f32, 9.0 + grid_size as f32, 11.0) * scale, vec3(0.5, 0.5, 0.5)))));
+    //scene.point_lights.push(Rc::new(RefCell::new(PointLight::init(vec3(9.0 + grid_size as f32, 9.0 + grid_size as f32, 11.0) * scale, vec3(0.5, 0.5, 0.5)))));
     scene.directional_lights.push(Rc::new(RefCell::new(DirectionalLight::init(vec3(1.0, 1.0, -1.0), vec3(0.1, 0.1, 0.1)))));
 
     let cube = Cuboid {
@@ -112,13 +112,16 @@ pub fn generate_test_scene(scene: &mut Scene, data: &mut AppData) -> Result<(Poi
         size: Vector3 {x: 0.5, y: 0.5, z: 0.5} * scale
     };
     let index = scene.sized_vertices.len();
-    cube.draw(&data.topology, index, scene);
+    //cube.draw(&data.topology, index, scene);
 
     let tree_ref_one = Rc::new(RefCell::new(oct_tree1.clone()));
     let tree_ref_two = Rc::new(RefCell::new(oct_tree2.clone()));
     scene.oct_trees = vec![vec![vec![tree_ref_two.clone(), tree_ref_two.clone(), tree_ref_two.clone()], vec![tree_ref_two.clone(), tree_ref_one.clone(), tree_ref_two.clone()], vec![tree_ref_two.clone(), tree_ref_two.clone(), tree_ref_two.clone()]], vec![vec![tree_ref_two.clone(), tree_ref_two.clone(), tree_ref_two.clone()], vec![tree_ref_two.clone(), tree_ref_one.clone(), tree_ref_two.clone()], vec![tree_ref_two.clone(), tree_ref_two.clone(), tree_ref_two.clone()]]];
+    //scene.oct_trees = vec![vec![vec![tree_ref_two.clone(), tree_ref_two.clone(), tree_ref_two.clone()], vec![tree_ref_two.clone(), tree_ref_one.clone(), tree_ref_two.clone()], vec![tree_ref_two.clone(), tree_ref_two.clone(), tree_ref_two.clone()]]];
 
     let mut comp = ShapeComposition::new(64);
+    //comp.included_shapes.push(Rc::new(RefCell::new(Rect::new(Vector3 { x: 5.0 + grid_size as f32, y: 5.0 + grid_size as f32, z: 10.0 }, Vector3 { x: 0.0, y: 0.0, z: 0.0 }, Vector3 { x: 5.0, y: 5.0, z: 5.0 },Vector3 { x: 0, y: 0, z: 255 }, 64, false))));
+
     comp.included_shapes.push(Rc::new(RefCell::new(Sphere::new(Vector3 { x: 5.0 + grid_size as f32, y: 5.0 + grid_size as f32, z: 10.0 }, Vector3 { x: 0.0, y: 0.0, z: 0.0 }, 2.0, Vector3 { x: 0, y: 255, z: 0 }, 64, false))));
     comp.included_shapes.push(Rc::new(RefCell::new(Sphere::new(Vector3 { x: 5.0 + grid_size as f32, y: 5.0 + grid_size as f32, z: 10.0 }, Vector3 { x: 0.0, y: 0.0, z: 0.0 }, 2.5, Vector3 { x: 255, y: 0, z: 0 }, 64, false))));
     comp.excluded_shapes.push(Rc::new(RefCell::new(Sphere::new(Vector3 { x: 5.0 + grid_size as f32, y: 5.0 + grid_size as f32, z: 11.5 }, Vector3 { x: 0.0, y: 0.0, z: 0.0 }, 1.5, Vector3 { x: 0, y: 255, z: 0 }, 64, false))));    
diff --git a/src/scene/mod.rs b/src/scene/mod.rs
index 924bed0..395271d 100644
--- a/src/scene/mod.rs
+++ b/src/scene/mod.rs
@@ -181,49 +181,25 @@ impl Scene {
 
     pub fn update_memory(&mut self, data: &mut AppData, reuse_memory: bool) {
         // reuse_memory controls whether a fresh data vector is created or the existing one is used if it is the right size
-        let mut memory_index = 6; 
+        let mut memory_index = 7; 
         // 0 - location for the maximum number of lights referenced per chunk (also will be the invalid memory allocation for pointing to a nonexistant neighbor)
         // 1 - location for the max iterations per light
         // 2 - diffuse raster samples (2*n + 1) * (2*n + 1) so as to always have at least the central fragment covered
         // 3 - diffuse raster size
         // 4 - max recursive rays
         // 5 - diffuse rays per hit
+        // 6 - maximum number of compounds per light
         for memorizable in &self.memorizables {
             memorizable.borrow_mut().set_memory_start(memory_index);
             memory_index += memorizable.borrow_mut().get_buffer_mem_size(data) as usize;
         }
 
-        //println!("Memory size is {} kB, max indes is {}", memory_index * 32 / 8 /1024 + 1, memory_index);
-        let mut volume_vec;
-        let needs_overwrite;
-        if !reuse_memory || memory_index != self.rt_memory.len() {
-            volume_vec = vec![data.num_lights_per_volume; memory_index];
-            needs_overwrite = true;
-        } else {
-            needs_overwrite = false;
-            volume_vec = self.rt_memory.clone();
-        }
-        volume_vec[1] = data.max_iterations_per_light;
-        volume_vec[2] = data.diffuse_raster_steps;
-        volume_vec[3] = u32::from_ne_bytes(data.diffuse_raster_size.to_ne_bytes());
-        volume_vec[4] = data.max_recursive_rays;
-        volume_vec[5] = data.diffuse_rays_per_hit;
-        
-        for memorizable in &self.memorizables {
-            if needs_overwrite || memorizable.borrow().is_dirty() {
-                volume_vec = memorizable.borrow_mut().insert_into_memory(volume_vec, data, &self);
-            }
-        }
-
-        self.rt_memory = volume_vec;
-        data.scene_rt_memory_size = (self.rt_memory.len() * 4) as u64; // size of the needed buffer size in bytes
-
-        let mut data_len = 0;
+        let mut compound_data_len = 1;
         for compound in &self.volumetrics {
-            compound.borrow_mut().set_memory_start(data_len);
-            data_len += compound.borrow().get_compound_buffer_mem_size(data) as usize;
+            compound.borrow_mut().set_memory_start(compound_data_len);
+            compound_data_len += compound.borrow().get_compound_buffer_mem_size(data) as usize;
         }
-        let mut volumetrics_memory = vec![0; data_len];
+        let mut volumetrics_memory = vec![compound_data_len as u32; compound_data_len];
 
         let mut compute_task_one_size = 0;
         let mut compute_task_one_out_size = 0;
@@ -238,13 +214,40 @@ impl Scene {
             compute_task_one_out_size += compound.borrow().size.pow(3) as usize;
         }
 
+        //println!("Memory size is {} kB, max indes is {}", memory_index * 32 / 8 /1024 + 1, memory_index);
+        let mut volume_vec;
+        let needs_overwrite;
+        if !reuse_memory || memory_index != self.rt_memory.len() {
+            volume_vec = vec![data.num_lights_per_volume; memory_index];
+            needs_overwrite = true;
+        } else {
+            needs_overwrite = false;
+            volume_vec = self.rt_memory.clone();
+        }
+        volume_vec[0] = data.num_lights_per_volume;
+        volume_vec[1] = data.max_iterations_per_light;
+        volume_vec[2] = data.diffuse_raster_steps;
+        volume_vec[3] = u32::from_ne_bytes(data.diffuse_raster_size.to_ne_bytes());
+        volume_vec[4] = data.max_recursive_rays;
+        volume_vec[5] = data.diffuse_rays_per_hit;
+        volume_vec[6] = data.num_compound_per_volume;
+        
+        for memorizable in &self.memorizables {
+            if needs_overwrite || memorizable.borrow().is_dirty() {
+                volume_vec = memorizable.borrow_mut().insert_into_memory(volume_vec, data, &self);
+            }
+        }
+
+        self.rt_memory = volume_vec;
+        data.scene_rt_memory_size = (self.rt_memory.len() * 4) as u64; // size of the needed buffer size in bytes
+
         self.volumetrics_memory = volumetrics_memory;
         data.scene_rt_volumetric_size = (self.volumetrics_memory.len() * 4) as u64; // size of the needed buffer size in bytes
         data.compute_task_one_size = compute_task_one_size;
         data.compute_task_one_out_buffer_size = (compute_task_one_out_size * 4) as u64;
         data.compute_task_one_out_size = compute_task_one_out_size as u64;
         data.compute_task_oct_tree_size = target_index as u64;
-        data.compute_task_oct_tree_nodes = node_count as u64;
+        data.compute_task_oct_tree_nodes = (node_count) as u64;
     }
 
     pub unsafe fn destroy(&mut self, device: &vulkanalia::Device) {
diff --git a/src/scene/volumetrics/mod.rs b/src/scene/volumetrics/mod.rs
index 8797cc3..cf72f67 100644
--- a/src/scene/volumetrics/mod.rs
+++ b/src/scene/volumetrics/mod.rs
@@ -37,11 +37,13 @@ pub struct ShapeComposition {
     pub included_shapes: Vec<Rc<RefCell<dyn Volumetrics>>>,
     pub excluded_shapes: Vec<Rc<RefCell<dyn Volumetrics>>>,
     dirty: bool,
+    pub bbox_low: Vector3<f32>,
+    pub bbox_high: Vector3<f32>,
 }
 
 impl ShapeComposition {
     pub fn new(size: u32) -> Self {
-        Self { memory_start: 0, target_memory_start: 0, prev_memory_size: 0, size: size, included_shapes: vec![], excluded_shapes: vec![], dirty: true }
+        Self { memory_start: 0, target_memory_start: 0, prev_memory_size: 0, size: size, included_shapes: vec![], excluded_shapes: vec![], dirty: true, bbox_low: Vector3 { x: 0.0, y: 0.0, z: 0.0 }, bbox_high: Vector3 { x: 0.0, y: 0.0, z: 0.0 } }
     }
 }
 
@@ -61,7 +63,7 @@ impl CompoundMemorizable for ShapeComposition {
 
 impl Memorizable for ShapeComposition {
     fn get_buffer_mem_size(&self, data: &AppData) -> u32 {
-        //size, scale, memory_end, num_included, num_excluded, pos, wrapping address, included_address, excluded_address
+        //size, scale, memory_end, num_included, num_excluded, pos, target address, included_address, excluded_address
         1 + 1 + 1 + 1 + 1 + 3 + 1 + self.included_shapes.len() as u32 + self.excluded_shapes.len() as u32
     }
 
@@ -118,6 +120,8 @@ impl Memorizable for ShapeComposition {
         }
 
         let bbox_high_pos_ind = bbox_high - bbox_low;
+        self.bbox_low = bbox_low;
+        self.bbox_high = bbox_high;
         let scale = bbox_high_pos_ind.x.max(bbox_high_pos_ind.y.max(bbox_high_pos_ind.z)) / (self.size as f32);
 
         v[self.memory_start + 1] = u32::from_ne_bytes(scale.to_ne_bytes());
@@ -127,7 +131,7 @@ impl Memorizable for ShapeComposition {
         v[self.memory_start + 5] = u32::from_ne_bytes(bbox_low.x.to_ne_bytes());
         v[self.memory_start + 6] = u32::from_ne_bytes(bbox_low.y.to_ne_bytes());
         v[self.memory_start + 7] = u32::from_ne_bytes(bbox_low.z.to_ne_bytes());
-        v[self.memory_start + 8] = 0; //TODO add wrapping reference
+        v[self.memory_start + 8] = self.target_memory_start as u32;
 
         self.prev_memory_size = self.get_compound_buffer_mem_size(data);
         self.dirty = false;
@@ -153,7 +157,6 @@ impl ShapeComposition {
             add_size *= 8;
             size /= 2;
         }
-
         nodes
     }