LordXido commited on
Commit
c9f1ab0
·
verified ·
1 Parent(s): 1ac49d6

Update world.wgsl

Browse files
Files changed (1) hide show
  1. world.wgsl +20 -28
world.wgsl CHANGED
@@ -9,12 +9,12 @@ var<uniform> params : Params;
9
  @group(0) @binding(1)
10
  var<storage, read_write> pixels : array<f32>;
11
 
12
- fn mandelbulbDE(p: vec3<f32>, power: f32) -> f32 {
13
  var z = p;
14
  var dr = 1.0;
15
  var r = 0.0;
16
 
17
- for (var i = 0; i < 10; i++) {
18
  r = length(z);
19
  if (r > 2.0) { break; }
20
 
@@ -30,39 +30,31 @@ fn mandelbulbDE(p: vec3<f32>, power: f32) -> f32 {
30
  cos(theta * power)
31
  ) + p;
32
  }
33
-
34
  return 0.5 * log(r) * r / dr;
35
  }
36
 
37
- fn raymarch(ro: vec3<f32>, rd: vec3<f32>) -> f32 {
 
 
 
 
 
 
 
 
 
38
  var t = 0.0;
 
39
  for (var i = 0; i < 64; i++) {
40
  let p = ro + rd * t;
41
- let d = mandelbulbDE(p, params.power);
42
- if (d < 0.001) { return 1.0 - f32(i) / 64.0; }
43
  t += d;
44
- if (t > 10.0) { break; }
45
  }
46
- return 0.0;
47
- }
48
-
49
- @compute @workgroup_size(8,8)
50
- fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
51
- let width = 256u;
52
- let height = 256u;
53
-
54
- if (gid.x >= width || gid.y >= height) { return; }
55
-
56
- let uv = (vec2<f32>(gid.xy) / vec2<f32>(width, height)) * 2.0 - 1.0;
57
-
58
- let ro = vec3<f32>(0.0, 0.0, -4.0 + sin(params.time) * 0.5);
59
- let rd = normalize(vec3<f32>(uv, 1.5));
60
-
61
- let c = raymarch(ro, rd);
62
- let idx = (gid.y * width + gid.x) * 4u;
63
 
64
- pixels[idx + 0u] = c;
65
- pixels[idx + 1u] = c * 0.8;
66
- pixels[idx + 2u] = c * 1.2;
67
- pixels[idx + 3u] = 1.0;
 
68
  }
 
9
  @group(0) @binding(1)
10
  var<storage, read_write> pixels : array<f32>;
11
 
12
+ fn mandelbulb(p: vec3<f32>, power: f32) -> f32 {
13
  var z = p;
14
  var dr = 1.0;
15
  var r = 0.0;
16
 
17
+ for (var i = 0; i < 8; i++) {
18
  r = length(z);
19
  if (r > 2.0) { break; }
20
 
 
30
  cos(theta * power)
31
  ) + p;
32
  }
 
33
  return 0.5 * log(r) * r / dr;
34
  }
35
 
36
+ @compute @workgroup_size(8,8)
37
+ fn main(@builtin(global_invocation_id) id : vec3<u32>) {
38
+ let w = 256u;
39
+ let h = 256u;
40
+ if (id.x >= w || id.y >= h) { return; }
41
+
42
+ let uv = (vec2<f32>(id.xy) / vec2<f32>(w, h)) * 2.0 - 1.0;
43
+ let ro = vec3<f32>(0.0, 0.0, -4.0 + sin(params.time));
44
+ let rd = normalize(vec3<f32>(uv, 1.5));
45
+
46
  var t = 0.0;
47
+ var hit = 0.0;
48
  for (var i = 0; i < 64; i++) {
49
  let p = ro + rd * t;
50
+ let d = mandelbulb(p, params.power);
51
+ if (d < 0.001) { hit = 1.0 - f32(i)/64.0; break; }
52
  t += d;
 
53
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
 
55
+ let idx = (id.y * w + id.x) * 4u;
56
+ pixels[idx] = hit;
57
+ pixels[idx + 1] = hit * 0.8;
58
+ pixels[idx + 2] = hit * 1.2;
59
+ pixels[idx + 3] = 1.0;
60
  }