Parameters
| Name | Type | Description |
|---|---|---|
| position | vec3<f32> | 3D position to evaluate. |
| c | vec4<f32> | Julia set parameter (quaternion). |
| iterations | f32 | Maximum number of iterations. |
| bailout | f32 | Bailout radius for iteration escape. |
Returns
WGSL Code
fn sdfJulia(position: vec3<f32>, c: vec4<f32>, iterations: f32, bailout: f32) -> f32 { var z = vec4<f32>(position, 0.0); var dz = vec4<f32>(1.0, 0.0, 0.0, 0.0); var m = dot(z, z); var i = 0; // Julia set iteration for (i = 0; i < i32(iterations) && m < bailout * bailout; i += 1) { // Quaternion multiplication for dz = 2.0 * z * dz dz = 2.0 * vec4<f32>( z.x * dz.x - z.y * dz.y - z.z * dz.z - z.w * dz.w, z.x * dz.y + z.y * dz.x + z.z * dz.w - z.w * dz.z, z.x * dz.z - z.y * dz.w + z.z * dz.x + z.w * dz.y, z.x * dz.w + z.y * dz.z - z.z * dz.y + z.w * dz.x ); // Quaternion multiplication for z = z * z + c z = vec4<f32>( z.x * z.x - z.y * z.y - z.z * z.z - z.w * z.w, z.x * z.y + z.y * z.x + z.z * z.w - z.w * z.z, z.x * z.z - z.y * z.w + z.z * z.x + z.w * z.y, z.x * z.w + z.y * z.z - z.z * z.y + z.w * z.x ) + c; m = dot(z, z); } // Compute the distance let dist = 0.5 * log(m) * sqrt(m) / length(dz); return dist; }