ProcGen: pros and cons

In this post I discuss the pros and cons of using procedural generation (ProcGen). This type of analysis is a good way for you to understand when you should use it and it varies depending on what you want to do. Some case examples in my previous post here.

The root cause for some of these arguments in favor or against might be the same. Here are a few of the most common pro and con arguments:

([+] for pro, [-] for con, [+/-] for depends)

  1. [+/-] Efficiency: How fast we can design our scenes? Whether ProcGen is more efficient than manual content sculpting, really depends on what you are doing. If you want to model a single 3D building, for instance, then maybe ProcGen might not be as efficient as the manual method. On the other hand, if you are to create 10, 50 or 100 buildings for a city then you could reconsider. In short, ProcGen can have a larger overhead than manual modelling but after you “break even” timewise, ProcGen can become infinitely more efficient.
  2. [+/-] Cost: How much time and money does it take to create? When it comes to the cost of using manual vs ProcGen, efficiency plays a big role when you consider the saying “time is money”. Another factor that influences cost is whether you create your own ProcGen system or use existing solutions such as SpeedTree, Houdini or Sceelix (shameless plug). Although you need to pay for the licenses, it may compensate the time your team saves.

    CityGen.half
    from Sceelix
  3. [-] Control: The ease to define certain designs and properties. When you want to create content with total control and specific details your best bet is to create the content manually. For your time, wallet and sanity’s sake.
  4. [+] Monotony free: If you have to create 100 3D buildings by hand, that can be a very tiresome and repetitive job. This is a point commonly made by game designers in favor of ProcGen.
  5. [+] Scalability: The ease to create small scenes as well as large. Once you determine the properties and parameters of the content you want to generate procedurally (which generates the overhead previously mentioned), the time it takes a PC to generate any amount of content depends solely on the limitations of the PC. Basically, from making 10 building to 100 can be a matter of seconds.
  6. [+] Compression: As you may remember from the high ProcGen purity game from my previous post, a whole 3D first-person shooter level fit into a 96kb executable because all its content (3D meshes, textures, sounds) were generated procedurally. When the game loaded up it used up over 300mb of RAM.
  7. [+] Paranoia: Is this tree distribution random enough? Or the number of branches and sub-branches for that matter? Aaahhh… ProcGen can give you more peace of mind in that sense, if you feed truly random seeds to a properly bounded system. Testing is always important specially if generation is at runtime.

    Printscreen 131021993101893786.png
    from Sceelix
  8. [+] Consistency: The guarantee that elements follow the same style and working principles. Almost in the opposite side of the spectrum from the previous point: Do these trees look like they’re from different planets? If you have a well rounded ProcGen system or tool specification, you can better guarantee greater consistency between content of the same type than if you did them manually. If you don’t, it can be a problem. Again, testing is important.
  9. [+] Reusability: Being able to make the most out of your work. Some ProcGen systems have a high reusability factor. Changing a few parameters could generate a whole new set of content. This also brings value you should consider, if you decide to create one. The more you can reuse it, the better the investment is of creating or specifying one.
  10. [+/-] Manageability: The ease of controlling the resulting output. If you are talking about creating large quantities of content, ProcGen can give you centralized control over the overall result. If you are dealing with small quantities, manual creation will give you more control. Some ProcGen tools also give you more control by giving you visual languages (normally node-based) with parameterization.
  11. [+] Adaptability: change to obey the rules you defined in your system. If you make a building double its original height, then the number of floors could automatically double. If the ProcGen system you use is well developed, you may change one of its parameters and the resulting output will adapt to meet the constraints you have in place.

    ParamHouse.half
    from Sceelix

These are the broad strokes. There are also some general considerations you should have when you use procedural generation, but that I’ll leave for my next post.

If you remember more arguments beyond the ones I mentioned, or have any feedback, let me know 🙂

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

Many faces of Procedural Generation: Degrees of ProcGen (classification system, part 2)

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

In this post I’m going to introduce a new concept:

ProcGen purity: This concept is a scale mainly used to compare the methodology’s contributions to the final resulting product in different ProcGen strategies. This is important to have in mind because ProcGen can complement a game designer’s work in many ways.

Here are a few strategies used by game designers to explain the relative generation purity:

  1. Half and half generation: When you procedurally generate part of the content and produce manually the remaining content. For example, if you are creating a 3D city or forest, be it in real, load or design time (check my previous post), you may want to create the meshes procedurally and use manually produced textures. This would stand somewhere in the middle of the purity scale.

    3Dcity
    from Sceelix
  2. Placement generation: When you (manually) produce most of the content and depend on ProcGen methods to place on set. This can also include basic transformations such as rotations and scalings. For examples like below that you have manually modelled 3D cars that you just want to scatter copies of it randomly on a parking lot (could also randomly apply tint and change the car’s direction) this is a good method. This strategy is also popular to randomly spawn enemies. You could also use external data from a database to define the placement. This strategy stands in the low end of the purity scale.
    ParkingLot
    from Sceelix

     

  3. Pure generation: When you produce all your content procedurally. Meshes, Textures, sound, behaviors… If the 2004 german game .kkrieger is not 100% pure ProcGen it is very close to it (load-time ProcGen). So much so that its only 96kb in size (compression is a result of ProcGen) but once it is loaded it goes up to over 300mb in you task manager. Take a look for yourselves if interested (download here). This is at the top of the purity scale.

    krieger.gif
    from .kkrieger

These are just a few examples of ProcGen strategies and combinations.

But remember, you should only use ProcGen if it makes sense to you and complements your work (not replace it).

Hope you liked this post! I still have more parts to these series. Let me know what you guys think! 🙂

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 (I’ll add people once we get critical mass 😉 )

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

My twitter account: twitter.com/grillher

Many faces of Procedural Generation: When is it used? (classification system, part 1)

ProcGen can be used in different ways for lots of different reasons. Because of this, and to know what we are referring to, classification systems can be adopted to characterize these different types of use. In this “Many faces of Procedural Generation” series, I’ll show you some ways you can classify ProcGen.

In this post, I will outline the ProcGen classification system I use to describe when the ProcGen content is generated.

  1. Design-time generation: When you generate the content beforehand and include the result in the game being developed. You may change anything that needs tweeking, giving you more artistic freedom. This method is used in some open world games, like for instance Ubisoft’s “Assassin’s Creed: Unity” to create their city blocks and other specific environments. Check out this video from 5:05 on this:
  2. Load-time generation: When content is generated before the game, level or sub-level is played. Very popular with roguelike games like “Dungeons of Dredmor”.

    P2-DoD
    Dungeons of Dredmor
  3. Real-time generation: When content is generated while the game, level or sub-level is played. Very popular among infinite runners such as “Temple Run”. Also used in “No Man’s Sky” to create their massive open world.

    P2-TR
    Temple Run

I’m not sure how many parts these series will have but I’ll post part 2 soon! Hope you liked it and feel free to let me know what you guys think! 🙂


Subscribe to this blog here: eepurl.com/bSgft9
Join the slack on ProcGen! procgen.slack.com sign up: bit.ly/procgenregistration (I’ll add people once we get critical mass 😉 )
Join the facebook group on ProcGen! bit.ly/procgenfb
My twitter account: twitter.com/grillher