Spaces:
Running
Running
Update world.wgsl
Browse files- 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
|
| 13 |
var z = p;
|
| 14 |
var dr = 1.0;
|
| 15 |
var r = 0.0;
|
| 16 |
|
| 17 |
-
for (var i = 0; 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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
var t = 0.0;
|
|
|
|
| 39 |
for (var i = 0; i < 64; i++) {
|
| 40 |
let p = ro + rd * t;
|
| 41 |
-
let d =
|
| 42 |
-
if (d < 0.001) {
|
| 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 |
-
|
| 65 |
-
pixels[idx
|
| 66 |
-
pixels[idx +
|
| 67 |
-
pixels[idx +
|
|
|
|
| 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 |
}
|