The first part of the project was implementing a noise function on the GPU (based off the GitHub simplex noise linked in the handout). I used four-octave simplex noise in 4D, though I only visualize it in 2D below.
2D noise visualization
The next step was implementing tesselation. I tesselated an icosohedron into a sphere by normalizing points to push them onto the surface of the sphere. I adjust the level of detail based on the distance between the camera eye point and the icosahedron center.
The lighting is computed by using the facet normal (adjusted to a 0-1 range) as the starting color, then applying basic Phong lighting with a light source from above.
Icosahedron tesselation
Tesselation with noise
Tesselation with noise, alternate view
Tesselation with noise and phong lighting
I implemented screen-space ambient occlusion based on sampling nearby points from a hemisphere. I then blended the occlusion map using a gaussian blur. The final pixel value is the normal multiplied by the phong intensity multiplied by the occlusion.
Screen-space ambient occlusion (no Phong lighting)
Phong lighting and SSAO