For my final year project at uni, I did some research into Non-photographic
Rendering (NPR) methods, especially in an area called Sketchy Rendering.
After seeing a few NPR images recently, I thought i'd send my own in. The
image is of a Quake3Areana model in various states: wireframe, textured, and
To achieve the sketchy effect, I do the following:
To shade, I do a multitexture render pass using addative blending. The
first texture is a 1-d (grey-scale) texture that is indexed using Light
Direction dotted with the Vertex Normal. This is used to darken the areas in
shadow. The second texture is projected from the viewpoint of the camera, so
that it "wraps" the model. The actual texture is just a bunch of "scribbled"
lines (in grey-scale).
Manually find the silhouette edges - I have a pre-calculated list of all
Add "noise" to the silhouette edge vertices (to make them look "rough").
Render them several times (3x shown) in differing shades of grey. The
z-buffer removes hidden lines from view.
The application was run on an Athlon 800 with a Geforce2 GTS (using D3D).
Without any optimisation (just got it to work :), this model (526 triangles)
is rendered on a 1600x1200 display (up close) at ~90 fps. A model with
10,374 triangles is rendered at ~42 fps. The models (or lights) need not be
static, as the silhouettes are found dynamically every frame. Although not
implemented, animated models are quite feasible.
Please ask any questions you have.
Cheers, Stuart Yarham.