Geomorph - The Desert Tutorial

Topics The scene layout

The intended result is a plain with a few mesa-style hills in the background. The camera is near the ground level. The foreground is deep and flat, to enhance the plain effect.

One height field and one ground plane with a sand texture are sufficient, apart from the sky with a very few clouds. We simulate dust with a very light fog, the same color as the sand.

The result

Desert scene


This tutorial uses the desert.pov scene provided with Geomorph 0.12 and higher. As a reminder, you click on to choose a Povray scene other than the default one.

1. Height field creation

Create a new subdivision 2 document.

Set the distribution to a high value. This would give "sparse" peaks.

Hit the refresh button until you get a few peaks grouped somewhere, or simply copy the seed given in the example.

It's not important if the peaks are not at the right place for now, we'll translate them later. What's important is that they are grouped in a relatively small part of the image, so that we can transform the rest of the HF in a wide plain - our foreground.

When "distribution" is set to 1, any surface displacement (peak or hole) has the same probability. When "distribution" is higher, important displacements become less frequent, so "holes" or "peaks" seem "sparse".

The distribution is an exponent, as seen in this formula, given that RD is the calculated random displacement and varies between 0 and MAX :
Note that MAX depends on the scale, which depends on the subdivision step. Actually MAX is divided by 2 at each step.

2. Using the power transformation to flatten the terrain

The purpose is to decrease the lower parts of the terrain, so that we get peaks on a plain.

You can use the default parameters of the power transformation here. It raises each pixel height to its square (the "Parameter" is the exponent), then "clamp" the values so that they fit in the height field range (0-65535).  If the surroundings of the peaks seem dark enough, accept the result. Otherwise, click "Reset" and try with 3 or a higher value. With a high exponent, the ground flattens and looses all details, if it is what you want.

Hitting "Apply", then "Repeat" with an exponent of 2 is the same as "Apply" with an exponent of 4. Hitting "Repeat" twice with an exponent of 2 (after "Apply") an exponent of 8. It's multiplicative, not additive. Hitting "Apply" twice only reapply the same exponent to the original image, unless you accept the result after the first click.

3. Translating the terrain

We want to put the camera at the bottom center (South), looking towards the top center (North). It would be nicer with peaks centered West-East and moved North, in the background, so that the plain can be seen.

The "Translate" transformation is based on an interesting property of all height fields created with the subdivision and the surface addition algorithms of Geomorph: terrains "wrap", so that it is possible to tile them on a greater surface. It is also possible to apply them as a normal on a cylinder or on a torus seamlessly, if your can find a purpose for this. The West side "fits" with the East side, and so does the North one with the South one.

So, translating our image 15% East centers the peaks, and translating it 15% North put the peaks in the background.

In version 0.12, the document display "flickers" when you accept the translation. Although this could be annoying, it doesn't affect the result.

4a. Stratifying the peaks

We want mesa-style hills, so we'll use the "Terraces" transformation to stratify the peaks.

The stratification is a 3-step process, although the result is usable after the first step:
(1) Quantizing.
(2) Smoothing and removing unwanted noise
(3) Merging with the original image.

We'll discuss merging in point 4b.

A mesa has a very few altitude levels, unlike terraces used for agriculture. Let's choose 4 levels.

The stratification groups the 65536 possible altitude levels into the number of levels given by the user. Suppose that the height field values range from 10000 to 50000, here there would be 4 levels of 10000, the first one with resulting value 0, grouping all values between 0 and 9999, the second one with resulting value 10000, grouping values between 10000 and 19999, and so on.

The basic process creates levels of equal height. This could be boring. The random variation parameter alleviates this. The default value is 50% of the height of each level. Let's keep the default parameter. It can be read as "displace the altitude of the current level by a random value between 0% and 50% of the calculated difference between levels".

If you are not satisfied with the altitude of some levels, for instance if there are too many "needles" or narrow peaks, hit "Refesh" at will. The height of each level would vary, and so their surface, as long as your random variation parameter is not null.

Click on the left arrow under "post-processing" to get the "smoothing" and "artifact removal' controls.

Smoothing gives a more natural look. A radius of 2 here is enough, because we'll want to mix the result with the orginal, and to erode it with rain.

Use "Artifact removal" if your image contains annoying spots ("needles" when rendered), and if you cannot get rid of them by refreshing the random seed. It is in pixels. For a given effect, the radius should be proportional to the size of the image, so that 10 for a 512x512 image is equal to 20 for a 1024x1024 image.

Post-processing is expensive, so it is not immediate. To see the result, you must click "Apply", and wait.

Note that if you change the quantization levels, the random variation or the random seed, after post-processing the image, you must reapply the post-process.

4b. Merging the resulting terraces with the source

The preview shows a pretty boring flat plain around the hills. Rendering the desert.pov scene is worse (actually, the height field ground would probably disappear under the sand plane).

The last subdialog of the terraces options allows you to mix the source and the result in variable proportions.

It will restore some detail on the ground, while smoothing the edges of the terraces.

Click on the left arrow to display the dialog (if you don't have a huge desktop, you would probably hide the post-processing dialog by clicking on its right arrow).

The default "Mode" = "+" is correct for our purpose. The default "Mix" is 100% result, 0% source. Click on the "0" button at the right for mixing the source and the result in equal proportions. This is the ratio used for this tutorial. You can try different proportions.

5. Eroding the mesas with rain

You can render the scene now by clicking the "Povray with file choice" icon and choosing desert.pov. If you want to compare with the final result showed above, set the camera parameters as shown in step 6. It's already interesting, but we can give it a more natural look with water erosion.

The erosion must be light. We don't want to totally destroy the terraces edges. For a 512x512 image, you could try 25000 drops.

Render it, and if you are not satisfied, change the number of drops and hit "Apply". If you haven't clicked "Accept", it would reapply the drops to the uneroded height field.

If you only want to add drops, set the quantity to add and hit "Repeat". You avoid recomputing 25000 drops!

25000 drops in a 512x512 image are equivalent to 6250 drops in a 256x256 image, or 100000 drops in a 1024x1024 image. It is proportional to the surface, which increases like the square of the linear size.

6. Rendering the scene with Povray

The desert.pov scene from Geomorph 0.12 and higher is coupled with the preview camera.

The final result shown above is obtained with the parameters given at right.

Remember than the parameters are saved with the PNG height field. Here, the first camera is used. The other cameras keep the default settings, as used in steps 1 to 5 of this tutorial.

Maybe you'll find that your rendered image needs some tuning. Look at desert.pov in your prefered editor. The parameters that you are likely to change are grouped at the bottom of the file, under a line of "*".

For this scene:
  1. I decreased slightly the height field vertical scale (Y axis). You can also get it by using the brightness / contrast tool in Geomorph.
  2. I adjusted the relative position of the height field and the sand plane, so that the sand plane is not totally hidden by the height field in the foreground, and the height field is not totally hidden by the plane. It's more interesting when spots of sand are seen among spot of rocks. Very small move of the height field or the sand plane modify a lot the final look.
  3. I scaled down the sand texture a lot, by scaling down the plane. It's an infinite plane, only its texture reacts to scaling.
  4. I played a lot with the fog parameters, just above the line of "*". Fog is dust here, so it should be light.

Written in October, 2003

Back to the documentation index