Raquel practices guitar while my watercolor simulation paints her portrait.
Here you can also see a first glimpse of the GUI I’m building for live performance. This was my first dry run of the whole system, including webcam and external monitor. Still could use some optimization: the frame rate dropped to 16fps, I think due to thermal throttling. (You can hear how hard the poor laptop is working… just listen to that fan!)
I’m midway through a (major, long overdue) overhaul of the fluid transport layer of my watercolor simulation. Made some good progress over the weekend. But more importantly: I made lots of new bugs. Glorious, unrepentant, face-eating bugs. I almost don’t have the heart to squash them.
Continuing to explore the parameter space of this watercolor simulation. Enjoying the contrast between natural and artificial, accidental and planned. Really enjoying what’s starting to happen with color. Finding bugs, fixing bugs, creating new bugs. This is getting close to the point where I’d use it to paint someone’s portrait.
Some refinements on the Chuck Close homage, and then a left turn into something very different. The bugs in my code are a source of unending joy and frustration. Someday, maybe, I’ll fix them, but where’s the fun in that?
New today: exploring making each pixel smarter, with more thoughtful brushstroke planning. Starting to get excited about the shapes and textures that emerge. (In case it’s not obvious, I’m reaching for a Chuck Close vibe here. But his work has all kinds of depth to it, I’m barely scratching the surface as of yet.) Also, I’ve added some new types of randomized color palettes, including interference pigments on dark paper. So many happy accidents. I don’t think I’ll ever get bored of this.
Continuing to explore grids of big wet pixels. This one could even be considered to fit today’s Genuary prompt, “8×8”, if you squint at it. I’m getting to the point with Unity and C# where it’s starting to feel less like work, and more like play. More to come soon.
Still exploring big wet pixels (originally inspired by the #genuary4 prompt) using my watercolor simulation in Unity. Now the pixels are actually pixels: given a random selection of pigments and paper, they try their best to match the color coming in through my webcam. Lovely glitches ensue.
To get this working, I had to go back and solve an old problem that’s bothered me for decades: given an arbitrary set of three pigments and paper, what combination of pigment densities will produce the closest match for any given RGB color? This is non-trivial, because the gamut described by three Kubelka-Munk pigments is non-linear, not necessarily convex, and might even not be an embedding! In our 1997 paper we addressed that problem in a really crude way, which I was never very happy with: quantize the pigment densities into bins, and find the nearest bin in RGB space using a 3d-tree search. So it gave me great satisfaction last weekend when I implemented a continuous solution, using gradient descent.
The curved RGB color gamut described by a trio of semi-opaque white, amber and green pigments on purple paper. The white sphere represents the RGB color we’d like to match. A smaller, colored sphere represents the closest approximation that can be produced within the color gamut. A thin, meandering line shows the path taken from the middle of the gamut via gradient descent.
Cassidy Curtis's splendid display of colorful things.