summaryrefslogtreecommitdiff
path: root/src/shaders/lighting.wgsl
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-28 09:08:57 +0100
committerskal <pascal.massimino@gmail.com>2026-02-28 09:08:57 +0100
commit9ee410594a52cbc699b13de2bde4860d70c959a3 (patch)
treed56adf5931d488abcf3ac8e24a828d2d5b02e8cc /src/shaders/lighting.wgsl
parent6599a428cd69be6c66c5179e1f0fce42f561f935 (diff)
refactor: move common/shaders/ to src/shaders/
Relocates shared WGSL shaders under src/ where all source code lives, eliminating the top-level common/ directory. - Update asset references in workspaces/main/assets.txt and workspaces/test/assets.txt - Update docs: PROJECT_CONTEXT.md, ARCHITECTURE.md, WORKSPACE_SYSTEM.md, SHADER_REUSE_INVESTIGATION.md Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'src/shaders/lighting.wgsl')
-rw-r--r--src/shaders/lighting.wgsl24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/shaders/lighting.wgsl b/src/shaders/lighting.wgsl
new file mode 100644
index 0000000..fd92c1a
--- /dev/null
+++ b/src/shaders/lighting.wgsl
@@ -0,0 +1,24 @@
+fn get_normal_basic(p: vec3f, obj_params: vec4f) -> vec3f {
+ let obj_type = obj_params.x;
+ if (obj_type == 1.0) { return normalize(p); }
+ let e = vec2f(0.001, 0.0);
+ return normalize(vec3f(
+ get_dist(p + e.xyy, obj_params) - get_dist(p - e.xyy, obj_params),
+ get_dist(p + e.yxy, obj_params) - get_dist(p - e.yxy, obj_params),
+ get_dist(p + e.yyx, obj_params) - get_dist(p - e.yyx, obj_params)
+ ));
+}
+
+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);
+}