What makes “good” procedural content?

Lud
Procedural Emotions
3 min readJun 16, 2020
Photo by Alexander Mils

Procedural Generation has a mixed reputation. There are big fans like me, usually developers or players of roguelikes, and big detractors. You hear people sometimes saying things like “the moment I feel some text is templated I consider it filler and my interest immediately fades out”. This is a very extreme point of view and not necessarily true in practice, but certainly someone that says this sort of things has been exposed to “bad” procedurally generated content. This makes it painfully clear that PCG can be bad and that we don’t really have hard and fast rules to decide when it is, instead, good.

So if we are trying to make “good” PCG, we must declare what our intentions are, and verify that they produce content that the people consider good. So here’s my list. These are the points I’ve been focusing on while building these systems.

1. Variation

I try to make sure that there are more combinations that can ever be possible to explore, at each step of the generation process. This is not always possible, but it’s easier the more you go into detail with the process you are trying to describe. There may only be two types of countries at first sight, republics and monarchies, but if you look under the hood there are hundreds on variables that can alter the mix and make each country unique.

2. Diversity

I try to avoid what Kate Compton describes as the “10000 bowls of oatmeal” effect, as you can have many objects which are completely different from each other like two bowls of oatmeal, which have random numbers of each component, but get categorised by the human brain as exactly the same. I try to avoid this do this by making sure the are structural elements that vary considerably between instances and that the overall look of two random instances is macroscopically visibile. Fractal structure and the “squint test” may be of help with this point.

3. Consistency

I try to generate things that fit with each other. You can’t have a city in the middle of endless plains affected by a random event that turns out to be a landslide. This is difficult on multiple levels, both for the developer and for the computer. Often you can’t rely on generating elements “on the fly” because you need to have some type of information available beforehand in order to make everything consistent. In general it is possible to introduce multiple layers of online procgen that produce the information you need when you need it, but this is only possible if you can fit those additional layers in your time constraints. It’s often easier to have some of these layers generated offline, in advance.

4. Articulation

Sometimes many elements in a system are generated procedurally but the points of contact between them are static and can look repetitive and boring after a while. I try to introduce variety even in those points, and actually a big deal of my efforts go in the realisation of this part of the framework. Many opportunities are still unexplored.

5. Saliency

Just because you can generate an infinite amount of text, it doesn’t mean that the user has a in infinite amount of time to dig through it. This is why I try to generate content that has the highest possible information density and the highest possible “value” for the user. Each procedurally generated sentence should be as valuable and relevant as an authored one.

So this are my rules of thumb. I’ll try to adhere to this manifesto and to follow each of these guidelines, and will monitor the perceived quality of the results. Hopefully I won’t have to reconsider all of them, but maybe I will need to add something more or de-prioritize some of them and reinforce others.

--

--