EVA is a loose acronym that stands for evolutionary virtual artist, or evolving visual artist or something else like that. It’s a generative art project I’ve been working on for the last year or so, and I think it’s been quite successful so far.
A lot of generative art randomizes specific parameters in fairly restrained ways, so even though the theoretical number of images a system may be able to generate is infinite, the results get samey and boring after a while. I wanted to create something that could keep surprising me for a long time, and so eva was born.
EVA generates a directed acyclic graph which is then used to generate images like the one at the top of the page. Essentially, we have a bunch of nodes connected together (kind of like a neural network or a modular synth) that do different math operations. For every pixel in the image we feed an x and y position in to the graph and get an output color.
The key piece to this system though, is that I’m not really creating these graph structures myself. Without digging around quite a bit I couldn’t even tell you exactly what nodes are being used to generate any of these images! This is where the evolution part comes in.
The first time EVA is run, the graph structure we start out with is completely blank. There’s no nodes other than the output node. This intiial graph structure is then mutated. Connections between nodes might be added and new nodes might be added too (at empty inputs or along existing connections). Once this happens each of the new child graphs we’ve got renders an image. I’m then able to log in to a web interface and view all of the images that have been generated, and select any promising ones for another round of mutation.
When we do the first mutation, we might end up with an x position node connected to the output node, which gives us a gradient like this:
After another round of mutation a sin node might be added along the connection between the x position and the output color, which gives us a bunch of bars like this:
As this selection process continues the images keep getting more interesting, complex, and varied. Here’s an example showing the evolution process from left to right, top to bottom (I’ve omitted some intermitent images for brevity sake). I think it’s really interesting to see some early features disappear and then show back up when the graph becomes more complex and interconnected, like the noisey texture of image 5.
I’ve been super happy with the results I’ve gotten so far and I’ve got loads of ideas to expand on this project in the future. I’ve just started playing around with rendering videos from the graph structures of images I like by varying some nodes’ output over time. I’d also really love to experiment with autoamted selection systems instead of needing to manually choose which images get another generation. I think some type of social selection system (social media likes based or something?) could be interesting and I’d like to explore ways to quantify the novelty of an image to automatically select results that are dissimilar to previous images.
If you’ve got any questions, ideas, or want to commission a piece from eva (it’s great album art!) get in touch with me