Pseudorandom Pleasures

— or how to wrangle chaos

Stian Veum Møllersen / @mollerse

NDC Oslo 2025

Generative Systems

Generative Systems

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.

Generative Graphics

More specifically we want to talk about generative, or procedural, graphics.

Systems that produce visually interesting or pleasing ouput.

Generative Graphics

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

Randomness

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.

Pseudorandom

People have created ways to generate visually pleasing, but still sufficiently random, randomness: Pseudorandom Number Generators (PRNG).

Ken Perlin

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.

Simplex Noise

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.

Gradient Noise

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.

Gradient Noise

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.

Gradient Noise

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

Combining noise

We can even borrow tricks from additive synthesis to combine noise functions that can produce even more intresting noise.

Experiment

Because we have a way to paint happy little lines, we should do something creative with them.

Something simple →

Parameterize →

Multiply →

Animate

Fin.

Thank you for listening!


Stian Veum Møllersen / @mollerse

slides & code: github/mollerse/pseudorandom-pleasures-presentation