Operations#

The following is a table of optimization modules currently supported by the Scene Optimizer, with a brief description of the functionality provided. Click on any optimization module to see detailed documentation about it.

Optimization Module

Description

Auto UV Unwrap

Generate texture coordinates for meshes using unwrap methods with low distortion.

Compute Extents

Compute and author the extent property for Meshes. If the meshPrimPaths option is empty, compute for all prims in the stage.

Compute Pivot

Center mesh at centroid in canonical orientation.

Decimate Meshes

Reduce tessellation density for mesh prims.

De-duplicate Geometry

Convert identical meshes into instances.

Edit Stage Metrics

Set the Meters Per Unit for the stage.

Find Coinciding Meshes

Identify meshes that share the same location based on a tolerance metric.

Find Hidden Meshes

Finds meshes that are globally invisible meaning they are invisible from any camera that does not cross meshes in the scene.

Flatten Hierarchy

Finds and removes redundant Xforms to reduce prim count.

Generate Projection UVs

Generate texture coordinates for meshes using various projection methods.

Merge Static Meshes

Merge individual meshes. There are many options to control merge behavior, for example whether to merge all meshes or merge only meshes with the same material.

Merge Vertices

Merge vertices that are within a given tolerance apart.

Optimize Materials

Run operations to optimize materials in a stage.

Optimize Primvars

Flatten or index primvars, or check whether they can be simplified, for example reducing from faceVarying to uniform.

Optimize Skeleton Roots

Merge all meshes for meshes attached to a skeleton. This can greatly improve character playback speed by optimizing scenes for GPU skinning computation.

Optimize Time Samples

Remove redundant time-samples from attributes in a stage.

Organize Prototypes

Reparent internal scene-graph instance prototypes under a user-specified namespace.

Prune Leaf Xforms

Prune unnecessary leaf grouping prims (Scope, Xform) from a stage.

Python Script

Execute a user defined python script with access to the current USD stage.

Remesh Meshes

Remesh existing mesh prims to user defined tolerance.

Split Meshes

Split disjoint meshes into multiple mesh prims.

Subdivide Meshes

Apply Catmull-Clark or Loop subdivision iterations to meshes.

Triangulate Meshes

Converts polygonal meshes to triangle-only meshes.

Utility Functions

Help functions to pre-process components for scene optimizer operations.

Caution

Scene optimizer operations are designed to work with the current selected variants. If optimizations are needed on multiple variants, it is suggested that they are applied to each variant individually. This can be achieved by externalizing/exporting the contents of each variant to external OpenUSD assets, optimizing each file, and then referencing the output files into the desired variant compositions.

Auto UV Unwrap#

This operation generates texture(UV) coordinates for mesh prims with lower distortion than projection based methods, and adds them as the st primvar.

../_images/ext_scene_optimizer_generateAtlasUV_arguments.png

Argument

Description

Meshes

Determines which meshes to generate UVs for.

Meshes can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Distortion Threshold

Distortion threshold for the AutoUV algorithm (should be greater than 1). Lower values result in unwraps with lower distortion but more islands, while higher values result in fewer islands but higher distortion.

Enable Atlas Packing

Generates tightly packed, non-overlapping UV islands if enabled. Otherwise, UV islands will overlap (ok for tiling textures).

Use World Space Scales

Scales UV islands to world space dimensions of the source mesh. Otherwise, scales UV coordinates to [0, 1]^2 range.

Scale Factor

Apply a different scale factor to the generated UVs, higher numbers will increase texel density(more repeating tiling) and lower numbers have less density(less repeating tiling).

Scale Units

Use predefined real world scale units that will set the scale factor to the corresponding value.

Overwrite Existing

Overwrite existing UVs on defined meshes if enabled (default setting), when disabled this will only create UVs for meshes that don’t have any existing UV primvars.

Compute Extents#

This will compute/recompute and author the extents property for meshes. If the meshPrimPaths option is empty, all prims in the stage will be computed.

Extents are the axis aligned bounding boxes of the meshes, these do not always exist in a USD file. The extents can be used to improve scene performance since they allow the application to know the exact bounds of an object. Running this operation on an imported stage can potentially help improve overall render and stage traversal performance.

../_images/ext_scene_optimizer_computeExtents_arguments.png

Argument

Description

Static Meshes To Compute

Defines the meshes to operate on.

Note

If left blank, all meshes in the scene will be considered (default setting).

Compute Pivot#

Compute Pivot will place the parent transform at the center of the bounding box of the target mesh, think of this as creating a center pivot in other DCC tools. This makes it easier to interact with objects in the scene because the transform manipulator is centered on the object.

Some tools generate scenes where the transform is at the origin, meaning it is far from the actual vertices, making it hard to move a mesh precisely.

../_images/ext_scene_optimizer_pivot_arguments.png

Argument

Description

Prims To Process

Defines the prims to operate on.

Prims can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Path expressions can be used.

Note

If left blank, all prims in the scene will have their pivot computed.

Overwrite Authored Pivots

By default this operation will not overwrite any existing pivot. If this option is checked then existing ones will be replaced.

Apply To

Where to apply pivots - either to only Meshes, or Meshes and Xforms.

Method

The default Weighted option will create a pivot that tends towards the average of the points that define the geometry. The Bounding Box Center option will create a pivot in the center of the overall bounding box of the prim.

Decimate Meshes#

Reduce decimation amount on an input UsdGeom mesh primitive type.

../_images/ext_scene_optimizer_decimate_meshes_arguments.png

Argument

Description

Meshes to Decimate

Defines the prims to operate on.

Prims can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all mesh prims in the scene will be considered (default setting).

Reduction Factor

The amount percentage to reduce targeted mesh prims.

Depending on the input amount, the operation will try to reduce meshes to the defined target reduction percentage. For example, if the value is 10.0, the operation will target to reduce the total face count to be 10 percent of original value.

Note

Acceptable input values are 0.0-100.0

Maximum Mean Error

The mean error amount that is acceptable for the decimation reduction factor. Lower numbers have a closer trace tolerance to retain more model information(recommended), higher values will yield lower face counts.

Caution

If both Reduction Factor and Maximum Mean Error are set, the decimator stops when it reaches the Reduction Factor target or can’t find any moves within the error bounds, whichever happens first. If both values are set to 0, the decimation will automatically reduce to the smallest possible face count for the inputs.

Note

Acceptable input values are 0.0-100.0

Guide Decimation

Guide the decimation by using normals or colors (if available).

Makes the operation pay closer attention to the provided attribute. By default, the operation will use normals (if available) as the guiding attribute.

Note

If there are no existing normals on input mesh prims, this will affect the output mesh display. It is recommended that normals be created in DCC/authoring package prior.

CPU/GPU Vertex Thresholds

Controls what internal algorithm the operation will use for a given mesh prim.

When the vertex count of a mesh is higher than the first value, a CPU parallel algorithm is used, and when higher than the second value a GPU algorithm is used.

De-duplicate Geometry#

This will replace multiple duplicate meshes in a scene to a single mesh and create references/instances to the single mesh prim. Since a referenced mesh uses less memory than the full duplicated mesh, this option can reduce system memory and vram consumption.

This process is only effective if there are meshes that are identical but are not already instanced, so you may find this optimization may not have any effect on your scene. To see what optimizations will take place, we will want to utilize Window -> Utilities -> Statistics window to see before and after the optimization metrics.

The operation also supports a fuzzy comparison mode. In this mode, the similarity measure used is independent of the tessellation of meshes and based on their relative shape deviation. The fuzzy mode comparison is available as a CPU and GPU implementation.

../_images/ext_scene_optimizer_deduplicateGeometry_arguments.png

Argument

Description

Geometry to De-duplicate

Defines the meshes to operate on.

Meshes can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all meshes in the scene will have their pivot computed (default setting).

Consider Deep transforms

When enabled (default) this will look for duplicate meshes where point values have been uniformly transformed.

Tolerance

Acceptable point position change during deduplication. The value is a stage unit and before and after point positions are compared in world space.

For fuzzy deduplication the tolerance value represents a maximal relative deviation of the oriented bounding box extents and volumes of two meshes to be considered equal.

Caution

The meaning of this argument changed in version 105.0.6, values of 0.001 prior to the change should be updated to 0.05 to achieve similar results.

Method

Determines which operation to use when processing inputs. The options are:

  • Copy Values: From the RTX renderer perspective within Omniverse, the copy values option will create a new transform matrix to the meshes and copy the points and normals values from the original mesh to the renderer. This won’t reduce the number of prims in the USD stage, but will help ensure the render can identify more available duplicate meshes.

  • Reference: Reference will find meshes that are identical, when considering deep transforms, then removes all but one of the Meshes and will create referenced instances to the single mesh prim. Like with the copy values option a new transform is added to ensure matching world space positions. This ensures that the targeted meshes are de-duplicated by the renderer, but also reduces the number of times duplicate data exists in the USD files on disk.

  • Instanceable Reference (Default): Instanceable Reference has the same behavior as the reference option, but will mark the targeted prims as instanceable. This means that the resulting meshes cannot be edited and will reduce the number of unique prims defined in the USD stage. This is the default setting for the Deduplicate geometry process.

  • Set Attribute: If enabled, an integer attribute is added to each mesh containing a duplication set number. Two meshes get the same number greater than zero if and only if they are identified as duplicates. No merges are performed in this this case. This allows users to perform their own merges based on the attribute value.

Caution

Multiple De-duplicate Geometry processes run in succession can lead to unreliable results and possible kit instability. It is recommended to run this process with the default settings to achieve the best results.

Fuzzy Mode

Determines the mode of comparison. When enabled, the similarity measure used is independent of the tessellation of meshes and based on their relative shape deviation.

Edit Stage Metrics#

This operation changes the metersPerUnit and/or upAxis of a stage’s active edit target layer by updating the layer’s metadata and applying relevant transformations to attributes that represent world space units so that they reflect the new metersPerUnit/upAxis.

Note

Edit Stage Metrics operation is designed to only modify attributes that represent a world space value in the stage’s active edit layer. This means prims/attributes that exist in the scene from external references or sublayers will not be affected by the operation. See Encoding Stage UpAxis

An overview of some specifics about how the operation will affect attributes or xformOps in the stage:

  • When changing the metersPerUnit of prims that are a defined schema that have inferred attributes values that don’t need to be defined. For example a Cube prim has a size attribute that does not need to be defined, and if it is not the cube will have a value of 2.0.

    When changing the metersPerUnit, the operation needs to create this size attribute in order to scale its inferred value of 2.0. These inferred attributes will only be created if they represent world space values and the prim of the attribute exists as a concrete def in the active edit layer.

  • When changing the upAxis of transforms that contain rotations it is not a straight forward problem due to rotation order needing to change in some instances, the Edit Stage Metrics operation will currently collapse a prim’s xformOp stack into a single matrix xformOp.

    This creates a few cases with surprising behavior, for example if the edit stage layer contains an over on a single xformOp in a stack of xformOps on a prim in the underlying sublayer/reference, this will cause the entire xformOp stack to have its up axis transformed even though only a part of the stack exists in the active edit layer.

../_images/ext_scene_optimizer_edit_stage_metrics.png

Argument

Description

Meters Per Unit

Set the meters per unit value to one of the following value:

  • None: 0.0

  • Centimeters (Default): 0.01

  • Meters: 1.0

  • Millimeters: 0.001

  • Kilometers: 1000.0

  • Inches: 0.0254

  • Feet: 0.3048

  • Yards: 0.9144

  • Miles: 1609.344

  • Nanometers: 0.0(not set yet)

  • Micrometers: 0.0(not set yet)

  • Lightyears: 9460730472580800.0

  • Custom: Input user defined scale here

Up Axis

Set the up axis for the stage to one of the following:

  • None (Default)

  • Z

  • Y

Caution

X up axis is not supported.

Collapse Xforms

When enabled the xformOps stack will be collapsed into a single matrix when changing up axis.

Find Coinciding Meshes#

Find meshes that occupy the same positional space in a scene.

../_images/ext_scene_optimizer_find_coinciding_meshes.png

Argument

Description

Meshes to Consider

Defines the mesh prims to consider when looking for coinciding geometry.

Tolerance

Tolerance value when comparing points in world space. Tolerance is the max distance between points in world space using stage units.

generated report

Results will be displayed in the generated report tab and affected prim paths can be copied by right clicking on them in the report#

Find Hidden Meshes#

Finds meshes that are not visible from any camera that does not cross meshes in the scene.

../_images/ext_scene_optimizer_find_hidden_meshes_arguments.png

Argument

Description

Meshes to consider

The prim paths of meshes that are considered for being occluders or hidden meshes.

Meshes can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all meshes in the scene will be considered.

Grid resolution

Resolution of the grid that is used to compute occlusion. The spacing of the grid corresponds to the maximal gap size that is considered to be closed.

Use GPU

If enabled, the GPU will be used to accelerate the occlusion computation.

Flatten Hierarchy#

Finds any Xforms in a stage that are redundant and removes them, in order to reduce prim count. This is typically an Xform that has a single Xform underneath it, or chains of single Xforms.

Certain conditions prevent an Xform from being removed. This includes Xforms that have multiple children, in order to retain some semblance of scene layout. Also Xforms that have a relationship (for example a material binding) or something that has a relationship targeting them (e.g. a material). Xforms that have time samples are not removed. Only Xforms in the current edit target are considered, any external references will be skipped.

Xforms that are referenced (for example as an instance) must also retain their original path, however Xforms underneath them can potentially be removed.

../_images/ext_scene_optimizer_flatten_hierarchy_arguments.png

Argument

Description

Paths To Process

The prim paths to process. Any paths will be recursively processed to find redundant Xforms descending from them.

Prims can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, the whole scene will be processed.

Identity Only

By default any unnecessary Xform can be removed, even if it contributes an opinion about transformation. The values it contributes will be added to a parent Xform to ensure prims retain their correct world position.

If this option is enabled then only Xforms that do not contribute an opinion will be removed. That is, they have an identity transform or have no opinion on transform at all.

Generate Projection UVs#

This operation generates texture(UV) coordinates for mesh prims, using the chosen projection type, and adds them as the st primvar.

../_images/ext_scene_optimizer_generateProjectionUV_arguments.png

Argument

Description

Meshes

Determines which meshes to generate UVs for.

Meshes can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all meshes in the scene will be considered (default setting).

Projection Type

Determines what type of projection is to be used. The options are:

  • Planar: UV coordinates are obtained by projection along the Y axis.

  • Spherical: Spherical projection, using a sphere of unit radius centered at the origin, with the poles placed along the Y axis.

  • Cylindrical: Cylindrical projection, using a cylinder of unit radius, with axis of symmetry along the Y axis.

  • Triplanar: Projection of each face into one of XY, YZ, or ZX planes. The choice minimizes the angle between directions respectively orthogonal to the plane and to the face. Note that flipping the winding of a face does not alter its associated UVs in this projection type.

  • Cube (Default): Similar to triplanar, but with the winding of the texture coordinates corrected (by mirroring across the U or V axis) if the angle between the normals of the face and the corresponding coordinate plane is obtuse.

Use World Space Scales

Determines whether to scale the source geometry to its world space dimensions before projection.

Scale Factor

Apply a different scale factor to the generated UVs, higher numbers will increase texel density(more repeating tiling) and lower numbers have less density(less repeating tiling).

Note

1.0 is set to cm scale, set 0.01 for meter scale. Scale as needed for stage requirements.

Scale Units

Use predefined real world scale units that will set the scale factor to the corresponding value.

Overwrite Existing

Overwrite existing UVs on defined meshes if enabled (default setting), when disabled this will only create UVs for meshes that don’t have any existing UV primvars.

Merge Static Meshes#

The merge static meshes process replaces multiple meshes that share common properties with a single merged mesh. This reduces scene prim count and can improve overall stage performance.

Caution

Once merged, you can no longer edit individual original meshes, but only the new merged mesh prims.

../_images/ext_scene_optimizer_merge_arguments.png

Argument

Description

Static Meshes To Merge

Defines the meshes to operate on.

Meshes can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

By default, Merge Static Meshes will skip any invisible prims. However if you specify an explicit path to an invisible prim here then that prim and any of its children will also be considered for merging. This is to allow supporting “Geometry Libraries”, where a scene may be structured with a number of invisible meshes that are referenced elsewhere in the scene.

Note

If left blank, all meshes in the scene will be considered (default setting).

Keep Materials Separate

Defines how meshes with different materials are handled.

If this option is selected, meshes with the same material will be merged. If not selected, all meshes will be merged regardless of original material.

Materials will be preserved on the output mesh and assigned to individual faces using geomSubsets.

Compute Display Colors

Set display color and opacity to values computed from the bound material.

The assign display color option will look at the following USD prim attributes on either the material or the surface shader currently assigned to the source mesh prim or prims:

  • inputs:displayColor

  • inputs:diffuseColor

  • inputs:diffuse_color_constant

Opacity will be derived from inputs:opacity attribute from the bound material or surface shader.

This option is disabled by default.

Note

We currently don’t support deriving any of this information from texture inputs that are connected to bound materials. And if no value is present we will set the value of the color to 0.2, 0.2, 0.2 or neutral gray and the opacity to 1.

Original Mesh Handling

What to do with any meshes in the original scene that were merged.

They can be ignored, deleted, deactivated or hidden.

Merge Boundary

Defines where the merged geometry should be parented. The options are:

  • Stage (Default): Parent at the root of the stage - /merged

  • Root Prim: Parent under the root prim defined in the USD stage - /Root/merged

  • Parent Prim: Use the first prim parent

  • Parent Xform: Use the first xformable parent

  • Kind: Assembly: Use the first parent of kind assembly

  • Kind: Group: Use the first parent of kind group

  • Kind: Component: Use the first parent of kind component

  • Kind: Model: Use the first parent of kind model

  • Kind: Subcomponent: Use the first parent of kind subcomponent

Click these links for more information on USD Kinds:

Output Name

The name prefix to use for newly created merged meshes.

Can also be a partial path, eg MyMeshes/Merged.

Strict Attribute Mode

Makes the merge process more conservative, requiring every attribute on a prim to match, rather than a smaller list of attributes that are known to prevent merging. This is intended to be useful in the case that meshes should not be merged together due to attributes that aren’t understood by Merge.

Allow Single Meshes

When enabled, means that a single mesh will still be “merged”. While there is nothing for it to merge with it means it will be processed and potentially moved to the same location as other merged meshes.

Spatial Clustering Mode

Whether or not to spatially cluster meshes.

There are currently two modes available:

  • Bounding Box

    If enabled, meshes will only be merged if they are close together. The Spatial Threshold and Spatial Max Size arguments allow you to fine-tune the behavior.

    The general approach is to cluster meshes together as long as they are within a certain distance from each other, but limit the merged output meshes to a maximum size. This provides a way to merge parts of the scene in to smaller chunks where there is no other method by which to do so (for example, using a Kind).

    The current spatial merging algorithm is fairly naive. For each input mesh a new cluster is started, consisting of only that mesh. A search is done to find any neighboring meshes - that is, any meshes that are within the Spatial Threshold of the input mesh. Those neighbors form a queue, and each is checked in turn to see whether the combined bounding box of the current cluster and the neighbor would exceed the Spatial Max Size argument.

    If not, the neighbor is included in the cluster, and in turn its neighbors are then added to the queue. This continues until either there are no more neighbors or each neighbor that is checked would cause the cluster to exceed the maximum size, exhausting the queue. The process is then repeated for the next input mesh, skipping any that have already been clustered.

    This is a straightforward method that can produce reasonable results depending on the scene. A limitation of the approach however is that the results are largely based on how the scene is authored. As the meshes are simply iterated in the order they are found you would get potentially different results if the order of traversal changed. In particular, the first mesh that is encountered will always be the starting point of the first cluster, and currently that is purely down to scene ordering.

  • Vertex Count

    This is a simpler clustering mode. We generate an overall BVH (tree) of the meshes in the stage, based on their bounding boxes, and then walk this until we find a branch of the tree with fewer vertices than the specified Spatial Vertex Count argument. Those meshes are then merged together.

Note

Spatial Clustering only happens within Merge Boundaries.

Spatial Threshold

The distance between which two meshes can be considered close enough.

Spatial Max Size

The maximum size of an output mesh when clustering meshes spatially.

Spatial Vertex Count

The maximum number of vertices that we can cluster together.

Merge Results (Report)#

Note

A report will be generated by default when any Scene Optimizer operation is executed from core version 105.1.8 and newer. The report can be turned off in the Configure Menu by disabling Generate Report option.

merge report stats

In the merge stats results there is the option to view the Merge Results which will give a detailed view of how prims were merged.#

merge report detail view

Merge Results with attribute information about prims to be merged and resulting merged output details.#

Merge Vertices#

Merge vertices in the input UsdGeom mesh primitive type, that are within a given tolerance.

../_images/ext_scene_optimizer_merge_vertices.png

Argument

Description

Meshes to process

Defines the prims to operate on.

Prims can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all mesh prims in the scene will be considered (default setting).

Tolerance

The tolerance (distance) apart for vertices to be considered equal.

Merge Boundaries

If true, all vertices (including boundary vertices) will be considered when merging. If false, only interior face vertices will be consired when merging.

Remove degenerate faces

Removes degenerate faces, applies after the vertices have been merged.

Make Manifold

After merging vertices and excluding degenerate faces, ensure the output is a manifold mesh

Optimize Materials#

Run operations to optimize materials in a stage. Run this optimization to replace duplicates with references to unique materials. This can reduce memory usage and also improve performance.

../_images/ext_scene_optimizer_optimizeMaterials_arguments.png

Argument

Description

Materials to Optimize

Determines which materials to modify, are able to target subsets.

Materials can be selected in USD Composer and added here using the + option, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all materials in the scene will be considered (default setting).

Method

Determines which operation to use when processing inputs. The options are:

  • Deduplicate (Default): Attempt to remove duplicate materials, rebinding any affected prims to a single common material.

  • Convert To Color: Find materials that can be replaced with a simple displayColor primvar, author it on the meshes and delete the materials.

  • Remove Unbound: Find any materials that are not bound to anything (i.e, unused) and remove them.

Optimize Primvars#

Run operations to optimize primvars in the stage. This tool can convert flat primvars to indexed, or indexed primvars to flattened. It can also attempt to simplify primvars. For example if a primvar is authored as faceVarying (a value per vertex), but all the values are equal, this can be simplified to constant interpolation. Or if all the values for each face are equal, it could be reduced to uniform interpolation.

Flattening refers to removing indexing from a primvar and authoring all of the values in one array, whether they are unique or not. This may take more disk space. Indexing refers to recording only unique values in the primvar data, and having separate indices that refer to the unique values. This can take less space, particularly if there are not many unique values versus the length of the array.

../_images/ext_scene_optimizer_optimizePrimvars_arguments.png

Argument

Description

Prim Paths

Determines which prims to process primvars for.

Prims can be selected in USD Composer and added here using the + option, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all prims in the scene will be considered (default setting).

Primvars

An optional comma-separated list of primvar names (without the primvars: namespace) to filter.

If left blank then all primvars will be operated on. If specified, then only the named primvars will be considered.

Mode

Determines what to do with primvars. The options are:

  • Ignore (Default): Do nothing. This is intended to be used when simplifying primvars, to leave their indexing the same.

  • Index: * Reauthor any flat primvars with indexing.

  • Index (Forced): Like Index, index any flat primvars. Also re-index any indexed primvars, to ensure the indexed values are unique.

  • Flatten: Flatten any indexed primvars.

  • Remove: Remove primvars along with their indices.

Simplify

Determines whether or not to try and simplify any primvars that are encountered.

Note

When using the Authoring Mode Ignore, any primvars that are reduced will remain flat if they were originally flat, or indexed if they were originally indexed. If a different authoring mode is specified then they will be authored using that mode.

Remove If Bound

This option relates to using the mode Remove and will be hidden if that is not chosen. If Remove is set, then enabling this option will only remove primvars from a prim that has a bound material.

You can use this, for example, to remove displayColor primvars from a prim when they are not required.

Optimize Skeleton Roots#

This operation will merge all meshes for meshes attached to a skeleton. This can greatly improve character playback speed by optimizing scenes for GPU skinning computation.

This is a good option to try if you have rigged characters that use UsdGeomSkel. It will merge all meshes on the skeleton into a single mesh. Similar to merge static meshes, this will not significantly reduce memory usage.

../_images/ext_scene_optimizer_optimizeSkelRoots_arguments.png

Optimize Time Samples#

This operation checks for redundant time-samples on attributes and removes them.

../_images/ext_scene_optimizer_optimizeTimeSamples_arguments.png

Argument

Description

Prim Paths

Defines the prims to check.

Prims can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all prims in the scene will be considered (default setting).

Remove Interpolated

If enabled this means any time-samples that are different but can be linearly interpolated will also be removed.

After using this option, playing back a stage set to UsdInterpolationTypeLinear will look the same but if the stage is set to UsdInterpolationTypeHeld then it may play back differently. This is due to having removed the interim samples that can be interpolated, thus having no explicit samples to “hold”.

This option only applies to floating-point types for which USD supports interpolating timesamples.

Click here to view OpenUSD’s API docs on linear interpolation.

Epsilon (Double)

The epsilon to use when considering whether two double values should be treated as equal even though they are different by some small amount, to account for floating-point precision differences.

Epsilon (Float)

The same as Epsilon (Double) but for float types. Typically this is smaller due to floating-point precision issues with floats vs doubles.

Organize Prototypes#

Reparent internal scene-graph instance prototypes under a user-specified namespace.

../_images/ext_scene_optimizer_organizePrototypes_arguments.png

Argument

Description

Prototypes Namespace

Namespace (default setting “Prototypes”) where prototypes will be reparented.

Preserve Hierarchy Levels

The number of the prototype’s immediate ancestors to retain when reparenting.

For example, original prototype /World/Shelving/Wood/Proto will be copied to /Prototypes/Proto for value 0 (the default setting) or /Prototypes/Shelving/Wood/Proto for value 2.

Prune Leaf Xforms#

This operation finds and prunes any leaf grouping primitives found in a stage (for example Xform, Scope).

../_images/ext_scene_optimizer_pruneLeaves_arguments.png

Argument

Description

Prim Paths to Search

Search for empty grouping primitives on these paths (inclusive). Wildcards can be used.

Note

No grouping primitives above the specified paths will be considered for pruning, even if they end up being empty as a result of this operation.

Note

If left blank, all paths in the stage will be considered (default setting).

Method

Delete or deactivate any leaf prims that are found.

Python Script#

This operation executes user defined python code with access to the current stage. It can be used to manipulate the stage in ways not currently supported by the Scene Optimizer. The python script can be stored in the Preset configuration file, making it reusable and portable.

../_images/ext_scene_optimizer_pythonScript_arguments.png

Argument

Description

Python Script

The python code to run when executing this operation.

The following variables will automatically be available during execution:

  • stage: The pxr.Usd.Stage object the holds the Stage to be operated on.

Note

This is a python only feature and cannot be used from the Standalone application.

Caution

This operation is not available for custom code execution in USD Explorer.

Remesh Meshes#

This operation will remesh input mesh prims to a defined tolerance to create a new mesh topology. Input mesh and normals will guide the maximum error and size of the triangles to match input volume.

Caution

Stage units will affect scale of input values.

../_images/ext_scene_optimizer_remeshMeshes_arguments.png

Argument

Description

Meshes to split

Determines which meshes to operate on.

Meshes can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all meshes in the scene will be considered (default setting).

Gradation

Controls the rate of growth of triangles sizes, when low surface curvature allows it without exceeding the permitted error amount.

A gradation of 0 indicates that there can be no growth, and therefore forces all edges to be of (nearly) the same length, as controlled by the Maximum Error parameter.

If a mesh consists of precisely equilateral triangles only, then all the edges in the mesh (at least within a connected component) would have to be of exactly the same length, and every triangle would have the same area. Therefore, the smaller this common edge length, the larger the number of triangles needed to cover the input surface area.

This uniform coverage can be a very inefficient representation for low-curvature or flat regions of surface where much larger (and fewer) triangles would be sufficient to reach a desired level of precision. By allowing the triangles to deviate a little from being perfectly equilateral, the edge lengths can grow gradually from some part of the surface to another.

The gradation parameter indirectly controls the permitted amount of deviation from equilaterality. The larger the gradation, the faster the pace of edge-length growth, but also the higher the observable deviation of output triangles from equilaterality.

Maximum Error

The approximate distance allowed between the original surface and the remeshed one.

This parameter also sets the shortest permitted edge length (up to a tolerance factor) to the maximum error times square root of 3. So, for example, a maximum error of 0.1 would produce a mesh where the shortest edge length (or indeed all edges lengths if the gradation is 0) would be around 0.173.

Note

Input units scale are matched to the current stage units, this is an approximate local measuring based on some smooth interpretation of the input mesh.

Split Meshes#

This operation determines whether meshes in a stage contain multiple disjoint mesh descriptions, specifically parts of a mesh that don’t share any vertices. These can then be replaced with multiple mesh prims that contains their defined entity part of the geometry.

When the Spatial Clustering Mode is enabled meshes will be split and merged spatially by user specified values. This also greatly improves processing performance when running in this mode to split and merge meshes in a single process verses running each operation separately.

../_images/ext_scene_optimizer_splitMeshes_arguments.png

Argument

Description

Meshes to split

Determines which meshes to operate on.

Meshes can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all meshes in the scene will be considered (default setting).

Split On

Determines how to attempt splitting meshes. The options are:

  • Vertices (Default): Analyze the geometric data of meshes to determine whether they are disjoint.

  • Geom Subsets: Split meshes based on any UsdGeomSubset children they contain.

Split Collocated Points

If enabled, points that are collocated will be considered when splitting a disjoint mesh.

Note

This does not modify the output topology; duplicates will still exist. It is only for the purpose of determining what is disjoint.

Spatial Clustering Mode

Mode that allows splitting and merging of meshes in a single process based on a spatial size.

When changed from None this enables a two step operation in one process to avoid processing of split meshes and merge meshes in separate operations.

  • None (Default): Disables any spatial clustering.

  • Bounding Box

    Define a bounding box size for how meshes will be merged.

    • Spatial Threshold: Maximum distance for considering mesh neighbors, this determines what other meshes to include into the defined max size.

    • Spatial Max Size: Maximum size that the clustered meshes defined by the spatial threshold will be output to a new mesh prim.

Caution

These bounding box spatial values are based on the current stage defined meters per unit (MPU). Values that are too small may create unexpected results or no merging of split meshes.

  • Keep Materials Separate

    Defines how meshes with different materials are handled.

    If this option is selected, meshes with the same material will be merged. If not selected, all meshes will be merged regardless of original material.

    Materials will be preserved on the output mesh and assigned to individual faces using geomSubsets.

  • Merge Boundary

    Defines where the clustered geometry should be parented. The options are:

    • Stage (Default): Parent at the root of the stage - /merged

    • Root Prim: Parent under the root prim defined in the USD stage - /Root/merged

    • Parent Prim: Use the first prim parent

    • Parent Xform: Use the first xformable parent

    • OriginalPrim: Use the original prim that meshes have been split from i.e. only cluster on split boundaries

    • Kind: Assembly: Use the first parent of kind assembly

    • Kind: Group: Use the first parent of kind group

    • Kind: Component: Use the first parent of kind component

    • Kind: Model: Use the first parent of kind model

    • Kind: Subcomponent: Use the first parent of kind subcomponent

      Click these links for more information on USD Kinds:

  • Output

    Name The name prefix to use for newly created clustered meshes. Can also be a partial path, eg MyMeshes/Clustered.

  • Strict Attribute Mode

    Makes the clustering process more conservative, requiring every attribute on a prim to match, rather than a smaller list of attributes that are known to prevent clustering. This is intended to be useful in the case that meshes should not be clustered together due to attributes that aren’t understood by clustering.

  • Vertex Count

    Define a total amount of vertices per clustered output mesh.

    • Spatial Vertex Count

      Maximum number of vertices that will be output to new mesh prim.

Subdivide Meshes#

This operation performs either Catmull-Clark or Loop subdivision on meshes in a stage, replacing the topology with the subdivided result. Mesh subsets are preserved and floating-point data defined on corners and vertices will be interpolated.

Caution

Creases and sharp points are not yet supported.

Note

No normal recalculation to account for curvature introduced by the subdivision algorithm is applied to resulting output mesh.

../_images/ext_scene_optimizer_subdivide_meshes_arguments.png

Argument

Description

Meshes to subdivide

Define the prim paths to operate on.

Meshes can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all meshes in the scene will be subdivided.

GPU vertex count threshold

If a mesh has more vertices than this threshold, then use a GPU algorithm.

Subdivision Method

Which algorithm to use.

  • Only Catmull-Clark and Loop subdivision are supported.

Subdivision Iteration Count

Define how many subdivision iterations to apply to each mesh.

  • 8 iterations is the max value.

Triangulate Meshes#

Takes polygonal meshes and rewrites them to use only triangles.

../_images/ext_scene_optimizer_triangulate_meshes_arguments.png

Argument

Description

Meshes to triangulate

Define the prim paths to operate on.

Meshes can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all meshes in the scene will be triangulated.

GPU vertex count threshold

If a mesh has more vertices than this threshold, then use a GPU algorithm.

Utility Functions#

This operation contains a number of smaller functions that don’t necessarily need a full operation of their own. Generally this would mean they are a simple process that does not require any real configuration.

../_images/ext_scene_optimizer_utilityFunction_arguments.png

Argument

Description

Prim Paths

Defines the prims to operate on.

Prims can be selected in USD Composer and added here using the Add button, or names can be typed in directly. Wildcards can be used.

Note

If left blank, all prims in the scene will be considered (default setting).

Function

The utility function to run. The current available functions are:

  • Deinstance: Sets instanceable to False for any prims that have it enabled

  • Unbind Materials: Unbind any bound materials

  • Set Instanceable: Looks for prims that reference others, with no modifications, and enables the instanceable flag