The intention is to create a small, portable library that can be used to deterministically generate content at runtime for applications such as games. Because it's MIT-licensed, you have very minimal requirements for your use of the library. While performance should be a goal, currently effort is being spent primarily on implementing useful algorithms.

It was inspired by reading about .kkrieger, and thinking how I wish some of these bloated games I install would use these techniques. What if there was a nice, well-licensed library that game developers could use, with some examples of ways to generate pretty textures?

Perlin noise as GL_LUMINANCE texture, using different seeds:

Three Perlin noise outputs as R,G,B channels in GL_RGB texture, using different seeds:

Turing reaction-diffusion system outputs with varying input factors, as GL_LUMINANCE texture:

Two-stage Turing reaction-diffusion system outputs with varying input factors, as GL_LUMINANCE texture (Da = .125, Db = .03125)

32000@s=.003, 8000@s=.015 |
8000@s=.006, 3000@s=.018 |
4000@s=.01, 3000@s=.03 |

Meinhardt reaction-diffusion system outputs with same seed but varying Dg factor, as GL_LUMINANCE texture (Dr = 0.0, Ds = .08, c = .002, gamma = .01, 16000 iterations)

Dg=.020 | Dg=.016 | Dg=.012 |

From there, ideas for future work:

- Use a smoothing for Perlin noise that's not dependent on system math functions, for more determinism?
- Help for doing "infinite" Perlin noise, as in infinite terrain generators, evolving Perlin-noise clouds, etc.
- Multi-stage reaction-diffusion systems (for example, spots then stripes for reticulation, or spots then smaller spots, or stripes then stripes for outlines).
- Produce demos of generating interesting textures working off of the current set of algorithms.
- Implement 3, 4, possibly N-dimenional Perlin noise.
- Demo of water/clouds using 3d perlin noise?
- Allow varying sizes of each dimension for Perlin noise.
- Implement Turk's mesh fitting system, and reaction-diffusion on top of that.
- Implement some good cloud systems.

- liboil 0.3
- glut (test apps only).

Feel free to drop me an email at anholt@FreeBSD.org if you're using the library (I'd love to know), would like to see a CVS repo (I'm meaning to do this soon anyway), or have links to docs on great methods for procedural content generation.

- libpcg 0.2.1: 256x256, 8-octave Perlin noise generated at 29.1MB/sec (+/- .003MB/sec) on an Opteron 3500+
- libpcg 0.2.1: 1024x1024, 8-octave Perlin noise generated at 41.7MB/sec (+/- .4MB/sec) on an Opteron 3500+

- Procedural 3D Content Generation, Part 1 -- Intel publication on using Perlin noise.
- Procedural 3D Content Generation, Part 2 -- Intel publication on using Perlin noise. Notably about terrain mapping.
- Perlin Noise -- Useful information on smoothing, and some pretty examples.
- Models of Biological Pattern Formation -- a remaking of Hans Meinhardt's book on reaction-diffusion. Pretty good, except some equations are mis-entered, and symbols are often under-explained in my opinion. But there is some Fortran code! (how long has it been since I've done Fortran? Wow, I must have been about 11 years old.)
- Generating Textures on Arbitrary Surfaces Using Reaction-Diffusion -- Greg Turk's excellent paper on reaction-diffusion.

- Reaction-Diffusion Textures -- multigrid sounds really important
- Reaction-Diffusion Textures by Andrew Witkin and Michael Kass -- anisotropy
- Self-replicating spots -- Gray Scott model, choosing factors for Turing systems.
- A Simple, Efficient Method for Realistic Animation of Clouds by y.Dobashi, K.Kaneda, H.Yamashita, T.Okit, T.Nishita -- fast cloud generation.

*Last updated: 2005-11-11*