LordXido commited on
Commit
f9085b1
·
verified ·
1 Parent(s): da2b37f

Update world.wgsl

Browse files
Files changed (1) hide show
  1. world.wgsl +43 -8
world.wgsl CHANGED
@@ -1,14 +1,49 @@
1
  @group(0) @binding(0)
2
  var<storage, read_write> field : array<f32>;
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  @compute @workgroup_size(64)
5
  fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
6
- let i = gid.x;
7
- if (i >= arrayLength(&field)) {
8
- return;
9
- }
10
-
11
- // Simple oscillatory field evolution
12
- let t = f32(i) * 0.01;
13
- field[i] = sin(t) * 0.5 + 0.5;
14
  }
 
1
  @group(0) @binding(0)
2
  var<storage, read_write> field : array<f32>;
3
 
4
+ struct Params {
5
+ power : f32,
6
+ time : f32,
7
+ }
8
+
9
+ @group(0) @binding(1)
10
+ var<uniform> params : Params;
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 = i + 1) {
18
+ r = length(z);
19
+ if (r > 2.0) { break; }
20
+
21
+ let theta = acos(z.z / r);
22
+ let phi = atan2(z.y, z.x);
23
+ dr = pow(r, power - 1.0) * power * dr + 1.0;
24
+
25
+ let zr = pow(r, power);
26
+ let newTheta = theta * power;
27
+ let newPhi = phi * power;
28
+
29
+ z = zr * vec3<f32>(
30
+ sin(newTheta) * cos(newPhi),
31
+ sin(newTheta) * sin(newPhi),
32
+ cos(newTheta)
33
+ ) + p;
34
+ }
35
+
36
+ return 0.5 * log(r) * r / dr;
37
+ }
38
+
39
  @compute @workgroup_size(64)
40
  fn main(@builtin(global_invocation_id) gid : vec3<u32>) {
41
+ let i = gid.x;
42
+ if (i >= arrayLength(&field)) { return; }
43
+
44
+ let x = f32(i) / f32(arrayLength(&field)) * 2.0 - 1.0;
45
+ let p = vec3<f32>(x, 0.0, sin(params.time) * 0.5);
46
+
47
+ let d = mandelbulb(p, params.power);
48
+ field[i] = clamp(1.0 - d, 0.0, 1.0);
49
  }