Space Filling, Kisrhombille Tessellation and Chromatic Aberration in Shaders
#090 Creative Coding / Generative Arts Weekly
Its been a while.
I’ve been trying to release an app in my day job and that has taken quite a bit effort in getting it smoothed out.
Thank goodness that’s done. Now back to some of my many interests.
We are only a couple people shy of 3000 subscribers to the newsletter!
This is only thanks to you for enjoying the content and learning to use the various tooling out in the market. It is just neat to know that there are that many of you who find using technological tools to create something creative that isn’t all about efficiency and gaining capital.
I’ve been recently experimenting with Strudel (a port of TidalCycles in Javascript) but in the browser. It’s essentially a DSL (domain specific language) in which one can create music.
Its as easy as:
note(”c e g b”).sound(”piano”)
But there are a number of generative elements that can be added which does makes it quite interesting as it sits in my genre of creative coding interests of using randomness as a key component.
Right now I have been trying to revive my “create something daily” and I’m starting that out by creating musical sketches.
NGL - but although my brain wants to create, getting out of the habit of creating and trying to get back into that habit has taken focused effort. I’m still a bit shy but getting closer.
I feel like its a bit like the ascent of an aircraft on a cloudy day. You get to a point and you are doing the work but there is this period of trying to get through the fogginess before you get above the clouds and then the ease of creation becomes more of an extension of one’s being than the practice of it.
These are just more little pieces of ear candy that I’ve been finding to really provide some mental right brain downtime for sure.
For one of the days, I used Strudel to generate the MIDI which is passed into Ableton Live (really for some of the VSTs). I really like the idea of being able to build musical patterns based on a scale outside of just the midi controller.
Anyways, I hope that you all have an amazing week full of new and interesting discoveries.
Peace and stability,
Chris
P.S. What have you been doing lately? Leave a comment!
Tutorials & Articles
Gilbert: Space Filling
Generalized Hilbert (”gilbert”) space-filling curve for rectangular domains of arbitrary (non-power of two) sizes.
The discrete Hilbert curve is a widely used space-filling curve to map between N-dimensional and 1-D spaces while preserving locality. However, classical algorithms only work for domains whose sides are powers of two.
We present a simple recursive algorithm that generalizes the Hilbert curve to rectangles of arbitrary sizes in 2D, and cuboids of even sizes in 3D.
PyGFX
Pygfx (py-graphics) is built on wgpu, enabling superior performance and reliability compared to OpenGL-based solutions. It is designed for simplicity and versatility: with its modular architecture, you can effortlessly assemble graphical scenes for diverse applications, from scientific visualization to video game rendering.
twigl.app - Phys
So I’ve posted about twigl before.. its a lightweight platform to write shaders in the browser. Its similar to Hydra or Shadertoy without the community aspect built into the site. These are more out of inspiration and I would encourage just looking how “simple” these examples are and provide alot of material to play around with.
#define R rotate2D
vec2 p=FC.xy,q,l=(p+p-r)/r.x*.4+vec2(-.25,.05),n;
float s=6.,h,i,L=dot(l+1.8,l),e=129.;
for(;i++<e;)l*=R(4.96),n*=R(4.8+sin(t)*.05)+rotate2D(t)*.035,
h+=dot(r/r,sin(q=l*s*i+n)/s*4.),n+=cos(q),
s*=1.05;h=.4-h*.26-L;o.rgb+=.5*h-hsv(.1,h*.5,.3);
for(float i,z,d;i++<1e2;){vec3 p=z*normalize(FC.rgb*2.-r.xyy),a=normalize(cos(vec3(0,2,4)+t/4.));p.z+=9.,a=a*dot(a,p)-cross(a,p);z+=d=.01+.3*abs(max(dot(cos(a),sin(a/.6).yzx),length(a)-7.)+1.5-i/8e1);o+=sin(i/6.+z*vec4(0,1,2,0)/5e1)/d;}o=tanh(1.+o/2e3);
I’ve been fascinated on shaders for a while as one can produce quite complex looking images without much “code.” From a coding perspective, there is alot that is packed in that makes this also even more fun and interesting.
Similar to the way when you see a painter draw something in n strokes and you just have to wrap you head around how that works.
Toy Fluid Engine
A python library that has used a python Taichi
Until recently I hadn’t really realized how big Taichi in python is or had become. I try pretty hard to keep up with what is out there, and it has become even harder to do so in the last 5 years as platforms diverge and you have to read almost 5 times the amount of content then it use.
Nesting Kisrhombille Tessellation Based Geometry and Forsythia Fractal
Geom_Kisrhombille is a GitHub project focused on exploring the Kisrhombille tessellation through computational geometry and custom rule-based systems for shape manipulation. The repository includes experiments with concepts like “metagons,” which represent the essence of polygons abstracted from their position, orientation, and scale—serving as building blocks for geometric constructions and language-like shape grammars. The project aims to provide a placement system and solver, enabling flexible generation and transformation of geometric patterns based on defined rules, and is positioned as a unique tool for both visual artists and researchers interested in fractal geometry and algorithmic design.
This is a Java based library from a number of years ago. The beauty is just how interesting the geometry merges with the Forsythia Fractal having it generate some really unique and beautiful geometric work.
Sketching for the Future
The ninth edition of the Teaching with Digital Technology Awards, a student-elected program presented annually to faculty members at the Massachusetts Institute of Technology includes MIT Media Lab instructor Zachary Lieberman (Media Arts and Sciences).
Flip Switch - Blender Geometry Nodes
In this beginner-friendly Blender tutorial, we’ll explore how to create a dynamic spin-flip transition using Geometry Nodes. This effect allows you to smoothly switch between two 3D objects—like a torus and Suzanne (the monkey head)—with a rapid spinning motion that hides the transition in motion blur, making it perfect for motion graphics or product showcases. We start by preparing our scene: deleting the default cube, adding a torus and Suzanne, smoothing and subdividing them, and placing them in a hidden collection. We then build a Geometry Nodes network with object inputs, transform nodes, and a switch logic that activates a rotation and flips the object at a specific frame using the scene’s time. To enhance realism, we apply easing with a float curve, use checker textures mapped via custom attributes, and set up Cycles rendering with motion blur and denoising. Finally, we convert the node setup into a reusable group that can be chained—allowing multiple flip transitions across different time ranges and axes. This tutorial not only teaches you how to build an elegant visual transition but also how to structure your Geometry Nodes to be modular and flexible for future creative use.
Physarum Explained
The purpose of this article is to explain techniques that enabled me to make simulations like the one below, along with a lot of other organic looking things. We will focus on algorithmic techniques for artistic purpose rather than scientific meaning.
Just a bunch of beautiful Physarum simulations that really bring out the complexity of these “simpler” systems.