From 4a6dde4535d6b3787627f785d0c7d1b6f16d5701 Mon Sep 17 00:00:00 2001
From: zomseffen <steffen@tom.bi>
Date: Fri, 7 Feb 2025 12:19:48 +0100
Subject: [PATCH] reflection for transparent objects

---
 shaders/compiled/frag_rt_quad.spv | Bin 41856 -> 43712 bytes
 shaders/rt_quad.frag              |  34 +++++++++++++++++++++---------
 2 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/shaders/compiled/frag_rt_quad.spv b/shaders/compiled/frag_rt_quad.spv
index e329b50f31dd8c87aa00603e4e73614fdc96349b..8b8614a0b3ce271441a2226b28ab4daaee5436e2 100644
GIT binary patch
literal 43712
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

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

diff --git a/shaders/rt_quad.frag b/shaders/rt_quad.frag
index 9fd62a9..7094bd4 100644
--- a/shaders/rt_quad.frag
+++ b/shaders/rt_quad.frag
@@ -31,6 +31,7 @@ uint max_iterations_per_light = scene_info.infos[1];
 int half_diffuse_raster_steps = int(scene_info.infos[2]);
 float raster_distance = uintBitsToFloat(scene_info.infos[3]);
 int raster_points = (2 * half_diffuse_raster_steps + 1) * (2 * half_diffuse_raster_steps + 1);
+float pos_infinity = uintBitsToFloat(0x7F800000);
 
 uvec4 unpack_color(uint val) {
     // left most 8 bits first
@@ -194,6 +195,7 @@ struct Tracing {
     vec3 color_mul;
     uvec2 end_raster;
 
+    vec3 end_direction;
     bool has_transparent_hit;
 };
 
@@ -303,6 +305,7 @@ Tracing trace_ray(uint volume_start, vec3 starting_pos, vec3 start_direction, fl
                     result.color_mul = result.color_mul * vec3(float(color_sample.x) / 255.0, float(color_sample.y) / 255.0, float(color_sample.z) / 255.0);
                     result.has_transparent_hit = true;
                     result.end_volume = volume_index;
+                    result.end_direction = direction;
 
                     end_color_transparent = color_sample;
                     end_raster_transparent = uvec2(u, v);
@@ -321,6 +324,7 @@ Tracing trace_ray(uint volume_start, vec3 starting_pos, vec3 start_direction, fl
                     result.end_raster = uvec2(u, v);
                     result.has_hit = true;
                     result.end_volume = volume_index;
+                    result.end_direction = direction;
 
                     float reflectivity = 1.0 - float(color_sample.w) / 255.0;
                     vec3 refltective_color_mul = result.color_mul * vec3(float(color_sample.x) / 255.0, float(color_sample.y) / 255.0, float(color_sample.z) / 255.0);
@@ -440,6 +444,20 @@ vec3 clamp_to_volume(uint volume_start, vec3 position) {
     return vec3(min(max(position.x, low_x_border), high_x_border), min(max(position.y, low_y_border), high_y_border), min(max(position.z, low_z_border), high_z_border));
 }
 
+vec3 add_reflection(vec3 view_vector, uint f, uint volume_start, vec3 pos, uvec4 color_sample, vec3 color_sum) {
+    vec3 orig_color_sample = vec3(float(color_sample.x) / 255.0, float(color_sample.y) / 255.0, float(color_sample.z) / 255.0);
+
+    vec3 reflection_direction = reflect_vector(view_vector, f);
+    Tracing reflection_tracing = trace_ray(volume_start, pos, reflection_direction, pos_infinity, 0, max_iterations_per_light, true);
+    float reflectivity = 1.0 - float(color_sample.w) / 255.0;
+    if (reflection_tracing.has_hit || reflection_tracing.has_transparent_hit) {
+        vec3 color_from_reflection = diffuse_tracing(reflection_tracing.end_volume, reflection_tracing.end_raster, reflection_tracing.end_pos, reflection_tracing.end_facing) * orig_color_sample;
+        color_sum = color_sum * (1.0 - reflectivity) + color_from_reflection * reflectivity;
+    }
+
+    return color_sum;
+}
+
 void main() {
     vec3 clamped_pos = clamp_to_volume(fragVolumeStart, origPosition);
     uvec4 color_roughness = sample_color_from_scene_info(fragVolumeStart, fragRasterPos, facing);
@@ -447,31 +465,27 @@ void main() {
     vec3 color_sum;
 
     uint orig_neighbor = sample_neighbor_from_scene_info(fragVolumeStart, fragRasterPos, facing);
-    float pos_infinity = uintBitsToFloat(0x7F800000);
     if (orig_neighbor != 0) {
+        vec3 color_direct = diffuse_tracing(fragVolumeStart, fragRasterPos, clamped_pos, facing);
+        color_direct = add_reflection(normalize(clamped_pos - ubo.camera_pos), facing, fragVolumeStart, clamped_pos, color_roughness, color_direct);
+
         Tracing t = trace_ray(fragVolumeStart, ubo.camera_pos, clamped_pos - ubo.camera_pos, pos_infinity, 0, max_iterations_per_light, false);
         float opacity = float(color_roughness.w) / 255.0;
         if (t.has_hit) {
             vec3 color_seen_through = diffuse_tracing(t.end_volume, t.end_raster, t.end_pos, t.end_facing) * orig_color_sample * t.color_mul;
-            vec3 color_direct = diffuse_tracing(fragVolumeStart, fragRasterPos, clamped_pos, facing);
+            color_seen_through = add_reflection(t.end_direction, t.end_facing, t.end_volume, t.end_pos, t.end_color, color_seen_through);
+
             color_sum = opacity * color_direct + (1.0 - opacity) * color_seen_through;
         }
         else {
             // Todo: hit sky box
-            vec3 color_direct = diffuse_tracing(fragVolumeStart, fragRasterPos, clamped_pos, facing);
             color_sum = opacity * color_direct + (1.0 - opacity) * vec3(0.0, 0.0, 0.0);
         }
     }
     else {
         color_sum = diffuse_tracing(fragVolumeStart, fragRasterPos, clamped_pos, facing);
 
-        vec3 reflection_direction = reflect_vector(normalize(clamped_pos - ubo.camera_pos), facing);
-        Tracing reflection_tracing = trace_ray(fragVolumeStart, clamped_pos, reflection_direction, pos_infinity, 0, max_iterations_per_light, true);
-        float reflectivity = 1.0 - float(color_roughness.w) / 255.0;
-        if (reflection_tracing.has_hit || reflection_tracing.has_transparent_hit) {
-            vec3 color_from_reflection = diffuse_tracing(reflection_tracing.end_volume, reflection_tracing.end_raster, reflection_tracing.end_pos, reflection_tracing.end_facing) * orig_color_sample;
-            color_sum = color_sum * (1.0 - reflectivity) + color_from_reflection * reflectivity;
-        }
+        color_sum = add_reflection(normalize(clamped_pos - ubo.camera_pos), facing, fragVolumeStart, clamped_pos, color_roughness, color_sum);
     }
 
     outColor = vec4(color_sum, 1.0);