Suggestive Contours



When artists design imagery to portray a visual scene, they need not just render visual information veridically. They can select the visual cues to portray, and adapt the information each carries. Their results can depart dramatically from natural scenes, but can nevertheless convey visual information effectively, because viewers' perceptual inferences still work flexibly to arrive at a consistent understanding of the imagery.

We suggest that lines in line-drawings can convey information about shape in this indirect way, and work to develop tools for realizing such lines automatically in non-photorealistic rendering. In the figure above, the picture on the left renders silhouettes. The picture in the center renders occluding contours, and shows that contours, on their own, can be quite limited in the information they convey about shape. The picture on the right, however, includes additional lines we call suggestive contours that convey an object's shape consistently and precisely.


Suggestive contours are distinct from creases and lines along ridges or valleys. They are in some sense an extension of contours to account for "nearby" viewpoints. In the following paper, we introduce suggestive contours by providing three equivalent mathematical characterizations, along with some descriptive results. We also describe algorithms for their computation, and show a number of results and comparisions to alternative approaches.

One of the more pressing questions about suggestive contours was whether they exhibited temporally coherent behavior for a moving camera. We explore this question, along with a number of other issues in the following paper:

Extracting suggestive contours requires good estimates of curvature and derivative of curvature. The following paper describes our algorithm for computing these quantities on triangle meshes:

More recently, we have investigated algorithms for efficient extraction of linear features from volume data:

And also highlight lines, drawn in white, that also convey shape:

Image Gallery and Downloadable Models

Click here for some pictures, together with the 3D models from which they were generated.

Suggestive contour software: rtsc

rtsc is an interactive viewer for suggestive contours and highlights (and other types of lines, such as apparent ridges) starting from 3D models.

The distribution includes Win32 and Linux x86 binaries, as well as source code. All files are distributed under the GNU General Public License (GPL).


To run rtsc, simply pass in a 3D triangle mesh file on the command line. Under Windows, you should also be able to "drag-n-drop" a model file onto the rtsc binary. rtsc can read most flavors of PLY files, as well as many OFF, 3DS, and Wavefront OBJ files (some models are available from our gallery page). Please see the enclosed README for a description of options and mouse buttons.


The most recent version is 1.6

Changes since version 1.5:

  • Small bug and compile fixes

Changes since version 1.4:

  • Added implementations of several new types of lines, most notably suggestive highlights, principal highlights, and apparent ridges (in collaboration with Tilke Judd).
  • Updated for trimesh2 version 2.8.

Changes since version 1.3:

  • Small compilation and portability fixes

Changes since version 1.2:

  • Several new line types, such as ridges and valleys, added.
  • Better lighting and mesh coloring.
  • Added several didactic features such as drawing the principal directions and asymptotic directions.

Changes since version 1.1:

  • Can read a ".xf" file to specify the initial viewpoint
  • Compiled against trimesh2 version 2.5, which incorporates a curvature computation bugfix.

Changes since version 1.0:

  • Added capability of drawing mesh boundaries - this helps the visualization for some models.
  • Some bugfixes and improvements to fading of strokes.


Source code is included in the zip file and tarball above, and you will also need the latest version of the trimesh2 library. The source is in C++, and is known to compile with g++ version 3.3.x or later (in its native, Cygwin, and Mingw32 incarnations). Some versions of g++ are buggy: if you get unexpected behavior, try turning off loop unrolling (remove -funroll-loops from the appropriate Makedefs file) or disabling optimization altogether.

Warning: gcc versions 3.4.2, 4.0.0, and 4.1.2 are known to miscompile rtsc, and 4.0.0 on Mac has dynamic linking problems. In addition, the code is known not to compile with MSVC++ 6.

Please contact Szymon Rusinkiewicz if you have any questions about the code.

Note to rtsc users:

While this implementation of suggestive contours can be used to make (what we think are) pretty pictures, as illustrated in our suggestive contour gallery, it can also be used to make some not-so-pretty ones. Finding suggestive contours requires the computation of first, second, and third "derivatives" of the surface geometry, and this computation is very sensitive to noise and under-tessellation. While rtsc provides some remedies to these problems (by implementing subdivision, various kinds of smoothing, fading of lines, and a "derivative test" threshold that must be set to an appropriate value), it is easy to get ugly pictures by not taking advantage of these capabilities.

So, while we invite scholarly analysis and fair comparisons to alternate approaches, we encourage users to exercise good taste in selecting appropriate mesh preprocessing operations and threshold settings when comparing to pictures produced with rtsc. For example, for many classes of models, we have had good experiences with applying one round of subdivision followed by a round of smoothing normals, coupled with a reasonable threshold and the "vary intensity" checkbox turned on.