1 / 45

Hardware Feature Edges

Hardware Feature Edges. Hardware Feature Edges. June 7, 2004 Morgan McGuire and John F. Hughes Brown University NPAR 2004. Goal. Find and stroke feature edges on the GPU. Feature Edges. Contour Front-face meets back-face Boundary Ridge Valley Silhouette Subset of contour

morag
Download Presentation

Hardware Feature Edges

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Goal Find and stroke feature edges on the GPU

  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. n1 nA v1 nB n0 AB v0 v2 v3 Feature Tests eye eye = center of projection – v0  = depth complexity

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

  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. nA nB v1 AB v0 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.

  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. nA nB v1 AB v0 Edge Vertices • Make a new mesh • Every edge becomes two vertices • <v0, nA, nB>, <v1, nA, nB> • Connected by a line • Use vertex processor to find vertices on contours • Hide non-contours when rendering • Degenerate polygons, a = 0, etc. • (nA eye > 0) xor (nB eye > 0)

  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. n1 nA v1 nB n0 AB v0 v2 v3 The Edge-Mesh • Every edge becomes four identical* vertices • Connected into a quadrilateral • Store adjacent vertices, not face normals Scalar texture parameter (i) = < v0, v1, v2, v3,n0,n1, r, i > 3D Vectors * Differentiated by i = {0, 1, 2, 3}

  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 v0 i=3 i=1 v1 i=2

  13. Result

  14. Building a Style

  15. Performance

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

  17. p “outside” start cap m0 finish cap m1 s0 s1 quad “inside” Solution: End Caps • Computed in screen space • Follow projected normals m0, m1 • The only mutual information between adjacent edges!

  18. Result No Caps Caps Works well for smooth objects…

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

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

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

  22. 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 e f

  23. Brush Textures

  24. Screen vs. Object Space s0 = r s1 = r + L Good for animated low-poly models s = vx | vy Good for still and high-poly models Attached to vertices during animation

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

  26. Different Strokes Pen-Bot Crayon-Bot Bunny-Bot Blue Print-Bot Wispy-Bot

  27. Ink & Wash

  28. Hidden Line

  29. Toon Fur

  30. 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

  31. Realistic Fur

  32. 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 Light Cap Side Side Dark Cap (at infinity)

  33. Shadows

  34. Zorin-Hertzmann Smooth Silhouettes f2= -0.1 n2 fA  0 v2 n1 A n0 v0 v1 B f1= -0.2 fB  0 f0= 0.8 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

  35. Animation

  36. A B DeCarlo et. al’s Suggestive Contours* • Smooth silhouettes with new above-water function • Only stroke when “ ” • i.e. • Pack k1, k2, t1, t2, n, v (x4, for a quad) into edge vertex

  37. * 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…

  38. 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 = <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)

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

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

  41. Acknowledgements • Evasion Group, INRIA Rhone-Alpes • NVIDIA • Tomer Moscovich

  42. n1 nA v1 nB n0 AB v0 v2 v3 Feature Expressions <v0, v1, v2, v3, n0, n1, r, i> nA = (v1 – v0)  (v2 – v0) nB = (v3 – v0)  (v1 – v0) eye = center of projection – v0  = depth complexity eye

  43. 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

More Related