Multi-Scale Turing Patterns

October 19, 2018

This page contains a gallery of multi-scale Turing patterns. The method is a single-variable simulation of a reaction-diffusion system which approximates diffusion through circular convolutions. The multi-scale extension switches between Turing patterns at different scales based on local properties. The images below implement Jason Rampe’s blog post Multi-Scale Turing Patterns in which he describes with excellent clarity the algorithm previously described by Jonathan McCabe in his paper, Cyclic Symmetric Multi-Scale Turing Patterns. (Both an indespensible read if you want to explore these patterns further!)

You can view a live implementation with which the images on this page were computed here, and you can find the source of the implementation here. The simulation is computed in WebGL using the (outstanding!) regl library. (I love regl, but that’s a topic for another post). The implementation is not currently configurable on the web—though I would love for it to be!

Most of the images below are computed at 4096 x 4096 pixels, which is the limit of the size my poor laptop can manage before the system grinds to a halt. Each image takes thirty minutes or so to compute. Using periodicity, they’re extended horizontally to 6144 pixels wide so that they fit on a horizontal screen. For the convolutions, it uses my own GLSL implementation of the Fast Fourier Transform, which is in turn a refactoring of David Li’s FFT implementation. I found when trying out parameters that very slightly negative weights produce a wonderful effect in coloring detail (as seen in the first two images).

Based on my approach to coloring, I’m thrilled that Jason has also tried it out and since added coloring to his method and blog post. I heartily second his encouragement to try things out, let people know when their work is helpful, and seek out collaboration! 🎉

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.

(Realistically, shoot me a message at @rickyreusser and I’d probably let you do just about anything with these images or my implementation which generates them, but I’ve made the code and high resolution originals (well, compressed to jpeg—let me know if you want a 30MB png) available out of good will and good intentions, and since I’m deeply indebted to the people whose work has enabled me to create these, I’ve licensed these explicitly only as a small step beyond simply asking politely that you not, like, find some way I don’t even know exists and turn around and sell them for profit or something. ❤️)