Introduction To Geometry Shaders

Preview:

DESCRIPTION

 

Citation preview

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 – OpenGL 3.2 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 – Wireframe

How would you implement glPolygonMode?

Applications – Wireframe

How would you implement glPolygonMode?Triangles Points or Line Strips

Applications - Billboards

How would you implement GL_ARB_point_sprite?

Applications - Billboards

How would you implement GL_ARB_point_sprite?Points Triangle Strips

Applications - Billboards

Code: miniglobe.svn.sourceforge.net/viewvc/miniglobe/Source/Scene/Renderables/BillboardCollection/

Applications - Billboards

Code: miniglobe.svn.sourceforge.net/viewvc/miniglobe/Source/Scene/Renderables/BillboardCollection/

Applications – Wide Lines

glLineWidth with width > 1 is deprecated in OpenGL 3.

Applications – Wide Lines

Applications – Wide Lines

Two stepsClip to near plane. Why?Expand line to two triangles along

screen space normal How would you outline?

Code: miniglobe.svn.sourceforge.net/viewvc/miniglobe/Source/Scene/Renderables/Polyline/

Applications

Displacement mapping Single pass cube map generation Terrain decompression Culling with instancing 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, e.g.:

layout(triangle_strip, max_vertices = 4) out;

NVIDIA: Minimize this, it determines the speed of GS execution

Minimize vertex size– GS Input: Pack in VS– GS Output: Compute in FS

Performance

GeForce 8, 9, and GTX2xx

– Output size = vertex size * max_vertices

Maximum output size: 1,024 scalars Performance is inversely

proportional to output size Not a continuous function:

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

Performance

1 The geometry shader must meet criteria in ATI Programming Guide

ATIOptimized for 1:1 and 1:4 amplification1

High amplification can't use on-chip buffers – memory bandwidth problem

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

Geometry shaders are now widely used Modify incoming primitive or make a

limited number of copies Not for

Large scale amplificationInstancing

Resources

developer.nvidia.com/object/gpu_programming_guide.html

Section 4.6

Resources

developer.amd.com/media/gpu_assets/ATI_Radeon_HD_2000_programming_guide.pdf

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

Recommended