procgen: build dreams, see beauty, learn to think

Three Pillars: A Simple Metamodel

Welcome to your first metamodel! You could probably also call it something like a framework. The Three Pillars model is a way of decomposing processes into a few high level ideas. Once a process is parsed into the three pillars, it can be much easier to find adjacent processes and free parameters within the process. Onward to the three pillars then: seed, update, and render.


The seed defines the initial conditions of our data. Before now we've seen examples of initial conditions making an impact on the result, for example when we seeded our diffusion process with random noise, a checkerboard, or an image.


An update determines how the system changes over time. It is a function that takes the current state and returns a new state (of the same type). We've seen several update rules on the same kind of data (a set of points) as defining different growth processes.


This is how we draw the data. It can define shape, color, or more complicated things like a composite operation.

Example: Chasing Points

Play around with the three pillars in the simple example below. We start with some number of random points in a cyclic graph (Seed). At each step each point moves closer to its neighbor (Update), then we draw a white dot at each point (Render).

See the Pen Seed Update Render explorer by George Hoqqanen (@hoqqanen) on CodePen.

Example: Process 13 (Points with Metadata)

Initialize points in a circle (Seed) where each one also has some metadata: a radius and velocity. Update each point by moving it in the direction of its velocity. Render a line connecting any two points that overlap given their radii. Play with the variations! (Thanks to REAS for this base process.)

See the Pen Points with Size by George Hoqqanen (@hoqqanen) on CodePen.