Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Hardware Feature Edges June 7, 2004 Morgan McGuire and John F. Hughes Brown University NPAR 2004 Hardware Feature Edges.

Similar presentations


Presentation on theme: "1 Hardware Feature Edges June 7, 2004 Morgan McGuire and John F. Hughes Brown University NPAR 2004 Hardware Feature Edges."— Presentation transcript:

1 1 Hardware Feature Edges June 7, 2004 Morgan McGuire and John F. Hughes Brown University NPAR 2004 Hardware Feature Edges

2 2 Goal Find and stroke feature edges on the GPU

3 3 Feature Edges Contour Front-face meets back-face Boundary Ridge Valley Silhouette Subset of contour All defined by derivatives of normals… i.e. for nice polyhedra, adjacent face normals

4 4 Feature Tests eye = center of projection – v 0  = depth complexity v3v3 v2v2 v0v0 v1v1 nAnA nBnB n1n1 n0n0 A B eye

5 5 Challenge GPU limitations: No “Edge Processor” No access to adjacency No previous state for coherence Cannot create or destroy edge geometry Vertex Processor Pixel Processor Rasterizer Triangles Edges Adjacency Vertices x x

6 6 Related Work CPU Silhouettes Exhaustive: Sutherland (circa ’77) Randomized: Markosian et al. ’97 Cutting sphere: Gooch ’99 Dual space: Zorin and Hertzmann ’00 GPU Silhouettes G-Buffer: Saito and Takahashi ’90; McCool ’03 Environment maps: Gooch ’99, Deitrich ’99 Halo: Raskar ’01, ’02 Pixel Processor + Readback: Brabec and Seidel ’03 Edge vertices: Card & Mitchell ’02, Brennan ’03, Gooch ’03 (None allow thick lines or brush strokes)

7 7 Vertex Attributes GPUs allow 16 vertex “attributes” Can store other information… i.e. adjacent face normals The edge from v 0 to v 1 with adjacent faces A and B. v0v0 v1v1 nAnA nBnB A B

8 8 Agnosticism The GPU doesn’t care Attributes don’t have to be texture coords, colors Face list doesn’t have to describe faces Just has to have the right form Face list: set of indices into vertex table Vertex attributes: set of 4-vectors e.g. store information about an EDGE of the model mesh: In each VERTEX structure we send to the GPU Call these “edge vertices”

9 9 Edge Vertices Make a new mesh Every edge becomes two vertices, Connected by a line Use vertex processor to find vertices on contours Hide non-contours when rendering Degenerate polygons,  = 0, etc. ( n A  eye > 0) xor ( n B  eye > 0) v0v0 v1v1 nAnA nBnB A B

10 10 Our Contribution Extend Edge Vertices with More edge types Ridge, Valley, Silhouette Smooth Silhouette Suggestive Contour Brush strokes Animation Plan for Future Hardware

11 11 The Edge-Mesh Every edge becomes four identical* vertices Connected into a quadrilateral Store adjacent vertices, not face normals v3v3 v2v2 v0v0 v1v1 nAnA nBnB n1n1 n0n0 A B  (i) = 3D Vectors * Differentiated by i = {0, 1, 2, 3} Scalar texture parameter

12 12 Rendering Test edges on the vertex processor Feature Edge: Extrude into a screen-space rectangle Choose vertex position from i Non-Feature Edge: Hide beyond clipping plane Early-out avoids rasterization overhead Animation: Animate v and n as a regular vertex and vertex-normal i=0 i=1 i=2 i=3 v0v0 v1v1

13 13 Result

14 14 Building a Style

15 15

16 16 Performance

17 17 Thick Lines Thick quads leave visible gaps at joints Common problem (e.g. Raskar ’02)

18 18 Solution: End Caps s0s0 s1s1 p m0m0 m1m1 quad start cap finish cap “outside” “inside” Computed in screen space Follow projected normals m 0, m 1 The only mutual information between adjacent edges!

19 19 Result No Caps Caps Works well for smooth objects…

20 20 Heuristic can Fail Vertex normals poorly reflect curvature for this object and our heuristic fails.

21 21 Heuristic can Fail Hidden Failures: Cap is on the wrong side, but the gap is inside the object.

22 22 Heuristic can Fail Visible Failure: Cap is on the wrong side and the gap is outside the object.

23 23 Analysis of Failure Failure 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 low Vertex normal represents curvature poorly f e

24 24 Brush Textures

25 25 Screen vs. Object Space s = v x | v y Good for still and high-poly models s 0 = r s 1 = r + L Good for animated low-poly models Attached to vertices during animation

26 26 Applications “Zero CPU cycles were harmed in the rendering of the following images.”

27 27 Bunny-Bot Crayon-Bot Pen-Bot Blue Print-BotWispy-Bot Different Strokes

28 28 Ink & Wash

29 29 Hidden Line

30 30 Toon Fur

31 31 J. Lengyel’s Realistic Fur Algorithm Shells Stack 16 sparse textures Perform extrusion in vertex shader Looks like fur when viewed “head on” Looks like 16 dots when viewed “side on” Fins Striped texture near CONTOURS Looks like fur when viewed “side on” We move this onto GPU Anisotropic shading Images from Lengyel et. al, Real-Time Fur over Arbitrary Surfaces

32 32 Realistic Fur

33 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 Side

34 34 Shadows

35 35 Zorin-Hertzmann Smooth Silhouettes v0v0 v1v1 v2v2 A n2n2 n1n1 n0n0 B Extend edge vertex to 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 f 0 = 0.8 f 2 = -0.1 f 1 = -0.2 f A  0 f B  0

36 36 Animation

37 37 DeCarlo et. al’s Suggestive Contours* Smooth silhouettes with new above-water function Only stroke when “ ” –i.e. Pack  1,  2, t 1, t 2, n, v (x4, for a quad) into edge vertex A B

38 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 39 GeForce 6800 GeForce 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 = x 4 = 304 bytes New: E = x 4 + = 14 bytes 20x improvement! (# is a pointer to a regular mesh vertex)

40 40 GeForce 7800? DirectX Next specification allows geometry to be created and destroyed– this eliminates the need for degenerate quads…

41 41 Follow-Up Jorn Loviscach extended our method to halos with MAX alpha blending and suggests a new curved silhouette algorithm.

42 42 Acknowledgements Evasion Group, INRIA Rhone-Alpes NVIDIA Tomer Moscovich

43 43

44 44 Feature Expressions eye = center of projection – v 0  = depth complexity v3v3 v2v2 v0v0 v1v1 nAnA nBnB n1n1 n0n0 A B eye n A = (v 1 – v 0 )  (v 2 – v 0 ) n B = (v 3 – v 0 )  (v 1 – v 0 )

45 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


Download ppt "1 Hardware Feature Edges June 7, 2004 Morgan McGuire and John F. Hughes Brown University NPAR 2004 Hardware Feature Edges."

Similar presentations


Ads by Google