Loading... This shouldn't take long at all.


Drop Preset Here

David's Fractal Explorer v5

version - using available

Descriptions


Fractal Formula:


Fractal Selection:


Colormap Selection:


Color Method Selection:


Fractal Modifier:


Import

Import from URL

Import from exported PNG


Export

Export PNG

Share as an URL


Settings:



Sticky canvases:

Escape Radius:

Iterations:

Fractal Power:

Juliaset Constant:

Interpolate between normal and juliaset:

Canvas Size:

Color offset:

Colorfulness:

Sample Count:


Force Backend

WebGPU uses more modern backends such as Vulkan, D3D12 and Metal, providing a performance benefit, but isn't supported in every browser yet.

WebGL uses the more outdated OpenGL backend, which might be a bit worse performance-wise, but some browsers don't yet implement WebGPU.


Noise

Seed:

Amplitude:

Multiplier:


Image Chunker

Render the fractal in chunks, to be able to render fractals at huge scales and at high iterations and sample counts.

Forcing the backend to be WebGL may help a with the render time and export speed, if you are experiencing issues exporting or just find it slow, .


Final Image Size:

Chunk Size:



Note: If your browser freezes instead of displaying a loading screen, this is most likely due to the used backend being WebGL. This is a known issue, just be patient, and if you want a progress indicator, press f12 to open the console with logs.


Customize Code

Custom Fractal:

}

(Using Backend: )



Compile Output:

Note: the below examples are written in WGSL. Depending on the used backend, you might need to adjust the code.

Here you can enter a custom formula for a fractal.

As an example, here is the mandelbrot set:

return c_pow(z, power) + c;

In this example, c_pow() raises a complex number z to a float power (usually 2), and adds c.


All available functions:

NOTE: When experimenting around, sometimes you should use some of these with a low radius. That produces better results sometimes.


complex(re, im): Creates a complex number. Can also be written as vec2<f32>();


c_multiplication(a, b): Multiplies two complex numbers together.


c_division(a, b): Divides two complex numbers.


c_pow(z, p): Raises a complex number to a (float) power.


c_cpow(z, p): Raises a complex number to a (complex) power.



c_sin(z): Complex Sine


c_cos(z): Complex Cosine


c_tan(z): Complex Tangent



c_sinh(z): Complex Hyperbolic Sine


c_cosh(z): Complex Hyperbolic Cosine


c_tanh(z): Complex Hyperbolic Tangent



c_asin(z): Complex Arcsine


c_acos(z): Complex Arccosine


c_atan(z): Complex Arctangent



c_asinh(z): Complex Hyperbolic Arcsine


c_acosh(z): Complex Hyperbolic Arccosine


c_atanh(z): Complex Hyperbolic Arctangent



c_log(z): Complex Logarithm


c_exp(z): Complex Exponential


c_sqrt(z): Complex Square Root


c_abs(z): Complex Absolute (kind of, just takes the absolute of both sides)



You have access to all built-in WGSL/GLSL functions aswell.

All available constants:

pi: Pi


e: e


ln2: Natural Logarithm of 2


phi: Golden ratio.


Custom Colorscheme:

}

(Using Backend: )



Compile Output:

Note: the below examples are written in WGSL. Depending on the used backend, you might need to adjust the code.

For a custom colorscheme, you can either use a formula involving maths, like this:

var xp: f32 = x * pi * 2.;
return vec4<f32>(
    .5 + sin(xp) / 2.,
    .5 + sin(xp + 1.) / 2.,
    .5 + sin(xp + 2.) / 2.,
    1.
);

This code uses a few sines to create the "classic" colorscheme.

Or, you could just use interpolation. An example is here:


var xv: f32 = x;
var red: vec3<f32> = vec3<f32>(1., 0., 0.);
var yellow: vec3<f32> = vec3<f32>(1., 1., 0.);
var green: vec3<f32> = vec3<f32>(0., 1., 0.);
var lightblue: vec3<f32> = vec3<f32>(0., 1., 1.);
var blue: vec3<f32> = vec3<f32>(0., 0., 1.);
var pink: vec3<f32> = vec3<f32>(1., 0., 1.);
xv = fract(xv) * 6.;
if (xv < 1.) {
    return color_interpolate(pink, red, yellow, green, fract(xv));
}
if (xv < 2.) {
    return color_interpolate(red, yellow, green, lightblue, fract(xv));
}
if (xv < 3.) {
    return color_interpolate(yellow, green, lightblue, blue, fract(xv));
}
if (xv < 4.) {
    return color_interpolate(green, lightblue, blue, pink, fract(xv));
}
if (xv < 5.) {
    return color_interpolate(lightblue, blue, pink, red, fract(xv));
}
if (xv <= 6.) {
    return color_interpolate(blue, pink, red, yellow, fract(xv));
}
return vec4<f32>(0., 0., 0., 1.);
                        

While this might look a little confusing at first, you can also just try modifying the colors at the top, changing (1., 0., 1.) to whatever color (in RGB) you like.
This example creates the "rainbow" colorscheme.


Load Plugin




Information

Reporting Issues:

This project is still very early in development. This means, new features will be added in the future. Until everything is finished, bugs might occur and things might break. If you find anything, please open a issue on github.


Other Versions:

Version v1
Version v2
Version v3
Version v4
Scratch Version I made for some reason

Special Thanks:

This project by nathansolomon1678 on github, where I got a lot of insipration (and a bit of code) from

This project by BenjaminAster on github, that helped me a little since I wasn't too experienced with WebGPU/WGSL

Paul Bourke's page on fractals, where I got lots of the fractals and insipration from

CodeParade (HackerPoet on github) for this project, where I got the code for the feather fractal and a few others from

This project on github I got some colormaps from.

This repository on github by radian628, where I got the idea of multisampling from.

Indigo Quilez' Website, which contains a lot of useful articles on graphical programming.

This project on github by kbinani, where I found some colormaps.

All the amazing people who discovered some of these fractals and made this project possible

My friends (who did nothing for this project)

You, for visiting and testing my project


Changelog

0.5.0

- Added WebGL backend along with existing WebGPU to ensure maximum compatibility and performance

- UI redesign

- Faster load time

- Several bugfixes

- Replace the wacky preset URL system

- Bought a domain for the website

- Everything else new in v5

0.5.1

- Image chunker

- Halved loading time due to double compilation

- Fixed small possible bugs

- Improved exporting speed by a huge margin

0.5.1a

- Fix bug with importing fractals being completely broken in most cases

- Fix bug where exporting chunked juliasets is broken

0.5.2

- 2 new colorschemes (purple, brown)

- Fix small bug when opening the window at a small scale, text will be squished a lot

- Canvases now automatically stick and unstick with the window being resized

- Added this changelog

- Slightly modifier the randomizer

- Fix noise not appearing correctly in chunked renders

- You can now drag and drop exported images (and preset urls) to automatically import the preset

- Fix a lot of messy code that will make working on some things easier

- Fix Fractal buttons by plugins not properly being highlighted

- Change the description section a bit


Support my work!

X