Dynamic 3D mesh fractals rendered using a raymarching shader in Godot 4. Includes seamless integration with Godot's default 3D editor and a plugin to convert .obj meshes into signed distance function textures. See demo project for example usage.
- Create a
MeshInstance3Dand attach aQuadMeshto it withorientationset toFace Z. - Set
cast_shadowto off. If you want an approximation of shadows, you can add a secondMeshInstance3Das a child withcast_shadowset toShadows Only-- a sphere mesh works okay to give visual depth at least. - Create a
ShaderMaterialand attach eitherrendering/raymarcher.gdshaderorrendering/raymarcher_simple.gd_shader. The normal variant allows you to merge mesh fractals with a secondary fractal, while the simple variant allows you to render the secondary fractals by themselves. - Configure the parameters. See examples in
demofor reasonable values.
The mesh fractal shader takes as input the 3D signed distance function texture of a model rather than a triangulated mesh. The SDF converter addon in this repository allows you to convert .obj files into the correct format directly. It uses a Python script, so ensure that you've installed the libraries in addons/sdf_converter/requirements.txt. A size of at least 64 is recommended, but 256 produces good results.
I have a small write-up of this project here if you want more details. Below are references for the fractal logic and some distance estimates that I used.
- Into the Portal: Directable Fractal Self-Similarity
- A Shape Modulus for Fractal Geometry Generation
- Distance Estimated 3D Fractals (III): Folding Space
- Distance Estimated 3D Fractals (V): The Mandelbulb & Different DE Approximations
- Distance Estimated 3D Fractals (VI): The Mandelbox
- Revenge of the (Half-Eaten) Menger Sponge
- Inigo Quilez's Signed Distance Functions
- Shader Fractals
- Distance Estimator Compendium