|On this page|
This node is essentially an embedded SOP subnetwork combined with a SOP Import LOP. It lets you create SOP geometry "in place" in the subnet, and then "import" it from the subnet, with the same SOP-to-USD controls as on the SOP Import node.
See how SOP import works for detailed information on how the importer converts SOP information into USD.
Add a SOP Create node.
In the network editor, double-click the SOP Create node to go inside to the SOP subnet.
Use SOPs to generate geometry.
As you develop the geometry, you can add
pathstring attributes to SOP primitives to specify where they should appear in the USD scene graph tree when imported. If you specify a relative path (doesn’t start with
/), the value is appended to the SOP Create node’s Import path prefix parameter.
Remember that for polygons, all faces you want to be part of the same USD mesh prim must have the same value in their
(The SOP Create node can also create USD geometry subsets based on SOP string attributes and/or groups. Geometry subsets are useful for assigning materials to groups of faces.)
End the geometry network with an Output SOP.
The Output node is used as the output for the subnetwork. If you don’t have an Output node in the subnet, it uses whatever node has the display flag.
In the network editor, press U to go back up to the LOP network.
In the SOP Create node’s parameters, set the Import path prefix.
Any geometry that doesn’t have a
pathattribute is given a generated name (for example, all polygons go into a mesh prim named something like
mesh_0), and put under this prim path.
Any geometry with a relative
pathattribute value is prefixed with this prim path.
Load As Reference
Copy Contents Into Editable Layer
(When Load as reference is off.) By default, geometry imported from SOPs is treated like geometry imported from a file on disk: you can only edit it by applying stronger opinions on top. If you turn this on, however, this node puts the geometry in the active layer, so it can be modified by LOP nodes connected to this node’s output.
The node does this by copying the contents generated from the SOP geometry into an anonymous in-memory USD layer. This is slower, but provides more options for how many USD layers you need to write to disk, and what goes in each layer. This is similar to the operation of a Load Layer for Editing LOP.
Adjust Transforms for Input Hierarchy
(When Load as reference is off.) When this is on (the default), the node automatically compensates for transform problems created if you round-trip geometry from LOPs to SOPs (as packed USD primitives) and then back to LOPs again. If you know you are not round-tripping LOPs → SOP packed USD primitives → LOPs, you can turn this off to make importing faster.
Packed Primitives in SOPs only have a single transform, representing the full local-to-world transformation of the packed geometry. If you export a USD geometry primitive to SOPs as a packed USD primitive, Houdini flattens the full transformation hierarchy under the USD prim into a single transformation matrix.
This creates a problem if you then "round-trip" the SOP packed primitive back into LOPs, as the descendants will have their own transforms, which are also now incorporated into the root prim’s transform imported from SOPs. This results in an incorrect double-application of the transforms.
When this parameter is on (the default), the node examines every transformation imported from SOPs, in the context of the prim’s location in the scene graph hierarchy. If the prim (or its ancestors) already exist on the input stage, the node inverts the transformations of the ancestor prims, and applies them as additional local transformations on the prim. This ensures that the final world space location of the prim in LOPS will be the same as it was in SOPs.
If Copy Contents Into Editable Layer is on, the node applies these additional transforms directly to the imported primitives, otherwise the node creates a new active layer and puts the transforms in the new layer as overrides.
(When Load as reference is on.) Control whether the SOP geometry is added to the reference primitive as a Payload or Reference composition arc. Also indicates whether this new composition arc should be made stronger or weaker than existing composition arcs on this primitive.
Create a Payload composition arc that provides weaker opinions than existing payloads.
Create a Payload composition arc that provides stronger opinions than existing payloads.
Create a Reference composition arc that provides weaker opinions than existing references.
Create a Reference composition arc that provides stronger opinions than existing references.
(When Load as reference is on.) This node treats the converted geometry like an external USD geometry file. This controls which root-level prim to import from the USD prim hierarchy generated by converting the SOP geometry. You should leave this set to "Reference Automatically Chosen Primitive".
Reference Automatically Chosen Primitive
If the referenced file has a default primitive set, use that. If there is no default prim, use the first Xform prim at the root. If there is no Xform prim at the root, use the first root prim of any type.
Reference Default Primitive
If the referenced file has a default primitive set, use that. If not, display a warning on this node.
Reference Specific Primitive
Reference in the scene graph path in the Reference primitive path parameter.
Reference Primitive Path
When Reference primitive is "Reference specific primitive", this is the scene graph path to the prim to reference in.
(If you set this field
defaultPrim, it mimics the behavior of setting Reference primitive to "Reference automatically chosen primitive" or "Reference default primitive".)
Scene graph path where the referenced branch will be attached. The referenced prim will be overlayed onto this prim, and the referenced prim’s descendants will become this prim’s descendants. If this prim doesn’t exist, the node will create it.
Mark the destination prim as instanceable (as in "native instancing"). This saves memory if you reference the same branch into multiple places, but makes the descendants of the referenced prim not editable.
Parent Primitive Kind
If the prim at Primitive path doesn’t exist, this node will create it. If it has to create the prim, it will give any intermediate prims it has to create this kind.
Parent Primitive Type
If the prim at Primitive path doesn’t exist, this node will create it. If it has to create the prim, it will give any intermediate prims it has to create this type.
Turn this on and specify a group name (or a space-separated list of group syntax) to import. If you turn this on but leave the field blank, it imports all geometry.
Import Group Type
When enabled, specifies the whether the Import Group is a point or primitive group.
Import Path Prefix
If a prim being imported has an automatically generated name (like
mesh_0) because it had no path primitive, or if it has a path primitive but the path is relative (does not start with
/), the node automatically prefixes the name/path fragment with this path. This is a way of keeping "un-pathed" prims organized under a single branch. (See how to create geometry hierarchy.)
(The default is
/$OS which puts "un-pathed" prims under a root prim with the name of this node.)
Applies a transformation to the primitives imported from the SOP network.
How the transform parameters below apply to the primitive. (Because each USD prim can contain multiple transforms, and be affected by parent transforms, there are many different ways to apply new transforms.)
Apply the parameters as a new, most local transform.
Apply the parameters as a new, least local transform.
Overwrite or Append
If a local transform exists with the name
xformOp:transform, overwrite it with the parameters. Otherwise, apply it as a new, most local transform.
If this replaces an existing transform, that transform’s order in the local transform stack is not affected.
Overwrite or Prepend
Like "Overwrite or Append", but least local.
Apply Transform in World Space
Apply the parameters as a new, most local transform. However, prior to applying the transform, it is updated so that the result of the transform appears as if the transform was being applied in world space, before any local or ancestor transformations were applied to the primitive.
Replace All Local Transforms
The transform specified in the remaining transform parameters is always applied as a new transform. Prior to applying this transform, all existing transform operations on the local transform stack are cleared so that only the supplied transform remains on the local transform stack (though ancestor transforms still have an effect).
The order in which Houdini applies translates, rotates, and scales, and the order in which it applies rotation.
Movement amount along XYZ axes.
Degrees rotation around XYZ axes.
Non-uniform scaling along XYZ axes.
Scales the object uniformly along all three axes.
Moves the local origin of the object.
Rotates the local origin of the object after translation.
Parameters in this group guide the translation process in terms of how USD primitives are generated from the source SOP geometry.
Packed USD Primitives
What to do with packed USD primitives in the imported SOP geometry.
Import the transformation of the packed USD primitive as an override (
Over) prim. This makes it easy to transform the packed USD prims without unpacking them.
Ignore packed USD primitives in the source SOP geometry.
What to do with regular non-packed primitives (points, curves, polygons, spheres, and so on).
Create the USD prims for the imported geometry if they don’t already exist. This is the standard way to import geometry.
Create the USD prims as overrides. They will only be visible as changes to any prims that exist at a lower level with the same paths. This may be useful where you only want to import and modify certain attributes from SOPs onto existing USD geometry.
Like "Overlay", but only imports transform data.
Define Only Leaf Primitives
Author intermediate primitives (for example, any
Xform prims created for the Import path prefix) as overrides instead of definitions. This means if they don’t match up with underlying prims in lower layers, the leaf prims won’t be added to the scene. This is useful if you only want to import the geometry if its ancestors already exist in the scene tree.
(Note that all of the data is still imported, it just may not be visible in the scene graph tree or the viewport.)
What to do with SOP-native packed primitives.
Xform prim from the packed primitive’s transform and attributes, and the packed primitive’s geometry is imported underneath.
Create Native Instances
Import the geometry in packed primitives as instanceable references. This imports each piece as a prototype under a
Prototypes prim under the Import Path Prefix prim.
Create Point Instancer
Import the geometry in packed primitives as point instanced geometry. This imports each unique piece as a prototype under the point instancer prim.
You can assign a SOP primitive attribute to the packed primitive named
usdinstancerpath to specify the USD scene graph path of the instancer.
Only imports the packed primitive’s geometry. Unlike the Create Xforms mode, this does not create any additional hierarchy, and is equivalent to unpacking the packed primitive prior to being imported. This can be useful for importing multiple pieces of geometry without merging their attributes.
What to do with NURBS curve primitives.
Convert to Basis Curves
Import the curves as a
This only supports cubic curves, but is useful for rendering through Hydra.
Create NURBS Curves
Import the curves as a
This provides complete round-tripping of NURBS curves, but has limited support for rendering through Hydra.
How to assign kinds to imported prims.
All Geometry is One Component
Set root primitives in the imported tree to Component. Do not set kinds on descendants.
Nested Groups and Components
Set leaf primitives in the imported tree to Component. Set branch primitives to Group.
Nested Assembly, Groups, and Components
Set root prims in the imported tree to Assembly. Set intermediate branch prims to Group. Set leaf prims to Component.
Do not set kinds on the imported prims.
A (comma or space-separated) list of names of SOP primitive string attributes to use to use as prim paths to put the SOP geometry into. The default is
path,name. See geometry hierarchy above.
If the list has more than one attribute, the importer checks each attribute for the first non-empty value.
If the string value a full path, that path is used as the USD scene graph path for that primitive. If the string is a relative path (or just a name), the string is appended to the Import Path Prefix string to generate a full scene graph path.
If none of the listed attributes exist on a given SOP primitive, or all values are an empty string, the importer generates a name automatically (for example,
Import HeightFields as Mesh
If the source SOP geometry contains a height field volume, it will be imported as polygonal mesh. Other layers will be imported as vertex primvar if the values are varying, or constant primvar if the values are constant.
These parameters provide options to alter the interpretation of the SOP geometry data.
Treat Polygons as Subdivision Surfaces
For polygon meshes that are not already tagged with a subdivision scheme, author a
subdivisionScheme attribute set to
catmullClark. This will convert them to subdivision surfaces.
If Treat Polygons as Subdivision Surfaces is on, only convert polygons in this primitive group into subdivision surfaces.
Reverse Polygon Vertex Ordering
USD supports an
orientation attribute on mesh primitives that indicates whether polygons have a left-handed or right-handed ordering, while SOP geometry is always left-handed ordering. When this option is on, the importer always reorders vertices (and associated primvars) to be right-handed.
This is useful when round tripping right-handed oriented polygons from USD into SOPs and back into USD. The data is always converted to a left handed ordering when importing it into SOPs. If you imported the polygons back into USD without this option, they would be left-handed, unlike the original.
These parameters affect the conversion of SOP geometry attributes into USD attributes and primvars, and the choice between default and time sampled value authoring.
Controls whether USD topology attributes should be authored as time sampled or default values.
If you know that topology is changing in the source geometry over time, choose this option to record topology attributes as time samples in the USD scene graph. Having animated topology can be very expensive during playback, so only use this option when necessary.
Write topology attributes as default values. This can make playback much faster, but limits how the topology can change over time.
Do not author topology attributes.
This is useful when USD data is sent to SOPs for processing, then brought back into LOPs. Using this option tells the importer that the geometry topology has not changed in this process, so only the changing point positions or other primvars will be imported.
A space-separated list of attribute names/patterns specifying which SOP attributes to import into USD as primvars.
In addition to matching attribute names directly, there are some values with special meanings:
Authors the USD
extent attribute using the calculated bounding box of the associated SOP geometry.
Authors the USD visibility attribute based on th value of the
usdvisibility geometry attribute.
See importing attributes for information on how the importer deals converts certain well-known Houdini attributes to their USD equivalents.
A space-separated list of attribute names/patterns specifying which SOP attributes to import into USD as indexed primvars.
If a SOP attribute matches this pattern, the importer authors the primvar as an indexed array of values (that is, an array of values call
primvars:name, and an array of indices into those values called
Preparing an indexed primvar can be expensive for attributes that are not integers or strings. You should only use indexed primvars where it is likely to result in significant savings in storage size due to a small number of unique values being used across a large number of components.
Import as Single Element Array
A space-separated list of attribute names/patterns specifying which SOP attributes to import into USD as primvars with
Constant interpolation (an array with a single value for the whole primitive), regardless of whether the SOP geometry attribute is a point, primitive, or vertex attribute. If multiple values could be chosen for a particular USD primitive, the importer chooses the first value it encounters.
This is the default behavior for how detail attributes are imported.
Importing as a single element array (versus Import as Single Value) can be useful since it allows the primvar’s interpolation to be overridden without changing the primvar’s type.
Import as Single Value
A space-separated list of attribute names/patterns specifying which SOP attributes to import into USD as primvars with
Constant interpolation and a single value for the whole primitive, regardless of whether the SOP geometry attribute is a point, primitive, or vertex attribute. If multiple values could be chosen for a particular USD primitive, the importer chooses the first value it encounters.
This is similar to Import as Single Element Array, but the primvar’s type is a scalar value instead of an array with a single element (for example,
vector3f instead of
Set Default Values
A space-separated list of attribute names/patterns specifying which SOP attributes to always author as default values for USD primvars (never time samples). This is the list of exclusions when Author Time Samples is set to "If Not Specifically Excluded".
A space-separated list of attribute names/patterns specifying which SOP primitive string attributes represent subsets of the geometry. For mesh and curve primitives, the importer puts elements with the same value for this attribute into their own geometry subsets.
The importer will try to set the subset name to the attribute value, but may need to change the name make it a legal USD primitive name. The importer stores the raw attribute value on the geometry subset prim as Custom Data with the key
A space-separated list of group names/patterns specifying SOP primitive groups. SOP polygon and curve primitives in each group will be imported as a geometry subset, named for the group.
USD Custom Attributes
A space-separated list of attribute names/patterns specifying which SOP attributes to import into USD as attributes (rather than primvars).
Translate UV Attribute to ST
Convert the SOP vertex attribute
uv into a USD primvar called
primvars:st. Whether you need to turn this on depends on which renderer you are using and how your shaders are authored. If you are rendering with Karma, leave this off.
(As of this writing there is no strict standard for texture coordinate naming in USD, but the use of
st is a common convention, whereas in SOP geometry, using
uv is the common convention.)
Parameters to define and assign materials to geometry , designed to mimic SOP level material assignments.
Automatically populates the materials defined through the imported geometry’s
shop_materialpath attribute and assigns them to the imported geometry subsets accordingly.
Number of Materials
This node can import VOP materials as USD materials. Set the number of materials to import, or use the plus and minus buttons to add or remove imports.
For each import, the Houdini node path to the material VOP to import as a USD material.
For each import, the USD prim path for the imported USD material prim.
For each import, a list of patterns matching USD scene graph paths of geometry that should be assigned this imported material.