Shader Work

The shader projects I finished while in university

I created a number of graphical shaders during my university work. I love the look of the Legend of Zelda Windwaker so I emulated a number of graphical tricks and effects the developers of that game used. I implemented this in DirectX 11.

The ocean starts as a flat mesh with a repeating tiled texture. I then displace the vertices by a number of multiplied sine vectors in the Y direction iterated through time to create irregular waves. A sine wave is also passed into the UV coordinates for the texture so the texture itself seems to be moving with the waves. These two techniques create an irregularly moving ocean that emulates a cartoon style. It looks good without using too many resources, which was a concern when developing the game on the GameCube.

I then created a method of procedurally generating Windwaker like islands through the use of the Voronoi noise algorithm to create angular shaped islands similar to the original game.

The height and angle of the vertices are determined by a vertex shader and are given a corresponding texture to create the angled cliff facings of the original game. Finally, to create the ocean foam a custom shader is implemented. The shader determines where the terrain mesh and the ocean mesh intersect by using a depth pass. It then highlights the line of intersection with white which is then rendered over the top of the scene.

I implemented a custom cel shader in Directx11, clamping the light values to 3 distinct levels. I also implemented a Sobel shader that outlines the rendered 3D objects with a black line. These emulate the character shading that the game implements. This standard teapot model demonstrates my shading techniques with 2 different light sources shining on it.