Higher Order Surfaces in OpenGL with NV_evaluators Cass Everitt cass@nvidia.com.

Post on 29-Jan-2016

222 views 0 download

Tags:

Transcript of Higher Order Surfaces in OpenGL with NV_evaluators Cass Everitt cass@nvidia.com.

Higher Order Surfaces in OpenGL with NV_evaluators

Higher Order Surfaces in OpenGL with NV_evaluators

Cass Everitt

cass@nvidia.com

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 isImportant

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

12.0

12.5

13.0

13.5

14.0

• 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 glSecondaryColorEXT5 Fog coordinate glFogCoordEXT8 Texture coord 0 glMultiTexCoord9 Texture coord 1 glMultiTexCoord10 Texture coord 2 glMultiTexCoord11 Texture coord 3 glMultiTexCoord

0 vertex position glVertex1 vertex weights glVertexWeightEXT2 normal glNormal3 Primary color glColor

14 Texture coord 6 glMultiTexCoord15 Texture coord 7 glMultiTexCoord

12 Texture coord 4 glMultiTexCoord13 Texture coord 5 glMultiTexCoord

Triangular Patches are Necessary

3DStudioMax

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, cass@nvidia.com

• www.nvidia.com/developer