I would like to write some software that composes images out of procedural textures. For ultimate flexibility I would like to access/create those textures via an API.
In the past I have used POV-Ray for basic textures, I have used free version of Genetica and tweaked its pre-sets, and I have also used the Resynthesis GIMP plugin to generate textures from photographs, or to process textures from other sources. These tools are all great, but lock me in to a process of creating a texture image library, when I'd rather be creating texture "recipes" using parameters. Now I have learnt what I want to do with those tools, I want to take a step back and write code that generates the kinds of textures I need, and maintain a library of parameters for that code.
Requirements:
API/library for C, C++ or Ruby (feel free to add others for general interest, especially if open-source, but I will not be able to accept for my purposes).
Supports PNG format, including alpha channel, or can be linked with a library that does.
Control at level of texture primitives, various types of noise, colour maps, bump maps etc.
Combination of texture primitives in a layer- or node- based manner.
Pre-sets or examples for simple naturalistic textures - rock, wood, water, mud, grass.
Resulting textures do not need to be photo-realistic, but close enough for use in a simple game environment.
Nice to have: Can be used to create undistorted tileable textures.
Absolute best: Could rival Genetica (or similar paid app) in variety and quality, but an open-source library, not a paid application.
Not important: Speed. I will be generating textures as part of a non-real-time workflow, and am not considering frames-per-second or CPU cost. If it takes 30 seconds to generate a screen full of the texture, that is probably OK. Quality and flexibility are far more important than speed.
Update: I have been asked about workflow. I view using a texture API as part of a two-step process:
Generate/explore textures either by manually building them, or by trying variations. I'd happily take a pre-existing GUI with a management interface, controls like sliders etc here. Equally I am fine to make my own less sophisticated explorer directly from an API. Textures that I like, I will store with an id and some metadata.
To use the texture library, I intend to write software for automatically generating and rendering image content (not a raytracer or game engine, but working at a similar level of generating pixel values). This might be maps for games, uv mapped textures for objects for rendering elsewhere, or just abstract art. This software will pick suitable textures from the library and need to render them, ideally with unique random seed values (or noise offset vectors) before mapping to correct place in a scene or object. The problem with a pre-rendered texture library here is that the exact same pixels would get re-used again and again.