For this specific environment, I had to create a whole mountain chain. In order to create the kind of silhouette for the back mountains that I wanted, I needed multiple instances of the HeightField terrains that I created. Even though these were instances of the geometry, because of the scale and number of polygons it still was very heavy for the scene. As a solution for this problem, I decided to bring all GEO of the background mountain chain in Maya and merge it together, deleting all intersecting and unnecessary polygons. I ended up with one geometry for the whole mountain chain on the background and one geometry for the areas that I wanted to texture as sand. Procedural generation for terrains is an amazing tool, but it is hard to do only procedural modeling if there is something very specific that I want to achieve.

This solution I came up with, is a unique way of dealing with a big mountain chain situation – to merge it all into one geometry. This solution works if I have a very specific silhouette in mind, and I can’t get it from one generated terrain, or when I want the terrains to also cover the bottom of the ocean, or when I need to have very specific UVs.

For the foreground terrains, I kept the instances because I needed to use the masks that I baked out from the original HeightField terrains.

Vegetation Scattering

For vegetation, I used the SpeedTree asset. I started from one type of tree – a palm. Trees needed to go on top of the terrain but shouldn’t cover 100% of it. I needed to use some sort of mask, that indicated where the trees should and should not grow. I created multiple variations of masks by using the HeightField MaskbyFeature node and backed them out from HeightField Output node: