KEMBAR78
Introduction To Geometry Shaders | PPT
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 Geometry Shader
Geometry Shaders in the Pipeline Vertex Shader Fragment Shader Vertices in  world coordinates Vertex Shader Fragment Shader Vertices in  world coordinates Perspective Divide   and Viewport Transformation clip coordinates window coordinates
Geometry Shaders in the Pipeline Geometry Shader Vertex Shader Fragment Shader Primitive Assembly PD and VT Geometry Shader Vertex Shader Fragment Shader Primitive Assembly Clipping PD and VT Geometry Shader Vertex Shader Fragment Shader PD and VT clip coordinates clip coordinates window coordinates
Primitive Types Geometry Shader 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 steps Clip 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 volumes Fins along silhouettes for fur rendering
Applications: Fur in Lost Planet Render surface, write buffers for Fur Color Angle Length GS turns each pixel into a translucent polyline Automatic LOD
Applications: Fur in Lost Planet Images from meshula.net/wordpress/?p=124 color angle length
Performance Duplicates per-vertex operations for vertices shared by primitives Geometry Shader Vertex Shader 5 vertices processed 9 vertices processed
Performance Must guarantee order in  ==  order out   Geometry Shader Geometry Shader Geometry Shader Geometry Shader
Performance Order guarantee affects parallelism Geometry Shader Geometry Shader Geometry Shader 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 ATI Optimized for 1:1 and 1:4 amplification 1 High amplification can't use on-chip buffers – memory bandwidth problem
Performance Benefits Reduces 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 traffic Reduces 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 amplification Instancing
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 10 SIGGRAPH 2007 Course Notes
Resources www.opengl.org/registry/specs/ARB/geometry_shader4.txt GL_ARB_geometry_shader4
Resources www.realtimerendering.com Section 3.5

Introduction To Geometry Shaders

Editor's Notes

  • #4 Since late 2006 Direct3D can destroy primitives. OpenGL might require at least 1 primitive to be output.
  • #6 Color clamping and flat shading actually happen right before clipping
  • #7 Must output at least 1 primitive Input primitive is discarded