From dcda41b1867fbd41ca57ae300833477acb535353 Mon Sep 17 00:00:00 2001 From: TheRedShip Date: Mon, 6 Jan 2025 10:17:22 +0100 Subject: [PATCH] * | Saving for changement --- shaders/compute.glsl | 21 ++------------------- shaders/scatter.glsl | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 19 deletions(-) create mode 100644 shaders/scatter.glsl diff --git a/shaders/compute.glsl b/shaders/compute.glsl index 4bc63dd..4f44f37 100644 --- a/shaders/compute.glsl +++ b/shaders/compute.glsl @@ -49,6 +49,7 @@ struct hitInfo #include "shaders/random.glsl" #include "shaders/intersect.glsl" +#include "shaders/scatter.glsl" hitInfo traceRay(Ray ray) { @@ -73,24 +74,6 @@ hitInfo traceRay(Ray ray) return (hit); } -Ray newRay(hitInfo hit, Ray ray, inout uint rng_state) -{ - GPUObject obj; - Ray new_ray; - - obj = objects[hit.obj_index]; - - vec3 diffuse_dir = normalize(hit.normal + randomDirection(rng_state)); - vec3 specular_dir = reflect(ray.direction, hit.normal); - - bool is_specular = (obj.metallic >= randomValue(rng_state)); - - new_ray.origin = hit.position + hit.normal * 0.001; - new_ray.direction = mix(diffuse_dir, specular_dir, obj.roughness * float(is_specular)); - - return (new_ray); -} - vec3 pathtrace(Ray ray, inout uint rng_state) { vec3 color = vec3(1.0); @@ -98,7 +81,7 @@ vec3 pathtrace(Ray ray, inout uint rng_state) float closest_t = 1e30; - for (int i = 0; i < 10; i++) + for (int i = 0; i < 5; i++) { hitInfo hit = traceRay(ray); if (hit.obj_index == -1) diff --git a/shaders/scatter.glsl b/shaders/scatter.glsl new file mode 100644 index 0000000..2814668 --- /dev/null +++ b/shaders/scatter.glsl @@ -0,0 +1,18 @@ + +Ray newRay(hitInfo hit, Ray ray, inout uint rng_state) +{ + GPUObject obj; + Ray new_ray; + + obj = objects[hit.obj_index]; + + vec3 diffuse_dir = normalize(hit.normal + randomDirection(rng_state)); + vec3 specular_dir = reflect(ray.direction, hit.normal); + + bool is_specular = (obj.metallic >= randomValue(rng_state)); + + new_ray.origin = hit.position + hit.normal * 0.001; + new_ray.direction = mix(diffuse_dir, specular_dir, obj.roughness * float(is_specular)); + + return (new_ray); +} \ No newline at end of file