usdgeom-mesh-subdivision#
Code |
VG.010 |
---|---|
Validator |
|
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 requiredFix 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.