Planetary Terrain

Hey,

I have been working on a procedural planet generator for Unity and it is ready to be released to all of you in the Asset Store. Hopefully this package will help to make procedural planet generation more accessible to a greater range of games.

You can use it to easily design interesting looks for your planets, using a node-based editor and also by painting heights directly onto the surface.

I hope you like it!

[links removed]

Asset store link

Features

  • Procedurally generated planets with dynamic level of detail.
  • Terrain painting: paint features directly on to planet surface!
  • Powerful node-based editor to control the procedural generation.
  • Run-time generation for minimal application size.
  • Easily save planets to meshes and prefabs.
  • Full source code and shader graphs included.
  • Support for both Unity Free and Pro!

Some pictures:
1440522--77296--$1_crater_thumb.png
1440522--77297--$2_ground_thumb.png
1440522--77298--$3_lod_thumb.png
1440522--77299--$4_nodes_thumb.png
1440522--77300--$5_planets_thumb.png

Tutorial video:

https://www.youtube.com/watch?v=yOC0EKIpNRw

2 Likes

With this option you got all my attention. What about the price?
[/quote]

1 Like

It will be around 90$.

The mesh saving is really easy, literally a press of a button. You can also subdivide the surfaces so that for example one part of a planet has lots of detail while other parts stay low poly.

1 Like

Oooh! This looks quite nice! Whats the scale like with a First Person Controller?

Ok. And what about Dx11 and the colliders?

Thanks! The planets radius can be set by the user, so for example you can have the whole planet in 1 unit or you could set it to 100,000 units.

1 Like

DirectX11 is not required and currently the package does not take advantage of it.

There are options to generate colliders for each LOD level, for example you could generate only low level colliders, some mid-level or just the highest level. Or you could have multiple that are toggled on and off when higher level is loaded.

1 Like

Sorry about the question on DX11. I mean, can I use your tool with a project under DX11. No compilation errors?.

BTW, can i build a planet like this one?

It is good that you asked this. I just tested it on DirectX11 and the shaders DID NOT work out of the box, this is due to the shaders being made with Strumpy shader editor that does not support Dx11.

Fortunately I have already fixed the terrain and water shaders, the atmosphere will be fixed soon as well. I will post the fix as soon as possible!

You can definitely create a planet surface like that. Here is a quick attempt at recreating the terrain shape:

1441151--77388--$flat_mountains_thumb.jpg

Below is the terrain module that defines the surface. It is a default mountainous module that comes with the package. I just added the last Curve operator that flattens large parts of the terrain that are under certain height.

1441151--77389--$flat_mountains_module_thumb.jpg

Seeing the node editor and the use of the term “Module”, are you by chance using LibNoise for .NET ?

Looks pretty cool but $90 is a bit high for me on something like this.

Subscribed!

Not that I have a use for this, but im going to have to disagree with zerobounds. This looks like it is a lot of work with $90 being a bargain..

1 Like

*Is it possible to use a heightmap instead of those modules?
*What algorythm do you use for planet mesh generation?

Looks nice.

Hm the only problem i see for myself is that planet is too small and roundness is very visible for FPS. Is there possibility to increase how many terrains are included in single planet?

Also can you use custom shaders on planet like RTP terrain shaders?

Good observation. I have used LibNoise (in C++) in the past and I think the term has stuck from there. This project does not use LibNoise though, It is a custom system specifically written for this purpose.

Thanks for comments everyone!

There truly has been some work involved in creating this, but I am fascinated with procedural generation (and planets!) so it has been interesting. I originally started working on a planet generator back in 2010, then with Java and LWJGL, and later I decided to port the project to Unity. I have tried many different approaches with this and the project has slowly shaped in to what it is today. Making it all accessible for users has been my focus lately.

The generator modules produce 3D simplex noise that is the basis for the heightmap generation. Using static heightmaps would eliminate the dynamic level of detail feature and they would have to be tiling in all directions, but I can see this kind of feature could be useful. Currently you can only generate the heightmaps with the included tools. You may select not to use the LOD feature if it is not needed.

Here is a step-by-step breakdown of the main generation procedure.

  • The planet starts as a cube, each surface being stored as an array of points. Number of surfaces is determined by the subdivision level, starting with six arrays (one for each side of the cube) and subdividing each one to 4 more until subdivision level is reached.
  • Each point is transformed to a point in sphere surface with uniform distance between the points.
  • Each point is displaced by a height value given by the coherent noise algorithm for the given points coordinate in 3D space.
  • The points are scaled to the planets desired radius.

1441457--77427--$sperify.jpg
The sperifying.

1441457--77428--$subdivision.jpg
Initial subdivision levels.

The LOD works by further subdividing each surface to 4 smaller ones and generating each new one with the same procedure.

You could make the planet big enough and set the noise frequency higher (this makes the features such as mountains smaller in comparison to the planet size) so the roundness effect wouldn’t be that pronounced. I hope I can provide you with a test scenario later.

See above for the terrain/surface count.

This is something I will definitely look into. There is already an option to select which shader is applied to the surfaces, but I will have to look into what kind of input textures need to be generated.

So it does subdivide the whole sphere and not patches?

Initially (when the LOD has not kicked in) the planet can be subdivided anyway the user specifies. So it can be 1, 4, 9 or more patches for each side of the sphere. The LOD will from there on subdivide the initial patches to 4 smaller ones, and those to 4 smaller and so it goes on.

Planetary Terrain 1.0 is now available in the Asset Store!

https://www.assetstore.unity3d.com/#/content/13418