Hardware Feature Edges

Post on 12-Jan-2016

42 views 0 download

description

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 - PowerPoint PPT Presentation

transcript

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