non-photorealistic rendering: toon shading david luebke university of virginia

28
Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Upload: morgan-brown

Post on 17-Dec-2015

225 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Non-Photorealistic Rendering:Toon Shading

David Luebke

University of Virginia

Page 2: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Admin

Changes to remaining assignments

Page 3: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Non-Photorealistic Rendering

“Using a term like ‘nonlinear science’ is like referring to the bulk of zoology as ‘the study of nonelephant animals’”

Photorealism: age-old goal of graphics Non-photorealistic rendering

– Broadly, techniques for rendering that don’t strive for realism, but style, expressiveness, abstraction, uncertainty, etc

– A terrible, terrible term that we’re probably stuck with

Better terms: stylized rendering, artistic rendering, abstract rendering

Page 4: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Stylized Rendering

NPR is most commonly used to refer to graphics techniques that emulate a particular artistic style or medium– Impressionistic painting– Pen-and-ink (cross hatching, outlining, etc)– Colored-pencil, copperplate engraving, you

name it– Cartoon drawing

Page 5: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Toon shading

Toon shading is the term that we use to refer to cartoon-like rendering effects

Tendencies in cartoon/comic style:– Simple, flat shading (cel shading)

Two-tone (light/shadow) or three-tone (light/shadow/highlight)

– Edge highlighting Boundary (border edge) Crease (hard edge) Material edge Silhouette edge

Page 6: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Toon Shading

Cel shading– Threshold the lighting equation

Ex: the Cg program we looked at Diffuse below 0.5 ? dark color : light color Specular above 0.5 ? hilight color : diffuse color If no pixel shaders, can use N ● L to look up a 1-D

texture containing the shaded colors

– In general, can think of these procedures as remapping the traditional lighting equation elements (tone mapping)

Page 7: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Silhouette Rendering

Boundary (border edge)– Not shared by two polygons – E.g. the edge of a sheet of paper– Solid models usually have no boundaries

Crease (hard edge)– Shared by two polygons at a dihedral angle

greater than some threshold (often 60°)– Or a vertex with two normals/two colocated

vertices– Ridge or valley edges

Page 8: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Silhouette Rendering

Material edge– Triangles sharing edge have different

materials/texture maps/etc– Or just an edge that the artist wants to

emphasize

Silhouette edge– Triangles sharing edge face different

directions (towards/away from viewer)– Lots of techniques to find at runtime!

Page 9: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Finding/Rendering Silhouette Edges

Surface angle silhouetting– Again, like the Cg program we looked at– Calculate N●V, if below threshold draw

black– Problem: depends on surface curvature (see

Fig 7.5)

Page 10: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Procedural Geometry Silhouetting

Idea: render the geometry in such a way that the silhouettes “fall out”

Ex: – Draw frontfacing polygons– Draw backfacing polygons

But draw them in thick (2-pixel) wireframe Or draw them in wireframe, z-biased forward a bit Or “fatten” them Or displace them along their normals (“halo” effect)

Page 11: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Results

Wireframe Translation Fattening

40 fps 50 fps 11.5 fps

Original Venus model : 5672 triangles, 66 fps

Page 12: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Image Processing Silhouetting

Idea: analyze the image after it’s rendered, and extract silhouettes (like edge detection)

Can help by rendering e.g. depth image, object-ID image, normal image

Perfect for fragment program!

Page 13: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Silhouette Edge Detection

Idea: find silhouette edges geometrically and render them explicitly– Randomized Appel’s algorithm– Lots of interesting geometric approaches

Most work, but gives the most flexibility in how silhouettes are drawn

Page 14: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Non-Photorealistic RenderingDrawing, Hatching, Painting

David Luebke

University of Virginia

Page 15: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Recap: Edge Highlighting

Toon shading (and other NPR techniques based on drawing) requires some edges be drawn or highlighted:– Silhouette edges – Mesh boundaries (always on silhouette)– Creases (ridge and valley)– Material boundaries

Find first at run-time, precalculate the others (unless object is deformable)

Page 16: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Recap: Silhouette Edges

Surface angle silhouetting– Calc N●V, if below threshold draw black

Best as a per-pixel routine The Cg program we looked at Also can do with a spheremap, or use a mip-map with top-

level textures dark

– Pros: Uses the texture hardware fast Can antialias the resulting lines

– Cons: Line width depends on curvature Doesn’t work for some models (e.g., a cube)

Page 17: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Recap: Silhouette Edges

Procedural Geometry Silhouetting– Idea: render the geometry in such a way that the silhouettes

“fall out”, e.g.: Draw frontfacing polygons Draw backfacing polygons

But draw them in (possibly thick) wireframe Or draw them z-biased forward a bit Or “fatten” them Or displace them along their normals (“halo” effect)

– Flip normals– Amount of displacement varies w/ distance (why?)– Perfect task for vertex shader!

– Pros: relatively robust, doesn’t need connectivity info– Cons: Wastes some fill & some polys, needs antialiasing

Page 18: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Results

Wireframe Translation Fattening

40 fps 50 fps 11.5 fps

Original Venus model : 5672 triangles, 66 fps

Page 19: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Recap: Silhouette Edges

Image Processing Silhouetting– Idea: analyze the image after it’s rendered,

and extract silhouettes (i.e., edge detection)– Perfect for fragment program!– Can help by rendering e.g. depth image,

object-ID image, normal image

Page 20: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Recap: Silhouette Edges

Silhouette Edge Detection– Idea: find silhouette edges geometrically on the CPU

and render them explicitly Brute force: test every edge to see if its adjoining polygons

face opposite directions in eye space Can speed this up with randomized coherent search

Most work, but gives the most flexibility in how silhouettes are drawn

– GPU variant: Draw degenerate quadrilateral at each edge Use vertex shader to “fatten” quad into a “fin” when edge is

on silhouette Fin thickness based on distance to eyepoint

Page 21: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Highlighting Ridge Edges

Clever related technique by Raskar:– Add “fins” to every edge at dihedral angle– Size fins according to distance to viewer– Again, perfect for vertex shader

Similar but more complicated technique for highlighting valley edges

Page 22: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Drawing Lines:Outlining Polygons

Surprisingly hard to draw polys as filled outlines– Problem: depth buffer values of edge & polys same– 2-pass technique: draw polys, then draw edges

Z-bias edges forward or polygons back (glPolygonOffset) Works okay, but has occasional problems

– 3-pass technique: Render filled polygon

Disable depth buffer writes (leave depth test on) Enable color buffer writes

Render polygon edges polygon Normal depth & color buffering

Render filled polygon again Enable depth buffer writes Disable color buffer writes

Page 23: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Drawing Lines:Hidden-Line Rendering

Hidden-line vs. obscured line vs halos– Hidden-line

Draw polygons to depth buffer (not color buffer) Draw edges using previous technique

– Obscured (light, dotted, dashed) line Draw all edges in obscured style Draw polygons to depth buffer (not color buffer) Draw edges using previous technique

– Haloed line Draw all edges as thick background-color lines Draw edges using biasing, foreground-color

Page 24: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Other Styles

Impressionistic or “painterly” rendering:– Sprinkle particles on object surface– Draw particles as brushstrokes– Can render images to encode normals,

surface curvature, depth, color/tone info

Page 25: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Painterly Rendering

More info if time permits…

Page 26: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Other Styles

Hatching:– Store different cross-

hatch patterns representing different tones as textures

– Clever ways to use texture hardware to blend between tones at run-time

More info if time permits…

Page 27: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Other Styles

“Graftals” are a general term used for strokes, decals, little bits of geometry

Dynamic placement of graftals to achieve certain effects/styles:

Page 28: Non-Photorealistic Rendering: Toon Shading David Luebke University of Virginia

Other Styles

Technical Illustration