Terrain Normals

Normals are required in order to compute lighting equations on the vertices, aswell as pysics etc.  and for the last two weeks, I have been implementing them into the terrain node generation code.

This shouldn’t really have been a problem as normal generation is generally a straight forward process, but, and there’s always a but, I did have a few problems.  A normal is perpendicular to a surface, so in order to generate a normal for a vertex, you need only get two direction vectors from adjacent vertices and take a cross product of the two.  To improve the acuracy of the normal, you can sample more vertices and average the result (so sample above, left, right and below the current vertex).  This worked pretty well, but I’ve still got a few problems, because a terrain patch doesn’t have information on adjacent patches, the normal generation of vertices on the edges of patches are not very accurate, and sometimes leave visible seams between patches, where the slope gradient changes.  This shouldn’t be too hard to fix, so I’m not too concerned about it at the minute.

Now that I’ve at least got some working normals on the terrain, I’m currently working on getting a skydome (another instance of the planet, just slightly larger and without height information), onto which I will hopefully be able to use Atmospheric and Terrain Scattering effects.  There is a  good article here (GPU Gems 2) by Sean O’Neil which details how to implement atmospheric scattering both from within the atmosphere and from space.

Here are a few more screen shots of the terrain at the minute.  N.b. I haven’t implemented water yet, but to get a better idea of the ‘lay of the land’, I changed the colour of vertices below the water line (0) to blue.

  1. Leave a comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: