Many faces of Procedural Generation: Determinism (classification system, part 3)

Welcome to the third part of this Procedural Generation (aka ProcGen) classification series called “Many faces of Procedural Generation”. To see the previous part click here.

In this post we’ll talk about determinism in ProcGen, which makes sense especially for run-time generation (load and real-time). Procedural does not mean random. Even if you use some kind of (pseudo) random function, if you use the same seed, you’ll get the same results. Here is how you can classify it:

  • Deterministic generation: When, given the same inputs, you can get the same output. If you are dealing with a large amount of generations, you may need to do some testing to ensure that you do not get any unexpected results or get an outcome that doesn’t interfere with the game’s objectives.  A good example of deterministic generation is the Universe of the much expected No Man’s Sky, where it’s always the same Universe being generated for everyone (with 18,446,744,073,709,551,616 (18 quintillion) planets, that’s a lot of testing). Another is the 96kb 3D game .kkrieger in the generation of all its content.

    No Man's Sky 1
    From No Man’s Sky
  • Deterministic at load-time generation: When you get a deterministic generation only after you’ve loaded the game level. Basically, once you get the initial random inputs the generation becomes deterministic. A few examples of this are the worlds in Minecraft and the level layouts for Rogue-like games such as The Binding of Isaac.

    BOI
    From Binding of Isaac
  • Non-Deterministic generation: When you cannot determine the outcome of the generation. Even if you can vaguely predict the outcome generation (because of probability functions), with Non-deterministics you never know for sure. Stateless. An example of this are the obstacles of infinite-runners such as Temple Run.

    P2-TR

Hope you guys enjoyed this part of the classification system and check out the previous parts if interested. Let me know if you have any comments or other considerations that I missed 🙂

ANNOUNCEMENT: The project Sceelix – 3D ProcGen Engine – that I’ve been working on with some friends for the last year has finally come out! Woohoo! Check it out at www.sceelix.com. Trial version available 🙂

 

Subscribe to this blog here: eepurl.com/bSgft9

Join and Invite others to the slack on ProcGen! procgen.slack.com sign up: bit.ly/procgenregistration

Join and invite others to the facebook group on ProcGen! bit.ly/procgenfb

My twitter account: twitter.com/grillher

Advertisements

2 thoughts on “Many faces of Procedural Generation: Determinism (classification system, part 3)

  1. technically, speaking they’re all the same type, no man’s sky has a “universe seed” value that players cannot modify, minecraft has a seed that is set upon first creating the world, binding of isaac has a seed that is set upon starting a run, and temple run also has a seed that is set upon starting a run

    this means that all 4 of these games use random generation in a way that is technically deterministic, however isaac, minecraft and temple run allow players to set the seed based on time, whereas no man’s sky has hardcoded the seed that players will use (although technically every star in itself functions as a seed value as well)

    Liked by 1 person

  2. Exactly 🙂 This is considering a black-box approach in order to allow anyone to specify what we can expect without going in to a technical field. Because the reality is that if you use deterministic values (like time) to define the random seed, the generation is technically determinable.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s