Planets Over Time
Hey everyone, I've been getting very positive feedback on the updates lately so I'm trying to continue in the same vein of looking back over the course of development on specific elements of the game.
But first just wanted to point out that we're over 80% funded now with 3 weeks still to go. As I had expected, the pledges coming in have dramatically slowed since the first few days but I think the project is in a comfortable position to hit its target before the campaign ends. Also worth noting that there's only 4 days left for the early-bird tiers, so if you know anyone that you think might enjoy Jettomero then now would be a great time to share this campaign with them. Thanks for everyone's support so far!
Now, on to a retrospective of the planets in Jettomero.
The original planets were just spheres. When I was starting out with my locomotion system this simplified a lot of problems since I knew that drawing a line directly from the center of the planet to the surface would always be the same direction as the terrain at that point. The texture on the planet here is a placeholder I made by thresholding an image of the moon's surface - but I knew I'd have to create my own textures sooner or later.
Since I wanted to make as much of the content procedural as possible I started playing with sampling random noise to generate a texture on the fly. I could get an interesting variety of textures this way.
I would also sample several scales of random noise and match them against one another to create multiple levels of patterns for each planet. It was a lot of fun tweaking parameters and seeing what kind of styles emerged.
But the planets were still all perfectly round. So my first attempt at mixing up the terrain was modelling mountains that could be attached to the planet. But I didn't like this solution for several reasons: 1. It limited the procedural possibilities since it was using pre-created models for the terrain, 2. It didn't offer an effective way for me to create indentations in a planet's surface, and 3. Having multiple pieces of terrain for my locomotion system to check against was not very efficient.
I decided I had to write some code to modify the vertices of the planet at runtime. I was very excited when I got this working!
Now I could have oceans and lakes just as easily as mountains and hills. And it was all part of the same mesh. My initial terrain deformation code used random noise similar to how I was generating my textures. I would threshold it in certain places to create flat ground and would then raise or lower the terrain based on the greyscale value of the noise.
Here's an example of one of my procedurally generated terrain maps.
I iterated on deformations for a while and as everything moved along I realized I wasn't satisfied with my random noise-based textures anymore, they were very blobby and spotty and didn't fit the comic-book aesthetic I was moving towards more and more. I had some hand-drawn planet textures lying around from an old game-jam so I brought these in to try to re-use them. I really liked the lines in here but it wasn't a good procedural solution.
I wrote a system to layer and rotate and scale these hand-drawn textures and then save them into a new texture at runtime. This provided a decent random mix of textures (although I knew I would need to add more to sample from eventually).
You'll also notice that when I switched over to using pre-drawn lines I also modified the planet colours to include 3 tones (black, shade, normal) instead of the simple 2 tone system I had been using previously. This was a global shader change and was an important shift for the style of the game. It was also the first time I started to modify the shaders (which I had previously purchased on the Unity asset store). As planets evolved I started writing them special shader treatment - the image above shows the black fringe along the edge of the water - this was entirely shader driven based on the distance of the vertex from the center of the mesh.
I was feeling pretty good about the texture and terrain at this point so it stayed that way for a while. Eventually I realized I wanted more variety in the terrain styles, and using my random noise-based system was no longer ideal. So I wrote a new terrain deformation system that basically dropped a bunch of objects around the surface of a planet - each with specific directions on how it would handle the terrain there (up, down, flat). By controlling how many and how large these deformer objects were I could create a wider collection of planet types.
I could now do things like extra big mountains and even volcanos using the new system.
Back to shaders again - I wrote a custom shader for the water around this time to give the oceans shallow areas. I hadn't paid much attention to the water until now but this was a very positive change in my mind.
I also expanded the planet shader to use the height of the terrain to draw snow-capped mountain tops (additionally based on whether the planet was close to the sun or not). I was able to use a noise map to create a rough edge around the fringe, which I would later apply to my shorelines as well to create a more organic look overall.
As I mentioned earlier, I would need to expand my texture sources for more variety. But at this time I upgraded to a new version of Unity and discovered the joy of their new line-renderer in the particle system. So I started playing with this and ended up modifying my texture generator system to use particle-drawn lines as my source texture. By modifying multiple particle systems I could get a great variety of textures this way.
As you can see here the Unity particle system using a line-renderer can create some fun stuff!
So I thought I had everything taken care of, until I started playing with some post-processing effects and realized I had found a much better way to render all my lines. I also moved away from using straight black and all my darkness was replaced with very dark shades.
I find it a little disconcerting that this significant visual shift was essentially a last-minute experiment but I'm extremely glad things ended up the way they did.
There's a lot of things I didn't touch on here - like the planet decorations and planet auras but I think this update is starting to get a little long. If there's anything specific you'd like to know more about just let me know in the comments. I've planned out updates now for the next 2 weeks but I'm open to suggestions about what else to talk about.