Operations

The following is a list of optimization modules currently supported by the scene optimizer, with a brief description of the functionality provided.

  • 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.

  • Compute Pivot
    • Center mesh at centroid in canonical orientation.

  • 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.

  • De-duplicate Geometry
    • Convert identical meshes into instances.

  • Find Coinciding Meshes
    • Identify meshes that share the same location based on a tolerance metric.

  • Process Point Clouds
    • Partitions selected point clouds into non overlapping chunks.

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

  • Optimize Materials
    • Run operations to optimize materials in a stage.

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

  • Split Meshes
    • Split disjoint meshes into multiple mesh prims.

  • Generate Projection UVs
    • Generate texture coordinates for meshes using various projection methods.

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

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.

Note

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

Consider Materials

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.

Options:

  • 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

For more information on USD Kinds:

https://openusd.org/release/api/kind_page_front.html

https://openusd.org/release/glossary.html#usdglossary-kind

Output Name

The name prefix to use for newly created merged meshes.

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

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

Meshes To Process

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.

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

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.

../_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.

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.

Options:

  • 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.

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.

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.

Note

To see the results, the Configure menu needs to be enabled and at the top of the operation stack. This must also have the Generate Report option enabled. The Execute All button at the top of the UI will generate the report.

../_images/ext_scene_optimizer_find_coinciding_meshes_stack.png ../_images/ext_scene_optimizer_find_coinciding_meshes_report.png

Process Point Clouds

Partitions selected point clouds into non overlapping chunks.

../_images/ext_scene_optimizer_processPointClouds_arguments.png

Argument

Description

Point Clouds to Process

Defines the point clouds to operate on.

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

Caution

Only E57 and PTS file formats are currently supported within USD Composer. This operation will expect a USD prim type as input.

Note

If left blank, all point clouds in the scene will be processed (default setting).

Merge Point Clouds

When enabled (default) point clouds will be merged together before optional partitioning, otherwise point clouds will be partitioned independently.

Partition Into Chunks

When enabled (default) point clouds will be partitioned into non overlapping chunks defined by max number of points in Points Per Chunk.

Points Per Chunk

Sets the max number of points per partition chunk.

Note

Point width is computed automatically by the point cloud tool within USD Composer. Point clouds without defined widths can be expensive to render, so this computation is also an optimization. To modify the existing point width, use the snippet below:

from pxr import Usd, UsdGeom, Sdf, Gf
import omni.usd

stage = omni.usd.get_context().get_stage()
mesh_prims = [x for x in stage.Traverse() if x.IsA(UsdGeom.Points)]
for each in mesh_prims:
    i = UsdGeom.Points(each)
    i.GetWidthsAttr().Set([0.04])

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).

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.

Options:

  • 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.

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.

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 contain just their part of the geometry.

../_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).

Method

Determines which operation to use.

Options:

  • Meshes (Default)
    • When disjoint Meshes are found, new Meshes containing only their geometry will be created.

  • Geom Subsets
    • A debug option. This method will create GeomSubsets with Materials using random colors in order to visualize the disjoint parts of a mesh.

Weld Points

If enabled, duplicate vertices described in the mesh will be compressed and re-used in faceVertexIndices.

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_generateUV_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.

Options:

  • 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.

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.