No Man’s Sky and Procedural Generation


The other day I was MUSING about procedural generation and thought I would write a bit about my opinions.  With the release of No Man’s Sky, a game that was hyped as a game with innovative use of procedural generation, it seems like a timely subject. The reviews were mixed and it seems that many blame this on the use of procedural generation in the game (as well as other things which I will not get into here). On the other hand, some reviewers find this the only redeeming quality of the game.

As a developer, procedural generation is an amazing tool. It allows you to create more variety and it cuts down on tedious hand crafted level design. A small team can make a large world, or more visually interesting levels, in much less time. Imagine a game the size of NMS if each planet had to be hand crafted, each tree, each clump of grass, all placed by a developer sitting behind a desk.

I use procedural generation in my design work. My worlds are generated using a tool, called World Machine, that uses various “rules” to generate a terrain that appears to be similar to real world landscapes. Sure, I could build a terrain by hand, use Unity’s awkward brushes to add hills, rivers, etc., but my results would be no where near as beautiful without the erosion algorithms that WM brings to my hills, valleys, and mountains.

I also use procedural generation to place grass, trees, and rocks. Again, placing each piece would be time consuming and limit the size of the world based on the time I have (or the number of level designers I can recruit).

So…procedural generation is awesome! It saves time. It allows for more realism in a landscape. It makes it easier to create a large world.

BUT…and you knew there would be a but, right? I mean this is me after all.  But…what do we lose when we replace hand crafted scenes with completely procedural methods?  Do players need the detail that only can be created by a developer lovingly adding blades of grass around a pile of rocks or a puddle in a low spot on the terrain? Do players care about this stuff or would they rather run around and kill stuff?

I have played a lot of games, not as many as some of you, but enough to form a personal preference for game environments. I have ran across the landscape of Tattooine, the endless miles of almost identical landscape being interrupted only by huge creatures leaping over a rock and chasing me.  I have passed the same hill with the same tree endless times on Naboo.  I have crossed miles of empty hills, and grassy plains with nothing to break up the monotony.

Until, I came around a bend and saw a lake with a plunging waterfall. Or walked through a nighttime city, with soaring buildings.  I remember swimming in an endless ocean and watching the sunset over a desert.

If you haven’t read about the work done to create these interesting planets, I suggest you do so. I found an excellent article on Ralph Koster’s website.

Remember, this was 2003, 13 years ago and a million years in technology time. So much has changed. The fact that No Man’s Sky was able to create an endless universe using similar methods with a 15 person team is mind boggling.

I can remember being enchanted in those old days when entering a charming hand crafted village in Istaria or Everquest. I still have a vague memory of some magnificent, although empty city in some game I played. The vision haunts me but I can’t recall the game at all. Of course, none of this compares to Witcher or any of the newer games. Graphics cards and processors are so much more powerful and we can do so many things that back then were not possible. When working on Adellion some 15 years ago, I remember players asking for features that were impossible…and now, they are easily done.

Where am I going with this?  Procedural generation is a fabulous way to build large worlds and create the feeling of expansiveness. But…the best choice, in my opinion, is the marriage of both procedural generation and handcrafted details. While the world may be a huge World Machine terrain map, with hills, valleys, and mountains, the villages and points of interest are laid out with all the randomness of a true village.  Lighthouses are placed on a rocky coast to signal to the approaching boats. A city has a few hidden dark alleys, with broken lanterns and piles of debris.  When traveling through those hills, one comes across a hidden spring. It is those small details you come across while traveling that you remember.  Even a tree, it’s roots clinging to the rocky side of a mountain…you will remember that more than the endless generated terrain.

I was impressed by the screenshots and videos I saw of No Man’s Sky and the planet’s terrains. The art style lends itself well to the exotic alien planets and gives a sort of playful feel to the visuals. The generated grasses, animals, and caves were interesting and unique. I am curious about whether there are those little surprisingly beautiful spots that you will not find anywhere else in the universe. I suspect not and I imagine with any sort of seeded generation there will be repeats. And that is okay but does it lose something without those little surprises?

But remember….

An unlimited Universe…built by 15 team members. I recall when something like that could never be imagined for a game. Of course, last Saturday at a Unity User group meeting, I put on a headset and look up into space. I never thought I could do that either.

I love making games!

Below: Procedurally generated terrain, trees, and foliage.

Screen Shot 02-03-16 at 09.14 PM

Teila

 

 

This entry was posted in Musings, Terrain and tagged , , . Bookmark the permalink.

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