Higher Order Surfaces in OpenGL with NV_evaluators Cass Everitt
Why surfaces? Higher order primitives Animation Level of Detail Bandwidth Filtering
Overview What are the “general evaluators” defined NV_evaluators? How do they differ from standard OpenGL evaluators? Important new features Per-edge tessellation control Fractional tessellation Support for all per-vertex attributes Direct support for triangular patches
What are the “general evaluators” defined by NV_evaluators? Like OpenGL evaluators, general evaluators can be used evaluate polynomial and rational bivariate functions defined relative to the Bezier basis
Why New Evaluators? OpenGL evaluators have not seen widespread use due to a variety of problems Difficult to optimize spec too strict on order of evaluation Incomplete support for all vertex attributes (particularly multiple texture coordinates) Difficult to use with adaptive LOD (tessellation scheme too rigid)
Why New Evaluators? (2) General evaluators address these issues Ease of optimization Support only 4-component maps Evaluate full range of all enabled maps at once Support all vertex attributes Provide more flexible tessellation schemes Eases varying LOD on adjacent patches Provides mechanism for smooth LOD Direct support for triangular patches
Per-Edge Tessellation Specification Easy to vary the tessellation across a patch Easy to render adjacent patches without cracks glMapParameterfvNV(GL_EVAL_2D_NV, GL_MAP_TESSELLATION_NV, edge_tess_ptr);
Four Independent Tessellation Factors
Generalized Tessellation is Important
Fractional Tessellation Not only is each edge’s tessellation independent, the tessellation does not have to be integral values! Enable smooth changes in LOD
Fractional Number of Segments Because of symmetry, edges always match if their control points and tessellation number are the same
Support for All Vertex Attributes A map can be applied to any numeric vertex attribute (0-15) with values as described below attribute number per-vertex Parameter per-vertex Command 4 secondary color glSecondaryColorEXT 5 Fog coordinate glFogCoordEXT 8 Texture coord 0 glMultiTexCoord 9 Texture coord 1 glMultiTexCoord 10 Texture coord 2 glMultiTexCoord 11 Texture coord 3 glMultiTexCoord 0 vertex position glVertex 1 vertex weights glVertexWeightEXT 2 normal glNormal 3 Primary color glColor 14 Texture coord 6 glMultiTexCoord 15 Texture coord 7 glMultiTexCoord 12 Texture coord 4 glMultiTexCoord 13 Texture coord 5 glMultiTexCoord
Triangular Patches are Necessary 3DStudio Max Patch outlines Hardware emulation
Direct Support for Triangular Patches Triangular patches can be converted to regular patches, but NV_evaluators provides support directly
Questions, comments, feedback Cass Everitt,