Vimukthi Weerabahu
2026 / 10 / 31

Strange
Attractors

Migrated a Julia script I came across to a Blender Python script to create stunning renders of several strange attractors.

I was looking at the Wikipedia page for the Lorenz attractor which contained a Julia script for a colorful simulation of the Lorenz system, rendered with the Makie plotting library. After seeing this I was inspired to create some of my own renders.

0:00

Challenges

My goal now was to create animations of a camera smoothly flying through several attractors, showcasing their beauty. I experimented with a few approaches to achieve this;

  1. Modifying the Julia script from the Wikipedia page,
  2. Porting the script to Python and using Matplotlib for rendering,
  3. Migrating that Python code to instead render with Manim (coincidentally there happened to be a video by 3Blue1Brown using the Lorenz attractor as a demo for Manim).

Ultimately all of these approaches failed because animating the camera the way I desired felt too impractical since I would need to write down the camera positions and angles "by hand" to perform rendering programmatically.

I've had past experience using Blender, a 3D creation software, and recalled that it offers a very powerful Python API to script with. This was the approach that worked as performing camera animations in Blender was comparatively trivial.

Using Blender

The Thomas Attractor in Blender.

I was aware that Blender had a native curves feature, so I looked up how to generate curves with the Python API and came across a helpful post on the Blender Stack Exchange. Equipped with this knowledge I modified the code to generate multiple curves per attractor with slightly different starting points to create a branching effect (utilizing the chaotic nature of strange attractors).

The script I used to generate the Thomas Attractor.

When it came to rendering I used Blender's EEVEE renderer as I was looking for the simplest and fastest renderer possible. I created a material for the curves which draws an easily customizable gradient over a part of the path (depending on a keyframed value) so that the progress of the simulation can be seen over time.

The material I used for the curves of the Thomas Attractor.

Afterwards I proceeded to create all the animations of the attractors I desired, tuning some of EEVEE's rendering settings along the way to optimize render times.

Editing

I used DaVinci Resolve (a free video editor) to produce the final video. I wanted to this video in both a horizontal and vertical format, so I created multiple video tracks to make that possible.

Contact

Emailme@vimhax.com

GitHubVimHax

LinkedInVimukthi Weerabahu

X / Twitter@VimHax