summaryrefslogtreecommitdiff
path: root/common/shaders/render
diff options
context:
space:
mode:
Diffstat (limited to 'common/shaders/render')
-rw-r--r--common/shaders/render/fullscreen_uv_vs.wgsl15
-rw-r--r--common/shaders/render/fullscreen_vs.wgsl10
-rw-r--r--common/shaders/render/lighting_utils.wgsl6
-rw-r--r--common/shaders/render/raymarching.wgsl66
-rw-r--r--common/shaders/render/raymarching_id.wgsl83
-rw-r--r--common/shaders/render/scene_query_bvh.wgsl67
-rw-r--r--common/shaders/render/scene_query_linear.wgsl56
-rw-r--r--common/shaders/render/shadows.wgsl13
8 files changed, 0 insertions, 316 deletions
diff --git a/common/shaders/render/fullscreen_uv_vs.wgsl b/common/shaders/render/fullscreen_uv_vs.wgsl
deleted file mode 100644
index f9ae427..0000000
--- a/common/shaders/render/fullscreen_uv_vs.wgsl
+++ /dev/null
@@ -1,15 +0,0 @@
-// Common vertex shader for fullscreen post-processing effects.
-// Draws a single triangle that covers the entire screen, with uv
-// coordinates in [0..1]
-struct VertexOutput {
- @builtin(position) position: vec4f,
- @location(0) uv: vec2f,
-};
-
-@vertex fn vs_main(@builtin(vertex_index) i: u32) -> VertexOutput {
- let pos = array<vec4f, 3>(vec4f(-1, -1, 0, 1.), vec4f(3, -1, 2., 1.), vec4f(-1, 3, 0, -1));
- var out: VertexOutput;
- out.position = vec4f(pos[i].xy, 0.0, 1.0);
- out.uv = pos[i].zw;
- return out;
-}
diff --git a/common/shaders/render/fullscreen_vs.wgsl b/common/shaders/render/fullscreen_vs.wgsl
deleted file mode 100644
index 507b892..0000000
--- a/common/shaders/render/fullscreen_vs.wgsl
+++ /dev/null
@@ -1,10 +0,0 @@
-// Common vertex shader for fullscreen post-processing effects.
-// Draws a single triangle that covers the entire screen.
-@vertex fn vs_main(@builtin(vertex_index) i: u32) -> @builtin(position) vec4f {
- var pos = array<vec2f, 3>(
- vec2f(-1, -1),
- vec2f( 3, -1),
- vec2f(-1, 3)
- );
- return vec4f(pos[i], 0.0, 1.0);
-}
diff --git a/common/shaders/render/lighting_utils.wgsl b/common/shaders/render/lighting_utils.wgsl
deleted file mode 100644
index f805860..0000000
--- a/common/shaders/render/lighting_utils.wgsl
+++ /dev/null
@@ -1,6 +0,0 @@
-fn calculate_lighting(color: vec3f, normal: vec3f, pos: vec3f, shadow: f32) -> vec3f {
- let light_dir = normalize(vec3f(1.0, 1.0, 1.0));
- let diffuse = max(dot(normal, light_dir), 0.0);
- let lighting = diffuse * (0.1 + 0.9 * shadow) + 0.1; // Ambient + Shadowed Diffuse
- return color * lighting;
-}
diff --git a/common/shaders/render/raymarching.wgsl b/common/shaders/render/raymarching.wgsl
deleted file mode 100644
index 2d6616d..0000000
--- a/common/shaders/render/raymarching.wgsl
+++ /dev/null
@@ -1,66 +0,0 @@
-// Common functions for Signed Distance Field (SDF) raymarching.
-//
-// Required user-defined functions:
-// - df(vec3f) -> f32
-// Distance field for single-pass rendering (rayMarch, normal, shadow)
-//
-// For two-pass rendering with object IDs, see raymarching_id.wgsl
-//
-// Provided constants:
-// TOLERANCE, MAX_RAY_LENGTH, MAX_RAY_MARCHES, NORM_OFF
-
-const TOLERANCE: f32 = 0.0005;
-const MAX_RAY_LENGTH: f32 = 20.0;
-const MAX_RAY_MARCHES: i32 = 80;
-const NORM_OFF: f32 = 0.005;
-
-// Computes the surface normal of the distance field at a point `pos`.
-fn normal(pos: vec3f) -> vec3f {
- let eps = vec2f(NORM_OFF, 0.0);
- var nor: vec3f;
- nor.x = df(pos + eps.xyy) - df(pos - eps.xyy);
- nor.y = df(pos + eps.yxy) - df(pos - eps.yxy);
- nor.z = df(pos + eps.yyx) - df(pos - eps.yyx);
- return normalize(nor);
-}
-
-// Performs the raymarching operation.
-// Returns the distance along the ray to the surface, or MAX_RAY_LENGTH if no surface is hit.
-fn rayMarch(ro: vec3f, rd: vec3f, tmin: f32) -> f32 {
- var t = tmin;
- for (var i = 0; i < MAX_RAY_MARCHES; i++) {
- if (t > MAX_RAY_LENGTH) {
- t = MAX_RAY_LENGTH;
- break;
- }
- let d = df(ro + rd * t);
- if (d < TOLERANCE) {
- break;
- }
- t += d;
- }
- return t;
-}
-
-// Computes a soft shadow for a given point.
-fn shadow(lp: vec3f, ld: vec3f, mint: f32, maxt: f32) -> f32 {
- let ds = 1.0 - 0.4;
- var t = mint;
- var nd = 1e6;
- let soff = 0.05;
- let smul = 1.5;
- let MAX_SHD_MARCHES = 20;
-
- for (var i = 0; i < MAX_SHD_MARCHES; i++) {
- let p = lp + ld * t;
- let d = df(p);
- if (d < TOLERANCE || t >= maxt) {
- let sd = 1.0 - exp(-smul * max(t / maxt - soff, 0.0));
- return select(mix(sd, 1.0, smoothstep(0.0, 0.025, nd)), sd, t >= maxt);
- }
- nd = min(nd, d);
- t += ds * d;
- }
- let sd = 1.0 - exp(-smul * max(t / maxt - soff, 0.0));
- return sd;
-}
diff --git a/common/shaders/render/raymarching_id.wgsl b/common/shaders/render/raymarching_id.wgsl
deleted file mode 100644
index d9f32b2..0000000
--- a/common/shaders/render/raymarching_id.wgsl
+++ /dev/null
@@ -1,83 +0,0 @@
-// Common functions for Signed Distance Field (SDF) raymarching with object ID.
-//
-// Required user-defined functions:
-// - dfWithID(vec3f) -> RayMarchResult
-//
-// Requires constants from raymarching.wgsl:
-// TOLERANCE, MAX_RAY_LENGTH, MAX_RAY_MARCHES, NORM_OFF
-#include "render/raymarching"
-
-// ============================================================================
-// Two-Pass Raymarching Support
-// ============================================================================
-// Design note: RayMarchResult is passed/returned by value (not pointer).
-// At 12 bytes (3×f32), return value optimization makes this efficient.
-// See doc/CODING_STYLE.md for rationale.
-
-struct RayMarchResult {
- distance: f32, // Distance to surface (MAX_RAY_LENGTH if miss)
- distance_max: f32, // Total distance marched (for fog/AO)
- object_id: f32, // Object identifier (0.0 = background)
-}
-
-// Raymarch with object ID tracking.
-fn rayMarchWithID(ro: vec3f, rd: vec3f, init: RayMarchResult) -> RayMarchResult {
- var t = init.distance;
- var result = init;
-
- for (var i = 0; i < MAX_RAY_MARCHES; i++) {
- if (t > MAX_RAY_LENGTH) {
- result.distance = MAX_RAY_LENGTH;
- result.distance_max = MAX_RAY_LENGTH;
- break;
- }
- let sample = dfWithID(ro + rd * t);
- if (sample.distance < TOLERANCE) {
- result.distance = t;
- result.distance_max = t;
- result.object_id = sample.object_id;
- break;
- }
- t += sample.distance;
- }
-
- return result;
-}
-
-// Reconstruct world position from stored result.
-fn reconstructPosition(ray: Ray, result: RayMarchResult) -> vec3f {
- return ray.origin + ray.direction * result.distance;
-}
-
-// Normal calculation using dfWithID.
-fn normalWithID(pos: vec3f) -> vec3f {
- let eps = vec2f(NORM_OFF, 0.0);
- var nor: vec3f;
- nor.x = dfWithID(pos + eps.xyy).distance - dfWithID(pos - eps.xyy).distance;
- nor.y = dfWithID(pos + eps.yxy).distance - dfWithID(pos - eps.yxy).distance;
- nor.z = dfWithID(pos + eps.yyx).distance - dfWithID(pos - eps.yyx).distance;
- return normalize(nor);
-}
-
-// Shadow using stored intersection distance.
-fn shadowWithStoredDistance(lp: vec3f, ld: vec3f, stored_dist: f32) -> f32 {
- let ds = 1.0 - 0.4;
- var t = 0.01;
- var nd = 1e6;
- let soff = 0.05;
- let smul = 1.5;
- let MAX_SHD_MARCHES = 20;
-
- for (var i = 0; i < MAX_SHD_MARCHES; i++) {
- let p = lp + ld * t;
- let d = dfWithID(p).distance;
- if (d < TOLERANCE || t >= stored_dist) {
- let sd = 1.0 - exp(-smul * max(t / stored_dist - soff, 0.0));
- return select(mix(sd, 1.0, smoothstep(0.0, 0.025, nd)), sd, t >= stored_dist);
- }
- nd = min(nd, d);
- t += ds * d;
- }
- let sd = 1.0 - exp(-smul * max(t / stored_dist - soff, 0.0));
- return sd;
-}
diff --git a/common/shaders/render/scene_query_bvh.wgsl b/common/shaders/render/scene_query_bvh.wgsl
deleted file mode 100644
index cf2136b..0000000
--- a/common/shaders/render/scene_query_bvh.wgsl
+++ /dev/null
@@ -1,67 +0,0 @@
-#include "math/sdf_shapes"
-#include "math/sdf_utils"
-
-struct BVHNode {
- min: vec3f,
- left_idx: i32,
- max: vec3f,
- obj_idx_or_right: i32,
-};
-
-@group(0) @binding(2) var<storage, read> bvh_nodes: array<BVHNode>;
-
-fn get_dist(p: vec3f, obj_params: vec4f) -> f32 {
- let obj_type = obj_params.x;
- if (obj_type == 1.0) { return length(p) - 1.0; } // Unit Sphere
- if (obj_type == 2.0) { return sdBox(p, vec3f(1.0)); } // Unit Box
- if (obj_type == 3.0) { return sdTorus(p, vec2f(1.0, 0.4)); } // Unit Torus
- if (obj_type == 4.0) { return sdPlane(p, vec3f(0.0, 1.0, 0.0), 0.0); }
- if (obj_type == 5.0) { return sdBox(p, obj_params.yzw); } // MESH AABB
- return 100.0;
-}
-
-fn map_scene(p: vec3f, skip_idx: u32) -> f32 {
- var d = 1000.0;
- var stack: array<i32, 32>;
- var stack_ptr = 0;
-
- if (arrayLength(&bvh_nodes) > 0u) {
- stack[stack_ptr] = 0;
- stack_ptr++;
- }
-
- while (stack_ptr > 0) {
- stack_ptr--;
- let node_idx = stack[stack_ptr];
- let node = bvh_nodes[node_idx];
-
- if (aabb_sdf(p, node.min, node.max) < d) {
- if (node.left_idx < 0) { // Leaf
- let obj_idx = u32(node.obj_idx_or_right);
- if (obj_idx == skip_idx) { continue; }
- let obj = object_data.objects[obj_idx];
- let q = (obj.inv_model * vec4f(p, 1.0)).xyz;
-
- // Extract scale factors from the model matrix
- let sx = length(obj.model[0].xyz);
- let sy = length(obj.model[1].xyz);
- let sz = length(obj.model[2].xyz);
-
- var s = min(sx, min(sy, sz));
- if (obj.params.x == 4.0) {
- s = sy; // Plane normal is (0,1,0) in local space
- }
-
- d = min(d, get_dist(q, obj.params) * s);
- } else { // Internal
- if (stack_ptr < 31) {
- stack[stack_ptr] = node.left_idx;
- stack_ptr++;
- stack[stack_ptr] = node.obj_idx_or_right;
- stack_ptr++;
- }
- }
- }
- }
- return d;
-}
diff --git a/common/shaders/render/scene_query_linear.wgsl b/common/shaders/render/scene_query_linear.wgsl
deleted file mode 100644
index 5864b6f..0000000
--- a/common/shaders/render/scene_query_linear.wgsl
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "math/sdf_shapes"
-#include "math/sdf_utils"
-
-fn get_dist(p: vec3f, obj_params: vec4f) -> f32 {
- let obj_type = obj_params.x;
- if (obj_type == 1.0) { return length(p) - 1.0; } // Unit Sphere
- if (obj_type == 2.0) { return sdBox(p, vec3f(1.0)); } // Unit Box
- if (obj_type == 3.0) { return sdTorus(p, vec2f(1.0, 0.4)); } // Unit Torus
- if (obj_type == 4.0) { return sdPlane(p, vec3f(0.0, 1.0, 0.0), 0.0); }
- if (obj_type == 5.0) { return sdBox(p, obj_params.yzw); } // MESH AABB
- return 100.0;
-}
-
-fn map_scene(p: vec3f, skip_idx: u32) -> f32 {
-
- var d = 1000.0;
-
- let num_objects = arrayLength(&object_data.objects);
-
- for (var i = 0u; i < num_objects; i++) {
-
- if (i == skip_idx) { continue; }
-
- let obj = object_data.objects[i];
-
- let q = (obj.inv_model * vec4f(p, 1.0)).xyz;
-
-
-
- // Extract scale factors from the model matrix
-
- let sx = length(obj.model[0].xyz);
-
- let sy = length(obj.model[1].xyz);
-
- let sz = length(obj.model[2].xyz);
-
-
-
- var s = min(sx, min(sy, sz));
-
- if (obj.params.x == 4.0) {
-
- s = sy; // Plane normal is (0,1,0) in local space
-
- }
-
-
-
- d = min(d, get_dist(q, obj.params) * s);
-
- }
-
- return d;
-
-}
diff --git a/common/shaders/render/shadows.wgsl b/common/shaders/render/shadows.wgsl
deleted file mode 100644
index b71e073..0000000
--- a/common/shaders/render/shadows.wgsl
+++ /dev/null
@@ -1,13 +0,0 @@
-fn calc_shadow(ro: vec3f, rd: vec3f, tmin: f32, tmax: f32, skip_idx: u32) -> f32 {
- var res = 1.0;
- var t = tmin;
- if (t < 0.05) { t = 0.05; }
- for (var i = 0; i < 32; i = i + 1) {
- let h = map_scene(ro + rd * t, skip_idx);
- if (h < 0.001) { return 0.0; }
- res = min(res, 16.0 * h / t);
- t = t + clamp(h, 0.02, 0.4);
- if (t > tmax) { break; }
- }
- return clamp(res, 0.0, 1.0);
-}