procedural textures random perlin noise turbulence hsv
Every few months/years, when I need to take a break from other projects, I pull out the ol' Accidental Noise Library and tinker with it, trying to make something cool/shiny. I'm in the midst of a project Goblinson Crusoe-related (a bit of story writing) and to let the old brainpan drain for a bit, I tinkered on a project I first played with a couple years ago but never really took anywhere. It's not all the useful, nor is it really all that complex. Just some procedural texture generation using ANL.
The project I had started was a sort of grammar, very simple, to describe chains of noise functions. I use the technique to great effect in my GC level generation and the Minecraft-type stuff I worked on awhile ago but in this project I took a different turn, creating a sort of grammar for generating the actual noise module trees randomly. For the above mosaic of textures, I generated 3 separate noise module trees recursively, using simple rules and random selection of modules. Then, the three channels are combined using HSV compositing (one channel each for hue, saturation and value) to get the final colormap. I built it so I could specify a maximum tree depth, lest it continue on into infinity. From even just a very small set of possible nodes, as you can see in the above, a very wide range of textures were created.
In Texturing and Modeling: A Procedural Approach, one of the sections discusses genetic algorithms for generating procedural textures; or, rather, for generating the algorithms that generate procedural textures. If you can imagine a noise module tree as a tree of "DNA", where each module type is a possible gene in the sequence, you'll get the idea. I haven't implemented any of the selection code yet, I just built a prototype of the system to spawn an initial generation. From there, I'd like to be able to page through a sequence of initial spawns and allow a user to flag some for further consideration, then perform genetic mutation and generational spawning to refine the selections for perceived aesthetic value.
I haven't built a comprehensive set of genes yet, either. All of the above are some 4-level deep combination of fractal or constant for leaf nodes, and fractal (with layer overrides), combiner, select, blend or turbulence for non-leaf nodes. To save computation time, I never went more than 5-levels deep. There is also a lot of potential to be exploited in the sections of RGBA color-space functions, which I will implement soon. This isn't a project I am super-serious about, it's just a toy. I mean, really, what possible use could any of the above textures be? But still, it's fun to tinker with.