In preparation for the Game Developer's Conference we wanted to put a polish pass on the planets in Star Control: Origins.
There are about 3,000 unique planets that are split into roughly 75 different classes. Each class of planet has its own challenges, as well as its own mineral deposits that you might want to collect (along with ruins, cities, smugglers, creatures, etc.).
Today, I'm going to walk you through how we create our planet classes.
Unique, Procedural and Hand-Crafted
You can't hand craft 3,500 planets. And it would not be a good thing for every planet class to be the same. So how do we solve this? Through a mixture of procedural generation and designer balance. And this gets me up to "Programmer art" level.
The Primordial world
One of the planet classes is known as a Primordial world. These are worlds that are still simmering with active volcanoes, have a variety of minerals, and occasionally have life.
A humble beginning
Yea...not so pretty
But that's ok. We can fix all that.
We start with our planet template which is called...wait for it...Primordial. This file refers to materials (what thinks look like) and stamps (what things are shaped like).
In the game, they're located here:
-
In assets\PlanetTemplate are the types for every planet.
-
In assets\Terrain is the default.terrainmaterial set.
-
In assets\Stamplists the stamplists are available.
-
In assets\Stamps are the stamps the stamplists use.
Setting it up
From my Primoridal planet template, I set up the stats and choose my stamp list. The stamp list is a series of stamps with weighting on them that helps determine the odds of a given stamp being chosen for a particular planet at a particular time. This way, every planet looks different.
Choose our stamps and weights
Now that I've set up my stats (the weather, what minerals are likely to show up, odds of life, temperature, gravity, etc.), I choose what stamps will be on there. Now, the fun starts.
Code: xml
- <stamplist>
- <stamp asset="Mountain01_Basev05" weight="1" />
- <stamp asset="TextureVariation_Grass" weight="1" />
- <stamp asset="TextureVariation_Flowersv1" weight="1" />
- <stamp asset="ForestA_v1" weight="1" />
- <stamp asset="Volcano01_Basev01" weight="1" />
- <stamp asset="Hill01_WispyRockv01v02" weight="1" />
- </stamplist>
That's just me picking 6 stamps and putting them up. Just curious what that will do. I hit F5 on the planet and...
Mmmm. Bumpy.
Trial and Error
Over the next several minutes I pick various other stamps and end up with this:
Code: xml
- <stamp asset="ForestA_v1" weight="1" />
- <stamp asset="ForestA_v2" weight="1" />
- <stamp asset="CanyonCap01_Basev01" weight="1" />
- <stamp asset="CanyonOpen01_Basev01" weight="1" />
- <stamp asset="CanyonStraight01_Basev01" weight="1" />
Time for some atmosphere
Back in the planet template file, I can set up my atmosphere. Basically, what color is it, how transparent it is, and how thick is it.
Final Result
My Primordial planet
Now it's ready to leave the designer's "programmer art" state and move to the artists for further polishing and iteration over the months.
This is just one class of planet. Each planet of this class will be different. But you can also create specific, individual planets that can look like anything you want.
I suspect there will be a big library of planet classes made by fans (as well as specific planets) that will easily blow away my quick work here, or even the final effort, based on what I've seen people do in other games.
Feel free to ask any questions.