Operations
The following is a list of optimization modules currently supported by the scene optimizer, with a brief description of the functionality provided.
- 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.
- 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.
- Split Meshes
Split disjoint meshes into multiple mesh prims.
- 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.
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.
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.
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. |
Decimate Meshes
Reduce decimation amount on an input UsdGeom
mesh primitive type.
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 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. |
CPU/GPU Vertex Thresholds |
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.
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 |
Method |
Determines which operation to use when processing inputs. The options are:
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. |
Allow Scaling |
When enabled, fuzzy comparison will factor out uniform scaling. |
Consider Attributes |
When enabled (default setting), fuzzy comparison will take attributes into account, which may require meshes to have matching topologies to be considered equal. |
Use GPU |
If enabled, the GPU will be used to accelerate the duplication detection in fuzzy mode. |
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 asize
attribute that does not need to be defined, and if it is not the cube will have a value of2.0
. When changing themetersPerUnit
, the operation needs to create thissize
attribute in order to scale its inferred value of2.0
. These inferred attributes will only be created if they represent world space values and the prim of the attribute exists as a concretedef
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’sxformOp
stack into a single matrixxformOp
. This creates a few cases with surprising behavior, for example if the edit stage layer contains anover
on a singlexformOp
in a stack ofxformOps
on a prim in the underlying sublayer/reference, this will cause the entirexformOp
stack to have its up axis transformed even though only a part of the stack exists in the active edit layer.
Argument |
Description |
---|---|
Meters Per Unit |
Set the meters per unit value to one of the following value:
|
Up Axis |
Set the up axis for the stage to one of the following:
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.
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. |
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.
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.
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:
|
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
|
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.
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). |
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:
Opacity will be derived from 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 |
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:
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 |
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:
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 Vertices
Merge vertices in the input UsdGeom mesh primitive type, that are within a given tolerance.
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. |
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.
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:
|
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.
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 |
Mode |
Determines what to do with primvars. The options are:
|
Simplify |
Determines whether or not to try and simplify any primvars that are encountered. Note When using the Authoring Mode |
Remove If Bound |
This option relates to using the mode |
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.
Optimize Time Samples
This operation checks for redundant time-samples on attributes and removes them.
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 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. |
Prune Leaf Xforms
This operation finds and prunes any leaf grouping primitives found in a stage (for example Xform
, Scope
).
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.
Argument |
Description |
---|---|
Python Script |
The python code to run when executing this operation. The following variables will automatically be available during execution:
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. |
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.
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:
|
Method |
Determines what to do with any disjoint meshes that are found. The options are:
|
Weld Points |
If enabled, de-duplicate points in order to find connected islands, rather than individual faces. Note This does not modify the output topology; duplicates will still exist. It is only for the purpose of determining what is disjoint. |
Triangulate Meshes
Takes polygonal meshes and rewrites them to use only triangles.
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.
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:
|