| On this page |
When you copy or instance geometry onto points, Houdini looks for specific attributes on the destination points to customize each copy/instance.
Attributes ¶
Name |
Type |
Description |
|---|---|---|
|
float4 (quaternion) |
Orientation of the copy |
|
float |
Uniform scale |
|
float3 |
Non-uniform scale |
|
vector |
Normal (+Z axis of the copy, if no |
|
vector |
Up vector of the copy (+Y axis of the copy, if no |
|
vector |
Velocity of the copy (motion blur, and used as +Z axis of the copy if no |
|
float4 (quaternion) |
Additional rotation (applied after the orientation attributes above) |
|
vector |
Translation of the copy |
|
vector |
Translation of the copy, in addition to |
|
vector |
Local pivot point for the copy |
|
3×3 or 4×4 matrix |
Transformation matrix overriding everything except translations from |
|
string |
Path to a material. You can add this attribute to points using the Not supported in the viewport. |
|
string |
A serialized Python dictionary mapping parameter names to values. You can add this attribute to points using the “override” controls on the Not supported in the viewport. |
Priorities ¶
-
If
pivotexists, use it as the local transformation of the copy/instance. -
If the
transformattribute exists:-
Use it as a 3×3 or 4×4 matrix to transform the copy/instance.
-
-
If the
transformattribute does not exist:-
If the
orientattribute exists:-
Use it to orient the copy/instance.
-
-
If the
orientattributes does not exist:-
Orient the copy/instance using
Nas the +Z axis andupas +Y axis. -
If
Ndoes not exist, usev(velocity) if it exists.
-
-
If the
rotattribute exists, apply it after the above. -
If
pscaleexists, use it to scale the to scale the copy/instance (multiplied byscaleif it exists). -
If
scaleexists, use it to scale the copy/instance (multiplied bypscaleif it exists).
-
-
If
transexists, use it andPto move the copy/instance.
Or, put another way:
Key:
X = pivot matrix (translate by -pivot)
O = orient matrix
S = scale matrix (scale * pscale)
L = alignment matrix (*)
R = rot matrix
T = trans matrix (trans + P)
M = transform matrix
(*) The alignment matrix (L) is defined by N or v and up.
IF N exists AND up exists and isn't {0,0,0}:
L = mlookatup(N,0,up)
ELSE IF N exists:
L = dihedral({0,0,1},N)
ELSE IF v exists AND up exists and isn't {0,0,0}:
L = mlookatup(v,0,up)
ELSE IF v exists:
L = dihedral({0,0,1},v)
IF transform exists:
Transform = X*M*T
ELSE IF orient exists:
Transform = X*S*(O*R)*T
ELSE:
Transform = X*S*L*R*TInstancing and motion blur ¶
Velocity Blur
The shutter open transform is based off the Axis Alignment and Positioning stated above. For the shutter close transform the shutter open transform is used plus the vector v/$FPS * shutter_speed. In the cases where that you have N and a v attribute, N is used to align but v is still used to blur.
Note
v is independent of the transform constructed for the Axis Alignment and Positioning. You can rotate, scale and skew all you want but v = (0,0,1) then your object will be blurred in the z direction.
Transform Blur
Same as Velocity Blur but the Object level transform is also taken into account.
Deformation Blur
The Axis Alignment and Positioning transform is constructed for both shutter open and close, the object level transform is also taken into account. This method is the most accurate.
Examples ¶
(The image in the lower right corner of each frame is the geometry if it were instanced without any of the attributes.)