For this project I experimented a bit with opengls tessellation shaders, as well as some other effects.

Manual tessellation:

All form of tessellation is based on triangle primitives. In this case, it is simply incremented manually for inner and outer values. Outer values all share the same value.

Adaptive tessellation, depth & angle:

For both of these, the outer tessellation values are computed depending on the information gotten from the two vertices each side corresponds to, and the inner value is computed as the average of all three vertices.

For the angle, the camera forward vector is compared with the vertices normals. This is done because the faces that are looking towards the camera need less details, since it is the edges where the lack of detail (in this case tessellation) is more apparent.

For the depth, the distance from the camera to the vertices is used. This is done because the further an object is from the camera, the less detail we need to see it well enough, since the object/face will be smaller.


Depth render:

As the name suggests, simply the scene rendered as a gray scale depending on the distance. Closest position is black and furthest white.

Edge detection:

Compares the surrounding texels row based and column based, and if the contrast from a side to the other is bigger than a preset value, it is considered as an edge.

For the depth mode, the comparison value is simply the one gotten from the depth texture. For the color mode, the value is the luminance corresponding to the RGB value.


The blur is created by using a 1D Gaussian Function to decide how much color to take from the surrounding texels. It has two passes, first for rows and then using the result for columns.