— or how to wrangle chaos
Stian Veum Møllersen / @mollerse
NDC Oslo 2025
Any (interesting) system produces something, so what makes generative systems special?
The defining property of a generative system is that it uses simple rules and inputs to produce complex outputs.
More specifically we want to talk about generative, or procedural, graphics.
Systems that produce visually interesting or pleasing ouput.
We want the system to surprise us, or be novel in some way.
Why make one output, when you can just as easily make a thousand, right?
Randomness is a way of giving the computer choice.
Where humans are bad with choices, computers are really good. They can only adhere to rules.
People generally prefer things that are not completely random.
People have created ways to generate visually pleasing, but still sufficiently random, randomness: Pseudorandom Number Generators (PRNG).
The inventor of the most famous function for pseudorandom noise for use in graphics: Perlin Noise.
Invented in 1982 for use in the movie Tron. For which Ken Perlin in 1997 won a Technical Achievement Oscar.
This is the heir to Perlin Noise. Same principle, only more performant and with fewer visual artefacts than it's predecessor.
Invented in 2001 by Ken Perlin.
The principle behind Perlin and Simplex noise is called gradient noise.
It's defining characteristinc is that small change in input leads to a small change in output.
A very cool property of gradient noise is how it generalizes to higher dimensions.
So you can sample values that adhere to the same rules along multiple dimensions.
Technically the PRNG, or noise, function produces a value in
[-1, 1] given an input.
When talking higher dimensional noise we talk about the input to the noise function.
noise1D(x) => n
noise2D(x, y) => n
noise3D(x, y, z) => n
noise4D(x, y, z, w) => n
We can even borrow tricks from additive synthesis to combine noise functions that can produce even more intresting noise.
Because we have a way to paint happy little lines, we should do something creative with them.
Something simple →
Parameterize →
Multiply →
Animate
Thank you for listening!
Stian Veum Møllersen / @mollerse
slides & code: github/mollerse/pseudorandom-pleasures-presentation