Introduction to Geometry Shaders Patrick Cozzi Analytical Graphics, Inc.

Post on 20-Dec-2015

237 views 0 download

Transcript of Introduction to Geometry Shaders Patrick Cozzi Analytical Graphics, Inc.

Introduction to Geometry Shaders

Patrick Cozzi

Analytical Graphics, Inc.

Overview

Geometry Shaders in the Pipeline Primitive Types Applications Performance

Birds Eye View

Create or destroy primitives on the GPU Requires DirectX 10 or GL_ARB_geometry_shader4

GeometryShader

Geometry Shaders in the Pipeline

VertexShader

FragmentShader

Vertices in world coordinates

VertexShader

FragmentShader

Vertices in world coordinates

Perspective Divide and

Viewport Transformation

clip coordinates window coordinates

Geometry Shaders in the Pipeline

GeometryShader

VertexShader

FragmentShader

PrimitiveAssembly

PDand

VT

GeometryShader

VertexShader

FragmentShader

PrimitiveAssembly

ClippingPDand

VT

GeometryShader

VertexShader

FragmentShader

PDand

VT

clip coordinates clip coordinates

window coordinates

Primitive Types

GeometryShader

Output primitives can be disconnected

Primitive Types

Input Primitives GL_POINTS GL_LINES GL_TRIANGLES Adjacency

Output Primitives GL_POINTS GL_LINE_STRIP GL_TRIANGLE_STRIP

Primitive Types

Input primitive type doesn’t have to equal output primitive type

blogs.agi.com/insight3d/index.php/2008/10/23/geometry-shader-for-debugging-normals/

Applications

Implement glPolygonModeTriangles Points or Line Strips

Emulate GL_ARB_point_spritePoints Triangle Strips

Applications

Displacement Mapping Single pass generate a cube map Extrusions

Shadow volumesFins along silhouettes for fur rendering

Applications: Fur in Lost Planet

Render surface, write buffers forFur ColorAngleLength

GS turns each pixel into a translucent polylineAutomatic LOD

Images from meshula.net/wordpress/?p=124

color angle length

Applications: Fur in Lost Planet

Performance

Duplicates per-vertex operations for vertices shared by primitives

GeometryShader

VertexShader

5 vertices processed 9 vertices processed

Performance

GeometryShader

GeometryShader

GeometryShader

GeometryShader

Must guarantee order in == order out

Performance

Order guarantee affects parallelism

GeometryShader

GeometryShader

GeometryShader

Reorder Buffer

Clipping

Performance

Buffer size needs to support a number of threads running in parallel

Performance

Maximum number of vertices a GS will output:

GEOMETRY_VERTICES_OUT_ARB

Determines the speed of GS execution Make this and vertex sizes as small as

possible

Performance

GeForce 8, 9, and GTX2xxOutput size = vertex size *

GEOMETRY_VERTICES_OUT_ARB

Maximum output size: 1,024 scalarsPerformance is inversely proportional

to output sizeNot a continuous function:

• 1-20 scalars: Peak Performance• 27-40 scalars: 50% Performance• On GeForce 8800 GTX

Performance

BenefitsReduces vertex buffer memory usage

• Compute in GS, e.g. normals• Create more geometry• No need to duplicate (e.g. compared to

equivalent VS implementation)

Less memory == less bus trafficReduces vertex attribute setup cost

Summary

Modify incoming primitive or make a limited number of copies

Not for Large scale amplificationInstancing

Resources

www.microsoft.com/downloads/details.aspx?FamilyId=96CD28D5-4C15-475E-A2DC-1D37F67FA6CD&displaylang=en

Introduction to Direct3D 10SIGGRAPH 2007 Course Notes

Resources

www.opengl.org/registry/specs/ARB/geometry_shader4.txt

GL_ARB_geometry_shader4

Resources

www.realtimerendering.com

Section 3.5

Resources

developer.nvidia.com/object/gpu_programming_guide.html

Section 4.6