View
215
Download
1
Embed Size (px)
Citation preview
1
Hardware
Feature Edges
Hardware
Feature Edges
June 7, 2004Morgan McGuire and John F. Hughes
Brown University
NPAR 2004
Hardware
Feature Edges
Hardware
Feature Edges
2
GoalFind and stroke feature edges on the GPU
3
Feature Edges
ContourFront-face meets back-face
BoundaryRidgeValleySilhouette
Subset of contour
All defined by derivatives of normals… i.e. for nice polyhedra, adjacent face
normals
4
Feature Tests
1 :
:~|
cos0:
cos0:
)sgn()sgn(:
23
23
complexitydepthContourSilhouette
nArtistBoundary
nnnvvValley
nnnvvRidge
eyeneyenContour
B
valleyBAA
ridgeBAA
BA
eye = center of projection – v0
= depth complexity
v3
v2 v0
v1nA nB
n1
n0
A B
eye
5
ChallengeGPU limitations:
No “Edge Processor”No access to adjacencyNo previous state for coherenceCannot create or destroy edge geometry
Vertex Processor
Pixel Processor
Rasterizer
Triangles
Edges
Adjacency
Vertices
x
x
6
Related Work
CPU SilhouettesExhaustive: Sutherland (circa ’77)Randomized: Markosian et al. ’97Cutting sphere: Gooch ’99Dual space: Zorin and Hertzmann ’00
GPU SilhouettesG-Buffer: Saito and Takahashi ’90; McCool ’03 Environment maps: Gooch ’99, Deitrich ’99Halo: Raskar ’01, ’02Pixel Processor + Readback: Brabec and Seidel ’03Edge vertices: Card & Mitchell ’02, Brennan ’03, Gooch ’03(None allow thick lines or brush strokes)
7
Vertex Attributes
GPUs allow 16 vertex “attributes”<position, normal, color, tex coords>
Can store other information…<position, face-normal A, face-normal B>
i.e. adjacent face normals
The edge from v0 to v1 with adjacent faces A and B.
v0
v1
nA nB
A B
8
AgnosticismThe GPU doesn’t care
Attributes don’t have to be texture coords, colorsFace list doesn’t have to describe facesJust has to have the right form
Face list: set of indices into vertex tableVertex attributes: set of 4-vectors
e.g. store information about an EDGE of the model mesh:
In each VERTEX structure we send to the GPUCall these “edge vertices”
9
Edge VerticesMake a new meshEvery edge becomes two vertices
<v0, nA, nB>, <v1, nA, nB>
Connected by a line
Use vertex processor to find vertices on contoursHide non-contours when rendering
Degenerate polygons, = 0, etc.
(nA eye > 0) xor (nB eye >
0)v0
v1
nA nB
A B
10
Our ContributionExtend Edge Vertices with
More edge typesRidge, Valley, SilhouetteSmooth SilhouetteSuggestive Contour
Brush strokesAnimationPlan for Future Hardware
11
The Edge-MeshEvery edge becomes four identical* verticesConnected into a quadrilateralStore adjacent vertices, not face normals
v3
v2 v0
v1nA nB
n1
n0A B
(i) = < v0, v1, v2, v3, n0, n1, r, i >
3D Vectors
* Differentiated by i = {0, 1, 2, 3}
Scalar texture parameter
12
RenderingTest edges on the vertex processor
Feature Edge:Extrude into a screen-space rectangleChoose vertex position from i
Non-Feature Edge:Hide beyond clipping planeEarly-out avoids rasterization overhead
Animation:Animate v and n as a regular vertex and vertex-normal
i=0
i=1
i=2
i=3
v0
v1
13
Result
14
Building a Style
15
16
Performance
17
Thick Lines
Thick quads leave visible gaps at jointsCommon problem (e.g. Raskar ’02)
18
Solution: End Caps
s0 s1
pm0
m1
quad
start cap finish cap“outside”
“inside”
Computed in screen spaceFollow projected normals m0, m1
The only mutual information between adjacent edges!
19
Result
No Caps Caps
Works well for smooth objects…
20
Heuristic can Fail
Vertex normals poorly reflect curvature for this object and our heuristic fails.
21
Heuristic can Fail
Hidden Failures:
Cap is on the wrong side, but the gap is inside the object.
22
Heuristic can Fail
Visible Failure:
Cap is on the wrong side and the gap is outside the object.
23
Analysis of FailureFailure occurs when s is on the “concave” side of joint:
i.e. 2D curvature is negative
Probability of failure increases when:Curvature is high and tessellation is lowVertex normal represents curvature poorly
0or 0 fdseds
fe
24
Brush Textures
25
Screen vs. Object Spaces = vx | vy
Good for still and high-poly models
s0 = r
s1 = r + L
Good for animated low-poly models
Attached to vertices during animation
26
Applications
“Zero CPU cycles were harmed in therendering of the following images.”
27
Bunny-Bot
Crayon-Bot Pen-Bot
Blue Print-Bot Wispy-Bot
Different Strokes
28
Ink & Wash
29
Hidden Line
30
Toon Fur
31
J. Lengyel’s Realistic Fur Algorithm
ShellsStack 16 sparse texturesPerform extrusion in vertex shaderLooks like fur when viewed “head on”Looks like 16 dots when viewed “side on”
FinsStriped texture near CONTOURSLooks like fur when viewed “side on”We move this onto GPU
Anisotropic shadingImages from Lengyel et. al, Real-Time Fur over Arbitrary Surfaces
32
Realistic Fur
33
Shadow Volumes Find polyhedron bounding shadowed points Any intersected surface is shadowed Compute intersection via stencil operations
Caps
– At the object and infinity
– E. Lengyel implemented with GPU Sides
– Find CONTOUR edges
– Extrude each one into a quad
Dark Cap (at infinity)
Light Cap
SideSide
34
Shadows
35
Zorin-Hertzmann Smooth Silhouettes
v0 v1
v2
A
n2
n1n0
B
Extend edge vertex to <v0, v1, v2, v3, n0, n1, n2, n3, r, i>
Define an “above-water” function f = eye • n
Either 0 or 2 edges have zero-crossings in f
Estimate zero-crossing points A, B and connect them
f0= 0.8
f2= -0.1
f1= -0.2
fA 0
fB 0
36
Animation
37
DeCarlo et. al’s Suggestive Contours*
Smooth silhouettes with new above-water function Only stroke when “ ”
– i.e.
Pack 1, 2, t1, t2, n, v (x4, for a quad) into edge vertex
0 rw 2
222
11 TwTwf
2)()( BAtwBABfAf d
A
B
38
* Don’t try our S.C. method at home on GeForceFX… it is too hard to squeeze the curvature data into only 16 attributes!
Just use DeCarlo’s image space algorithm, or…
39
GeForce 6800GeForce 6800 and Radeon X800 support texture reads in the vertex processor. Commercially available by August.
Pointers (stored in textures) cut redundant data.
Using 16-bit pointers:
Current: E = <v,v,v,v,n,n,r,i> x 4 = 304 bytes
New: E = <ptr, i> x 4 + <#,#,#,#,r> = 14 bytes
20x improvement!
(# is a pointer to a regular mesh vertex)
40
GeForce 7800?
DirectX Next specification allows geometry to be created and destroyed– this eliminates the need for degenerate quads…
41
Follow-UpJorn Loviscach extended our method to halos with MAX alpha blending and suggests a new curved silhouette algorithm.
42
Acknowledgements
Evasion Group, INRIA Rhone-AlpesNVIDIATomer Moscovich
43
44
Feature Expressions
1 :
:~|
cos0:
cos0:
)sgn()sgn(:
23
23
complexitydepthContourSilhouette
nArtistBoundary
nnnvvValley
nnnvvRidge
eyeneyenContour
B
valleyBAA
ridgeBAA
BA
eye = center of projection – v0
= depth complexityv3
v2 v0
v1nA nB
n1
n0
A B
eye
<v0, v1, v2, v3, n0, n1, r, i>
nA = (v1 – v0) (v2 – v0)
nB = (v3 – v0) (v1 – v0)
45
Silhouettes
1. Set S := (S + 1) mod 255 2. If S == 0 then clear stencil buffer to 255 3. Render the model, setting stencil to S wherever the depth test passes 4. Set the stencil test to pass where stencil
== S 5. Render contour edges