On this page | |
Since | 18.0 |
Solaris constraints ¶
Currently, USD does not support constraints. Parametric constraints are probably antithetical to USD’s design mission of being descriptive, immutable, and idempotent.
As a layer above USD, that generates USD, the LOP network can compute dynamic constraints, and “bake” the results as time samples when it writes the USD to disk.
Tips and notes ¶
-
By default, geometry imported from SOPs (for example, through SOP Import or SOP Create) has point attributes imported into USD. So you can set up attributes (for example, an up vector attribute) in SOPs and use them in this node.
-
The constraint LOP nodes work by converting USD geometry into SOPs, then applying constraint CHOP nodes to the SOP geometry, then applying changes back onto the USD primitives as overrides. Because of this, the nodes sometimes use SOP terminology (for example, “point group” and “primitive group”), even though they work with USD data. Future versions of Houdini may change this to be clearer.
-
In VEX snippets, you can use
@
variable names containing colons (:
). This makes it easier to automatically bind certain USD attribute names (for examplei@primvars:foo
). (These names are not normally legal in names in VEX source code. The node automatically encodes these kinds of names when used in a snippet.)
Parameters ¶
Source ¶
Type
Whether the source (the thing constrained to the surface) is a regular primitive, or a point instance. You cannot use a nested point instance as a source.
Source Instances
When Source ▸ Type is “Point Intance”, the point instance to use, using /‹path›[‹instance_index›]
syntax (for example, /geometry/instancer[1]
).
Surface ¶
Target Source
Where to get the surface to stick to, either the first input or the second input.
Type
Whether the surface is a regular primitive, or a point instance.
Constraint Options ¶
Import Time
Specify the frame at which the source and/or target geometry are imported into the embedded sopnet to build the constraints. The default “$FF” expression forces the constraint LOP to be time dependent, which is needed when operating on a non time-dependent network that has time samples driving the source or target primitives. However, for better performance with a non time-dependent network with no time samples, it is recommended to use a static value instead.
Maintain Local Offset
When this is off (the default), the source object snaps onto the surface. When this is on, the object maintains the same relative distance between itself and the surface as it follows the shape of the surface.
Mode
How to map a position parameter onto the surface.
UV (Sticky)
Look up the coordinates in the UV parameter on the surface using the texture coordinates from a primvar (specified in the UV attribute parameter).
Primitive + UV
Treat the coordinates in the UV parameter as intrinsic local UV coordinates on a specific polygon face, where the first two components are U and V coordinates, and the third component (W) is the index of the polygon face. This does not require an attribute containing texture coordinates.
Point Group
Place the source object at the surface point closest to the centroid of the points in a certain geometry subset.
Primitive Group
Place the source object at the surface point closest to the centroid of the polygon faces in a certain geometry subset.
Closest Distance
Places the source object at the surface point closes to the world space position in the Position parameter.
UV Attribute
When Mode is “UV (sticky)”, the name of a primvar containing texture coordinates. For geometry imported from SOPs, this may be uv
, however in USD it is usually called st
. The texture coordinates must be non-overlapping.
UV
When Mode is “UV (sticky)”, the texture coordinate at which to place the source object.
Group
When Mode is “point group” or “primitive group”, the name of a geometry subset to find the closest surface point to.
Position Attribute
When Mode is “Closest Distance”, the name of a primvar containing point positions. For geometry imported from SOPs, this may be P
, but in USD this is usually the positions
attribute.
Position
When Mode is “Closest Distance”, the world space position to find the closest surface point to.
Use Snippet
When Mode is “UV (sticky)”, “Primitive + UV”, or “Closest distance”, you can set the position/UV using a VEX snippet. @ptnum
is the index of the current prim being constrained. You can use npoints(0)
to get the total number of prims being constrained. You can use @Frame
and @Time
to make the snippet time-dependent.
Orientation ¶
Look At Mode
How to orient the source object.
None
Don’t rotate the source object.
U Direction
Use the surface’s U direction as the Look At direction. This works best with NURBS surfaces.
V Direction
Use the surface’s V direction as the Look At direction. This works best with NURBS surfaces.
Direction Attribute from Geometry
Use the value of a vector primvar on the surface as the Look At vector.
From Primitive: Rotate the source object to always point at a certain prim.
Look At Source
When Look at mode is “from primitive”, where to get the primitive to look at (the first or second input).
Look At Xform
When Look at mode is “from primitive”, the scene graph path of the prim to look at. (This does not support looking at a point instance.)
Direction Attribute
When Look at mode is “Direction attribute from geometry”, the name of a vector primvar (without the primvar:
prefix) on the surface to use as the look at vector.
Look Up Mode
How to compute the up vector.
Up Vector Attribute from Geometry
Use vector3f
primvar on the surface to specify the up vector at each point.
U Direction
Use the surface’s U direction as the up vector. This works best with NURBS surfaces.
V Direction
Use the surface’s V direction as the up vector. This works best with NURBS surfaces.
X Axis
Use the world +X direction as the up vector.
Y Axis
Use the world +Y direction as the up vector.
Z Axis
Use the world +Z direction as the up vector.
From Primitive
Rotate the source prim so its up vector points at a specific prim as it moves along the curve.
Custom
Use the vector in the Up vector parameter.
Up Vector Source
When Look up mode is “from primitive”, where to get the primitive to point the up vector at (the first or second input).
Up Vector Xform
When Look at mode is “from primitive”, the scene graph path of the prim to point the up vector at. (This does not support point instances.)
Look At Axis
Which axis on the source object to match to the look at vector. You can use this to compensate for the orientation the source object was created in. This can’t be the same as the Look up axis.
Look Up Axis
Which axis on the source object to match to the up vector. You can use this to compensate for the orientation the source object was created in. This can’t be the same as the Look at axis.
Up Attribute
When Look up mode is “Up attribute from path”, the name of a vector3f
primvar (minus the primvar:
prefix) on the surface to use as the look up vector.
Roll
Roll angle (in degrees) around the look at direction.
Use Snippet
Set the roll using a VEX snippet. The snippet should write the roll degrees to the roll
variable. You can use the variables typically available to an Attribute Wrangle SOP. @ptnum
is the index of the current prim being constrained. You can use npoints(0)
to get the total number of prims being constrained. You can use @Frame
and @Time
to make the snippet time-dependent.
The initial value of roll
(at the start of the snippet) is the evaluated value of the Roll parameter. So you can use an expression in that parameter to compute a “base” value, and modify it using the snippet.
Examples ¶
SurfaceConstraint Example for Surface Constraint
This example demonstrates various uses of the Surface Constraint LOP.
See also |