introduction to geometry shaders
DESCRIPTION
TRANSCRIPT
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