|On this page|
The SOP Import LOP imports SOP geometry into the USD stage in a LOP network. It has many settings for how to convert geometry.
The USD Configure SOP creates attributes in SOP geometry corresponding to settings in the SOP Import LOP. You can set the LOP to use each attribute (if present), and/or set parameters explicitly on the LOP that override the corresponding attributes.
In addition to the parameters on the SOP Import LOP and USD Configure SOP, you can influence how the importer converts geometry using various SOP attributes, documented below.
At the SOP level, Houdini geometry fundamentally does not have hierarchical relationships (in Houdini, hierarchical relationships between models are defined at the Object level).
In the absence of path-defining attributes:
All polygon faces will go into a single polygon mesh called
Any SOP primitives with equivalent USD prims (such as Sphere and Volume) will be imported as siblings with automatically generated names (such as
Some geometry types, such as packed primitives or Alembic primitives, might have attributes that specify their place in a hierarchy. If these exist, the importer will use them.
You can also add attributes in SOPs specifically to control hierarchical relationships when the geometry is imported into USD. The Path attributes parameter lets you specify a list of SOP primitive attributes that contain path information.
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 the path in Import path prefix. This is a way of keeping "un-pathed" prims organized under a single branch.
For example, if you set this to
/world/geo, the following table shows how prims with different name/attribute values will map into the scene graph tree:
Import path prefix
Invalid paths or characters in the attribute values are manipulated to turn them into valid paths. This usually involves replacing illegal characters with underscores.
If incompatible geometry types have the same path attribute value, the importer will append numbers to give them unique names.
For example, if you try to put both a sphere and a polygonal mesh at
/foo/bar, the importer will create two prims with different names, for example
By default, all SOP fields are imported under a single
You can assign a SOP attribute named
usdvolumepathto a volume to specify the USD scene graph path to import the volume’s fields under.
If a field has the same name as an existing field under the volume, the importer will start a new volume prim (like
volume_1) to hold that and subsequent fields.
This means if two pyro sims are merged together, the importer will group the two sequences of
temperaturefields under two separate volume prims.
You can assign a SOP attribute named
usdvolumesavepathto specify a custom path to save the volume file to when using the USD ROP. This attribute is translated into the
HoudiniSavePathmetadata on the USD field prim.
SOP packed primitives
When you set Packed primitives to import as point instancers, you can assign a SOP primitive string attribute to the packed primitive named
usdinstancerpath. The attribute value specifies the USD scene graph path of the instancer to create.
SOP packed primitives have an intrinsic LOD visibility setting (for example, setting Display as to "Hidden" in the Packed Edit SOP). The importer automatically converts this setting into USD visibility metadata.
Instead of converting all polygons to subdiv with the Treat Polygons as Subdivision Surfaces parameter, you can selectively convert faces to subdivision based on the value of a
osd_schemeprimitive string SOP attribute.
Possible values are
(The Unpack USD SOP creates this SOP attribute when unpacking USD into SOPs, to support round-tripping back to USD.)
When polygons are converted to subdivision surfaces, the import also uses SOP attributes understood by the Subdivision SOP, such as
osd_trianglesubdiv, and the
If you import any of the following common Houdini attributes, the importer automatically converts them into the corresponding differently-named USD attributes or primvars:
pointsattribute in USD.
normalsattribute in USD.
velocitiesattribute in USD
angularVelocitiesattribute in USD (only when authoring a point instancer primitive).
idsin USD (on points, or point instancer primitives).
primvars:stin USD, depending on the Translate UV Attribute to ST parameter setting.
All of these may be converted into the USD
Houdini supports array attributes, which do not have a equivalent native representation in USD.
If you import geometry with an array attribute
foo, the importer creates two USD primvars:
foo(a list created by concatenating all the arrays) and
foo:lengths(a list of array lengths).
For example, two points with
bararray attribute values
[2,6,8]would be translated as two primvars:
Other special SOP attributes
You can create a
usdvisibilityprimitive string SOP attribute to control the visibility metadata of the corresponding USD prim. The value should be either
If you create instancers, this visibility information is converted to an
You can create a
usdpurposeprimitive string SOP attribute to control the purpose of the corresponding USD prim. The value should be either
The USD Configure SOP creates attributes on SOP geometry that represent importer settings (that can be overridden by turning on parameters on this node). It can stores the setting for how to convert Other primitives in a
usdconfigureotherprimsSOP attribute at the global (detail) level.
You can specify this setting per-primitive if you create a
usdconfigureotherprimsSOP attribute at the primitive or point level.
If SOP point has a
usdprimtypepoint string attribute, it will be imported as a USD prim. The importer translates the point’s position and the standard instancing orientation attributes into the new prim’s transform. If the point also has a
usdkindstring attribute, it will be used as the prim’s kind.
You can use this to represent hierarchies of USD prims in SOPs as points with
The importer converts Houdini sphere primitives to USD sphere prims.
If you import a Houdini tube primitive with end caps on and the positive end has radius 0, the importer will convert it into a USD cone prim.
If you import a Houdini tube primitive with end caps on and no tapering, the importer will convert it into a USD cylinder prim.
Any other configuration of a tube primitive will be converted into a subdivision mesh.
Tips and notes
USD defaults to right-hand oriented meshes, whereas Houdini is left-handed. If your meshes are right-handed, turn on Reverse Polygon Vertex Ordering when modifying geometry in SOPs.
When converting SOP geometry to USD, try to be as efficient as possible. By default, attributes will be time sampled, but you can designate attributes to not be time sampled by adding them to Set Default Values.
Remember to also set Topology Attributes to "Static", to get non-time sampled attributes.
USD (and specifically Hydra) do more work when values are time sampled, even if there is only a single time sample. In small setups it probably won’t make much difference, but in larger scenes it will definitely have an impact.