LordXido commited on
Commit
bc345be
·
verified ·
1 Parent(s): 2cd3c22

Update world.wgsl

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