Non-Realistic Rendering API


Steven Kilthau

In this project, an API has been created that provides the functionality necessary to perform operations required by many common non-realistic rendering (NRR) algorithms. NRR is a broad categorization of rendering methods which do not attempt to mimic reality. A good example of an NRR technique is the display of images with cartoon outlines.
The NRR API is designed to allow complex 3D-model and 2D-image operations to be implemented with a minimum of effort. It should be noted that although the API uses the features of modern graphics hardware whenever possible, it was not designed to be an optimized pipeline. The NRR API is written entirely in C++, and encompasses over 75 classes and over 22,500 lines of code.

The NRR API has many features which make it attractive as a platform for quick development of non-realistic rendering effects. The following list gives some of the major features of the API:

  • full OpenGL-based 3D scene-graph with nodes for material properties, lights, transformations, triangles, quads, tri-strips, and quad-strips
  • six built-in image types (bit, grayscale, rgba, and single/double/triple channel floating point images)
  • linear algebra data types
  • full conversion abilities between image types
  • sixteen built-in math operations for images (add, and, bias, divide, FFT, invert, multiply, not, or, rescale-range, scale, subtract, threshold, threshold-down, threshold-up, xor)
  • over eight built-in image filters (1st/2nd-order-difference, arbitrary 3x3 filters, Floyd-Steinberg-dither, ordered-dither, resize-euclid, resize-square, histogram-equalize, and others)
  • four rendering modes (shaded, curvature-buffer image, id-buffer image, z-buffer image)
  • file IO for TGA images and Alias Wavefront OBJ models
  • special parameter passing mechanisms that allow smart run-time type determination for safer code

The NRRAPI is 100% user-extensible to allow for an unlimited amount of functionality. Better yet, it is easy to use!