Skip to content

kiwijuice56/gd-fractals

Repository files navigation

gd-fractals

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.

Fractal image Editor example

Usage

  1. Create a MeshInstance3D and attach a QuadMesh to it with orientation set to Face Z.
  2. Set cast_shadow to off. If you want an approximation of shadows, you can add a second MeshInstance3D as a child with cast_shadow set to Shadows Only -- a sphere mesh works okay to give visual depth at least.
  3. Create a ShaderMaterial and attach either rendering/raymarcher.gdshader or rendering/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.
  4. Configure the parameters. See examples in demo for reasonable values.

SDF Converter

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.

References

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.