usdgeom-mesh-subdivision#

Code

VG.010

Validator

latest+

Compatibility

core usd

Tags

🚀

Summary#

Do not subdivide meshes with Normals.

Description#

In OpenUSD, mesh primitives have an attribute UsdGeom.Mesh->subdivisionScheme which defines the mesh subdivision behavior. If this attribute is unset the mesh will be subdivided by default, so it is important to set the value explicitly to “None” when subdivision is not required.

Meshes which are intended to be subdivided should not also provide surface normals. If the subdivision scheme is set and there are also surface normals, the surface normals will be ignored.

Subdivision should be used selectively to create smooth surfaces or enable displacement. Do not use subdivision when the mesh is already sufficiently tessellated.

Why is it required?#

Avoiding unnecessary subdivision enables:

  • Faster “time to first pixel” (scene translation time)

  • Optimized memory usage

  • Improved rendering performance

  • Better resource utilization for complex scenes

Examples#

#usda 1.0

# Invalid: Unnecessary subdivision on simple shape
def Mesh "OverSubdividedCube" {
    uniform token subdivisionScheme = "catmullClark"
    int[] faceVertexCounts = [4, 4, 4, 4, 4, 4]
    int[] faceVertexIndices = [0, 1, 2, 3, ...]
    normal3f[] normals = [(0,0,1), (0,0,1), (0,0,1), (0,0,1), ...] # Meshes that have normals should not have subdivision attributes
    point3f[] points = [(0,0,0), (1,0,0), (1,1,0), (0,1,0), ...]
}

# Valid: No subdivision for simple shape
def Mesh "SimpleCube" {
    uniform token subdivisionScheme = "none"
    int[] faceVertexCounts = [4, 4, 4, 4, 4, 4]
    int[] faceVertexIndices = [0, 1, 2, 3, ...]
    normal3f[] normals = [(0,0,1), (0,0,1), (0,0,1), (0,0,1), ...]
    point3f[] points = [(0,0,0), (1,0,0), (1,1,0), (0,1,0), ...]
}

How to comply#

  • Set subdivisionScheme explicitly to None if subdivision is not required

  • Fix in source application

Validation#

The Omniverse Asset Validator has a check that warns of meshes where the subdivisionScheme is undefined, as the default value of subdivisionScheme is catmullClark which may not be intended.

For More Information#