diff options
Diffstat (limited to 'cnn_v3')
| -rw-r--r-- | cnn_v3/shaders/gbuf_raster.wgsl | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/cnn_v3/shaders/gbuf_raster.wgsl b/cnn_v3/shaders/gbuf_raster.wgsl index fa2dfd5..aed0e72 100644 --- a/cnn_v3/shaders/gbuf_raster.wgsl +++ b/cnn_v3/shaders/gbuf_raster.wgsl @@ -5,6 +5,7 @@ #include "common_uniforms" #include "math/normal" +#include "ray_sphere" @group(0) @binding(0) var<uniform> globals: GlobalUniforms; @group(0) @binding(1) var<storage, read> object_data: ObjectsBuffer; @@ -93,14 +94,9 @@ fn fs_main(in: VertexOutput) -> GBufOutput { let sphere_radius = length(obj.model[0].xyz); // uniform scale in col0 let cam_pos = globals.camera_pos_time.xyz; let rd = normalize(in.world_pos - cam_pos); - let oc = cam_pos - sphere_center; - let b = dot(oc, rd); - let c = dot(oc, oc) - sphere_radius * sphere_radius; - let disc = b * b - c; - if (disc < 0.0) { discard; } - let t = -b - sqrt(disc); - if (t < 0.0) { discard; } - let hit = cam_pos + rd * t; + let isect = ray_sphere_intersection(cam_pos, rd, sphere_center, sphere_radius); + if (!isect.hit) { discard; } + let hit = cam_pos + rd * isect.t; world_normal = normalize(hit - sphere_center); // Reproject hit point to get correct clip-space depth. let clip_hit = globals.view_proj * vec4f(hit, 1.0); |
