Non-Photorealistic Rendering Techniques for a Game Engine COMP 238 Final Project Non-Photorealistic Rendering Techniques for a Game Engine
Remember NPR Quake?
How did they do it? “grep”-ed the Quake source code for OpenGL calls Pulled them out into one source file Added dynamic loading support Started coding different visual styles
How about a “cartoon” look? Silhouettes Creases Shading Shadows Walls
Silhouettes Flip the normals and extend the edges of backfacing polygons.
Creases (1) Add thin quadrilaterals at each edge, forming an angle with the polygon.
Creases (2) It actually works!
Shadows The function is there, but it’s never called :(. Just draw a projection of each model on a horizontal plane (not always correct, but works out pretty well).
Cartoon-style shading 1D texture coordinate at vertex = amount of light received
Walls No lighting information available, so… Replace with “hand-drawn” texture. Add charcoal style for lines (one thick line and several jittered thin lines).
Result
Bibliography [1] Alex Mohr, Michael Gleicher: "Non-Invasive, Interactive, Stylized Rendering". The 2001 ACM Symposium on Interactive 3D Graphics. [2] Ramesh Raskar: "Hardware Support for Non-photorealistic Rendering", Eurographics 2001. [3] Bert Freudenberg, Maic Masuch, Thomas Strothotte: "Walk-Through Illustrations: Frame-Coherent Pen-and-Ink Style in a Game Engine", Siggraph/Eurographics Graphics Hardware, LA, 2001. [4] Adam Lake, Carl Marshall, Mark Harris, Marc Blackstein: "Hardware Support for Non-photorealistic Rendering", Siggraph/Eurographics Graphics Hardware, LA, 2001. [5] Jeff Lander: "Shades of Disney: Opaquing a 3D World", Game Developer Magazine, March 2000.