Introduction Mathematical Foundations

advertisement
Non-Photorealistic Rendering
Painting, Drawing, Sketching
David Luebke
1
3/22/2016
Admin
● Reminder: no class Monday
■ Optional review/Q&A session: Thursday May 1, 3 PM
● Reminder: final exam Monday, May 5, 9 AM
● Reminder: assn4 due Monday
■ Late days okay, but not beyond 11:59 PM Wednesday
David Luebke
2
3/22/2016
Recap: Stochastic Sampling
● Sampling theory tells us that with a regular sampling
grid, frequencies higher than the Nyquist limit will
alias
● Q: What about irregular sampling?
● A: High frequencies appear as noise, not aliases
● This turns out to bother our visual system less!
David Luebke
3
3/22/2016
Recap: Stochastic Sampling
● Poisson distribution:
■ Completely random
■ Add points at random until area is full.
■ Uniform distribution: some neighboring samples close
together, some distant
David Luebke
4
3/22/2016
Recap: Stochastic Sampling
● Poisson disc distribution:
■ Poisson distribution, with minimum-distance constraint
between samples
■ Add points at random, removing again if they are too close
to any previous points
● Jittered distribution
■ Start with regular grid of samples
■ Perturb each sample slightly in a random direction
■ More “clumpy” or granular in appearance
David Luebke
5
3/22/2016
Recap: Stochastic Sampling
● Spectral characteristics of these distributions:
■ Poisson: completely uniform (white noise). High and low
frequencies equally present
■ Poisson disc: Pulse at origin (DC component of image),
surrounded by empty ring (no low frequencies), surrounded
by white noise
■ Jitter: Approximates Poisson disc spectrum, but with a
smaller empty disc.
David Luebke
6
3/22/2016
Stochastic Sampling:
The Exciting Conclusion
● Distributed ray tracing is an elegant technique that
tackles many problems at once
■ Stochastic ray tracing: distribute rays stochastically across
pixel
■ Distributed ray tracing: distribute rays stochastically across
everything
David Luebke
7
3/22/2016
Distributed Ray Tracing
● Distribute rays stochastically across:
■ Pixel for antialiasing
■ Light source for soft shadows
■ Reflection function for soft (glossy) reflections
■ Time for motion blur
■ Lens for depth of field
● Cook: 16 rays suffice for all of these
David Luebke
8
3/22/2016
Distributed Ray Tracing
● Distributed ray tracing is basically a Monte Carlo
estimation technique
● Practical details:
■ Use lookup tables (LUTs) for distributing rays across
functions
■ See W&W Figure 10.14 p 263
● Learn lots more about this in Image Synthesis
David Luebke
9
3/22/2016
Non-Photorealistic Rendering
● Next topic: Non-Photorealistic Rendering
David Luebke
10
3/22/2016
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
David Luebke
11
3/22/2016
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
David Luebke
12
3/22/2016
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
David Luebke
13
3/22/2016
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
David Luebke
14
3/22/2016
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!
David Luebke
15
3/22/2016
Summary: 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)
David Luebke
16
3/22/2016
Recap: Silhouette Edges
● Surface angle silhouetting
■ Calc N●V, if below threshold  draw black
○ Best as a per-pixel routine
○ E.g., Assn4c
○ 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)
David Luebke
17
3/22/2016
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
David Luebke
18
3/22/2016
Results
Wireframe Translation
40 fps
Fattening
50 fps
11.5 fps
Original Venus model : 5672 triangles, 66 fps
David Luebke
19
3/22/2016
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
David Luebke
20
3/22/2016
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

David Luebke
Fin thickness based on distance to eyepoint
21
3/22/2016
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
David Luebke
22
3/22/2016
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


David Luebke
Enable depth buffer writes
Disable color buffer writes
23
3/22/2016
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
David Luebke
24
3/22/2016
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
David Luebke
25
3/22/2016
Painterly Rendering
● More info if time permits…
David Luebke
26
3/22/2016
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…
David Luebke
27
3/22/2016
Other Styles
● “Graftals” are a general term used for strokes, decals,
little bits of geometry
● Dynamic placement of graftals to achieve certain
effects/styles:
David Luebke
28
3/22/2016
Download