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.