Contour Chaining for Stroke Stylization
A Project in Non-Photorealistic Rendering


Contour Chaining (Win32, 1,131 kB) Contour Chaining - Source Code (Win32, 12.9 MB)

Update February 16, 2018! Go to for updated code on Github (based on Qt5, and removes GLUI/GLUT/DevIL/Vector class dependencies).


The application lets one view renderings of a 3D triangular mesh in an illustrative style. To achieve this, it uses both the smooth contours of the mesh as defined in "Illustrating Smooth Surfaces" by Hertzmann and Zorin (SIGGRAPH '00) as well as suggestive contours as described in the paper "Suggestive Contours for Conveying Shape" by DeCarlo et al. (SIGGRAPH '03). Furthermore, the chains of line segments which constitute both types of contours are detected, and splines rendered with unique brush types can be fit along these chains to produce stylized strokes. Combined with toon shading, these elements form a system that quickly produces artistic renderings.



The "Atenea" mesh

Smooth contours

Smooth and suggestive contours

Toon shader applied

Fitting splines to
contour chains

Fitting brush objects
along contour chains

Using a "furry" brush object

A helix-shaped brush object

Master Rai, increasing the
number of reverse Chaikin
iterations can produce
abstract renderings

Showing mesh edge contours
(red) against smooth
contours (black)

Contour chaining detecting
closed curves (green)
and open curves (red)

Elephant rendered using
brush object

Bathroom Scene 1

Bathroom Scene 2

Contours Only

Suggestive Contours

Toon Shader


Implementation Details:

The project was implemented in C++. Libraries used include: OpenGL (graphics), DevIL (image processing), GLUI (user interface widgets), trimesh2 (for loading and processing triangular meshes). Uses a modified Vector class originally by Allen Sherrod.

The components of this project I implemented are: