Procedural Generation (definition from Procedural Content Wiki) – “Procedural content generation (PCG) is the programmatic generation of game content using a random or pseudo-random process that results in an unpredictable range of possible game play spaces.”
The concept of a procedural generation cost analysis first came to me when I started toying around with the notion of procedurally generating a “bullet hell”. The primary issue with something of this nature is creating a feasible play experience. In a bullet-hell, the game has a predetermined “route”. To create something like this procedurally, one would need to analyze the player location and potential future locations, to ensure that spawned bullets do not “checkmate” the player into a no-move situation. This creates an extra layer of complexity in the production of the mechanic, but would add to its overall playability.
I’ve often considered what the lowest level of names would be for “procedural” and “hand-crafted”. It seems like the best alternatives are “automatic” and “manual”. These are terms that have a neutral connotation, whereas procedural generation has many expectations and biases that may not be accurate for this post. The one disadvantage of these terms is “automatic” doesn’t express the random aspect of procedural. Another discrepancy is where the line is drawn. When does manual become automatic? If a designer places an instanced object on a map, is he manually placing an object, or is it being generated automatically based on the template? (I’ve never been a fan of the challenge of semantics)
I was speaking with a friend regarding the creation of normal maps. The topic turned in to a discussion of CrazyBump -vs- Sculpting (ZBrush), and how this relates to this topic. The concept was that CrazyBump is the “automatic” to ZBrush’s “manual”. The dilemma with this argument is that CrazyBump and its ilk do not randomly generate the maps. They create them “automatically”. So, if someone was to place a random factor in CrazyBump, is it now procedural? If every asset can be done procedurally, why handcraft anything?
The topic of procedural generation replacing roles within the industry has already been approached, and far better then I could hope to do in this post. The topic is still a very valuable point to be made towards/against procedural generation. The thought of Luddites within our industry can be intimidating, but nonetheless should be addressed. If you are interested in this topic, please let me know in the comments, and I would be happy to address it further in another post.
A point made by Eskil in Lost in a sea of source code is that the more complex the systems become in a PG game, the more difficult it becomes to debug and implement new features. This is true for any game, but there is a difference between procedural and manual. Procedural content is easier to produce, but harder to manually test. Perhaps, like other roles, the position of testing can also be done procedurally.
While prototyping the bullet-hell, the question arose- “Is it worth procedural generating?” I knew that the system could be done procedurally, it was rather simple to visualize the algorithms that would analyze a player location, and raycast the bullet trajectories to see if they prevent a move in the upcoming moments in the game. But, the question still persists. Is it worth it? How long would it take to create such a system, and how much content could I create by hand in that time? I did a quick guesstimate that it would take me ~4 hours per handcrafted level to design a balanced playable experience. How long would the procedural generation take? I guessed 20+ hours. So, in the time it would take to procedurally generate the system, I could handcraft at least 5 levels.
Next, I addressed was the structure of my team. In this case, it was only myself. I suck at level design. Therefore, it was in my best interest at this time to go with procedural generation. My reasoning was that even if I was able to make at least 5 levels, they wouldn’t be of the caliber that expert bullet-hell designers make. If I had a bullet-hell level SME in my reach, I may have decided otherwise.
Then, I covered the aspects of gameplay. Does this genre benefit from procedural generation? Assuming the PG is at par with the quality of handcrafted work, are there any distinct benefits of one over the other? In this case, I determined that I would be unable to answer this question without prototyping the PG version, or at least finding one. This is a failure on my behalf, and my lack of experience in the bullet-hell genre. If I was a connoisseur of bullet-hells, perhaps I would have been able to perceive the difference in the systems. One value I was able to determine for this game is an infinite game mode. This is something that would be impossible to do without procedural generation, and a feature that is only feasible with procedurally generated levels.
Lastly, I analyzed the market. Is the bullet-hell genre one that craves more content, or higher quality content? Based on forum reviewing, the answer in this case was both. However, there were many “hardcore” players who desired more content over an improvement to the quality of the current content. Since procedural content allows for a larger quantity of content, it seemed reasonable that it would be the acceptable route.
To summarize, I broke down a few key questions to ask before determining whether something should be done by hand, or procedurally. While I do not believe this to be a complete list, I consider it a good start.
- How much does procedurally generating an element cost? How much would it cost to manually handcraft this element?
- How long would it take to procedurally generate, compared to manually creating the content?
- What value is there in procedurally generating the content? Is there any additional qualities that can only be achieved through handcraft or procedural?
- How much random variation do you intend on introducing?
- What does your team dynamic best suit?
- Does the genre value quantity or quality higher?
- What difference in testing will result from procedurally generating?