INDX
INDEX_SECTION O= Sop/instance_attr O=
instance_attr Instance Attributes *oplib:/Sop/instance_attr?Sop/instance_attr
SOP_subnet Sop O= INDX DialogScript KO=~ CreateScript K RO= TypePropertiesOptions L O=~ Help M ,O=~ Tools.shelf z jO=~ Contents.gz ~8 O= PythonModule
lNf ExtraFileOptions v zO=~# Dialog script for instance_attr automatically generated 01/11/12 20:55:10
{
name instance_attr
script instance_attr
label "Instance Attributes"
help {
""
}
inputlabel 1 "Source Geo"
inputlabel 2 "Sub-Network Input #2"
inputlabel 3 "Sub-Network Input #3"
inputlabel 4 "Sub-Network Input #4"
parm {
name "group"
label "Group"
type string
default { "" }
menutoggle {
[ "opmenu -l map_instance group" ]
}
range { 0 1 }
export none
parmtag { "autoscope" "0000000000000000" }
}
parm {
name "vex_numthreads"
label "Number of Threads"
type ordinal
joinnext
default { "none" }
help "Designates how many threads for the internal VOPSOPS to use."
menu {
[ "opmenu -l constant vex_numthreads" ]
}
range { 0 1 }
export none
parmtag { "autoscope" "0000000000000000" }
}
parm {
name "maplocal"
label "Map Local Variables"
type toggle
joinnext
default { "1" }
help "Determines whether or not added attributes will have local variables created. E.G. Adding pscale with this toggle on will map $PSCALE to the existing values."
range { 0 1 }
export none
parmtag { "script_callback_language" "python" }
}
parm {
name "use_id"
label "Use ID Attribute for Randomness"
type toggle
default { "0" }
help "When toggled the ID attribute is used as an offset for the randomness seeds. This is particularly useful for particle simulations so that rotations, scales, and instances do not change if the point numbering changes."
range { 0 1 }
export none
}
group {
name "standard"
label "Standard"
parm {
name "instance_onoff"
label "instance_onoff"
type oplist
nolabel
default { "0" }
menu {
"0" "Keep Instance"
"1" "Add Instance"
"2" "No Instance"
}
range { 0 1 }
export none
parmtag { "oprelative" "/" }
}
parm {
name "instance_logic"
label "logic"
type toggle
invisible
default { "(ch(\"instance_onoff\") == 1) * (ch(\"instance_onoff\") + ch(\"instance_type\"))" }
range { 0 1 }
export none
}
parm {
name "instance_type"
label "Instance Type"
type ordinal
default { "0" }
help "Determines whether to instance a single object or multiple objects randomly distributed between points."
disablewhen "{ instance_onoff != 1 }"
menu {
"1" "Single Object"
"2" "Random Objects"
}
range { 0 1 }
export none
}
parm {
name "instance"
label "Instance Object"
type oplist
default { "" }
help "Receives a string path or name of one object. Pattern matching is allowed. Only the first applicable object will be used. Inputting /obj/geo1 , geo1 , and /obj/geo* are all valid strings, but the last only the first returned object that pattern will be used."
disablewhen "{ instance_logic != 1 }"
range { 0 1 }
export none
parmtag { "oprelative" "/" }
parmtag { "opfilter" "!!OBJ/GEOMETRY!!" }
}
parm {
name "instance_list"
label "Random Instances"
type oplist
default { "" }
disablewhen "{ instance_logic != 2 }"
range { 0 1 }
export none
parmtag { "oprelative" "/" }
parmtag { "opfilter" "!!OBJ/GEOMETRY!!" }
}
parm {
name "instance_seed"
label "Seed"
type float
default { "0" }
help "Adjusts the seed for the random instances."
disablewhen "{ instance_logic != 2 }"
range { 0 10 }
export none
}
parm {
name "pscale_onoff"
label "pscale_onoff"
type oplist
nolabel
default { "0" }
menu {
"0" "Keep pScale"
"1" "Add pScale"
"2" "No pScale"
}
range { 0 1 }
export none
parmtag { "oprelative" "/" }
}
parm {
name "pscale_logic"
label "logic"
type toggle
invisible
default { "(ch(\"pscale_onoff\") == 1) * (ch(\"pscale_onoff\") + ch(\"pscale_type\"))" }
range { 0 1 }
export none
}
parm {
name "pscale_type"
label "Scale Type"
type ordinal
default { "0" }
help "Determines whether to use a constant scale across all points, or a randomized scale falling within a certain range of values."
disablewhen "{ pscale_onoff != 1 }"
menu {
"1" "Constant Scale"
"2" "Random Scale"
}
range { 0 1 }
export none
}
parm {
name "pscale"
label "Uniform Scale"
type float
default { "1" }
help "The amount to scale the instanced objects by if contstant scale is selected."
disablewhen "{ pscale_logic != 1 }"
range { 0 10 }
export none
}
parm {
name "pscale_range"
label "Scale Range"
type vector2
size 2
default { "0.5" "1" }
help "The min and max values that the instanced objects will be scaled by if random scale is chosen."
disablewhen "{ pscale_logic != 2 }"
range { -1 1 }
export none
}
parm {
name "pscale_seed"
label "Seed"
type float
default { "0" }
help "Adjust the seed for the randomized scale of instanced objects. "
disablewhen "{ pscale_logic != 2 }"
range { 0 10 }
export none
}
parm {
name "scale_onoff"
label "scale_onoff"
type oplist
nolabel
default { "0" }
menu {
"0" "Keep Scale"
"1" "Add Scale"
"2" "No Scale"
}
range { 0 1 }
export none
parmtag { "oprelative" "/" }
}
parm {
name "scale_logic"
label "logic"
type toggle
invisible
default { "(ch(\"scale_onoff\") == 1) * (ch(\"scale_onoff\") + ch(\"scale_type\"))" }
range { 0 1 }
export none
}
parm {
name "scale_type"
label "Scale Type"
type ordinal
default { "0" }
help "Determines whether to use a constant non-uniform scale across all points or a randomized scale falling within a certain range of values."
disablewhen "{ scale_onoff != 1 }"
menu {
"1" "Constant Scale"
"2" "Random Scale"
}
range { 0 1 }
export none
parmtag { "script_callback_language" "python" }
}
parm {
name "scale"
label "Non-Uniform Scale"
type vector
size 3
default { "1" "1" "1" }
help "A vector of values to constantly scale the instant objects non-uniformly. Each field allows a scalar value in the corrsponding axial direction. The order is XYZ. Scaling is done before rotations, so all non-uniform scales will be done in the instance object s space before being oriented."
disablewhen "{ scale_logic == 0 } { scale_logic == 2 }"
range { 0 10 }
export none
parmtag { "script_callback_language" "python" }
}
parm {
name "scale_min"
label "Scale Min"
type vector
size 3
default { "0.5" "0.5" "0.5" }
help "A vector of values for the minimum random scale the instanced objects should inherit for each axis."
disablewhen "{ scale_logic == 0 } { scale_logic == 1 }"
range { -1 1 }
export none
}
parm {
name "scale_max"
label "Scale Max"
type vector
size 3
default { "1" "1" "1" }
help "A vector of values for the minimum random scale the instanced objects should inherit for each axis. E.G. to only randomize the Y scale, put 1 for both the minimum and maxiumum of both the X and Z fields, and put the desired range in the Y values. "
disablewhen "{ scale_logic == 0 } { scale_logic == 1 }"
range { -1 1 }
export none
}
parm {
name "scale_seed"
label "Seed"
type float
default { "0" }
help "Adjusts the seed for the randomized scale of instanced objects."
disablewhen "{ scale_logic == 1 } { scale_logic == 0 }"
range { 0 10 }
export none
}
parm {
name "trans_onoff"
label "scale_onoff"
type oplist
nolabel
default { "0" }
menu {
"0" "Keep Translation"
"1" "Add Translation"
"2" "No Translation"
}
range { 0 1 }
export none
parmtag { "oprelative" "/" }
}
parm {
name "trans_logic"
label "logic"
type toggle
invisible
default { "(ch(\"trans_onoff\") == 1) * (ch(\"trans_onoff\") + ch(\"trans_type\"))" }
range { 0 1 }
export none
}
parm {
name "trans_type"
label "Translation Type"
type ordinal
default { "0" }
help "Determines whether use a constant translation or a randomized translation falling within a certain range of values."
disablewhen "{ trans_onoff != 1 }"
menu {
"1" "Constant Translation"
"2" "Random Translation"
}
range { 0 1 }
export none
parmtag { "script_callback_language" "python" }
}
parm {
name "trans"
label "Translate"
type vector
size 3
default { "0" "0" "0" }
help "A vector of values to translate all objects a constant amount. This value is an offset from the instance point s position. Translation happens before orientation so all offsets are done before the object is oriented."
disablewhen "{ trans_logic == 0 } { trans_logic == 2 }"
range { 0 10 }
export none
parmtag { "script_callback_language" "python" }
}
parm {
name "trans_min"
label "Translation Min"
type vector
size 3
default { "-1" "-1" "-1" }
help "A vector of values for the minimum random translation the instanced objects will be offset for each axis."
disablewhen "{ trans_logic == 0 } { trans_logic == 1 }"
range { -1 1 }
export none
}
parm {
name "trans_max"
label "Translation Max"
type vector
size 3
default { "1" "1" "1" }
help "A vector of values for the maxiumum random translation the instanced objects will be offset for each axis."
disablewhen "{ trans_logic == 0 } { trans_logic == 1 }"
range { -1 1 }
export none
}
parm {
name "trans_seed"
label "Seed"
type float
default { "0" }
help "Adjusts the seed for the randomized translations of instanced objects."
disablewhen "{ trans_logic == 1 } { trans_logic == 0 }"
range { 0 10 }
export none
}
}
group {
name "standard_1"
label "Orientation"
parm {
name "vel_orient"
label "Override orientation attributes with velocity and up."
type toggle
default { "0" }
help "Removes the orient and N attributes so that the point's orient along their velocity."
range { 0 1 }
export none
parmtag { "script_callback_language" "python" }
parmtag { "script_callback" "kwargs['node'].hdaModule().use_vel()" }
}
parm {
name "orient_logic"
label "logic"
type toggle
invisible
nolabel
default { "(ch(\"orient_onoff\") == 1) * (ch(\"orient_onoff\") + ch(\"orient_type\") + ch(\"orient_offset\"))" }
range { 0 1 }
export none
}
parm {
name "orient_onoff"
label "orient_onoff"
type oplist
nolabel
default { "0" }
menu {
"0" "Keep Orient"
"1" "Add Orient"
"2" "No Orient"
}
range { 0 1 }
export none
parmtag { "oprelative" "/" }
}
parm {
name "orient_type"
label "Orient Type"
type ordinal
default { "0" }
help "Determines whether to use a constant value for all instances for the orientation amount, or if a random angle between a max and minimum."
disablewhen "{ orient_onoff != 1 }"
menu {
"1" "Constant Angle"
"2" "Random Angle"
}
range { 0 1 }
export none
parmtag { "script_callback_language" "python" }
}
parm {
name "orient"
label "Orient Axis"
type vector
size 3
default { "0" "1" "0" }
help "Defines a vector direction upon which to rotate around."
disablewhen "{ orient_onoff != 1 }"
range { 0 10 }
export none
}
parm {
name "orientw"
label "Orientation Angle"
type float
joinnext
default { "0" }
help "The angular amount to rotate around the Orient Axis. Values are in degrees."
disablewhen "{ orient_onoff != 1 } { orient_logic == 2 }"
range { 0 360 }
export none
}
parm {
name "orient_offset"
label "Use angle as offset to random."
type toggle
default { "0" }
help "This toggle adds the Orientation Angle to the random value produced in the angle range. This is especially useful for the case scenarios where you need objects spinning but from different starting points."
disablewhen "{ orient_logic == 0 } { orient_logic == 1 }"
range { 0 1 }
export none
}
parm {
name "orient_range"
label "Angle Range"
type vector2
size 2
default { "0" "360" }
help "A minimum and maxium angle range upon which to randomly rotate per point."
disablewhen "{ orient_logic == 0 } { orient_logic == 1 }"
range { 0 360 }
export none
}
parm {
name "orient_seed"
label "Seed"
type float
default { "0" }
help "Adjusts the seed for the randomized angle value of the instanced objects. "
disablewhen "{ orient_logic == 1 } { orient_logic == 0 }"
range { 0 10 }
export none
}
parm {
name "N_onoff"
label "N_onoff"
type oplist
nolabel
default { "0" }
menu {
"0" "Keep Normals"
"1" "Add Normals"
"2" "No Normals"
}
range { 0 1 }
export none
parmtag { "oprelative" "/" }
}
parm {
name "N"
label "Normals"
type vector
size 3
default { "0" "0" "0" }
help "Defines a vector direction on which to orient the object if the 'orient' attribute does not exist. The vector designates the object s Z+ axis."
disablewhen "{ N_onoff != 1 }"
range { 0 10 }
export none
}
parm {
name "up_onoff"
label "up_onoff"
type oplist
nolabel
default { "0" }
menu {
"0" "Keep Up Vector"
"1" "Add Up Vector"
"2" "No Up Vector"
}
range { 0 1 }
export none
parmtag { "oprelative" "/" }
}
parm {
name "up"
label "Up Vector"
type vector
size 3
default { "0" "1" "0" }
help "Defines a vector direction on which to orient the object s Y+ axis."
disablewhen "{ up_onoff != 1 }"
range { 0 10 }
export none
}
parm {
name "vel_logic"
label "vel_logic"
type toggle
invisible
nolabel
default { "(ch(\"vel_onoff\") == 1) * (ch(\"vel_onoff\") + ch(\"vel_type\") + ch(\"vel_offset\"))" }
range { 0 1 }
export none
}
parm {
name "vel_onoff"
label "vel_onoff"
type oplist
nolabel
default { "0" }
menu {
"0" "Keep Velocity"
"1" "Add Velocity"
"2" "No Velocity"
}
range { 0 1 }
export none
parmtag { "oprelative" "/" }
}
parm {
name "v"
label "Velocity"
type vector
size 3
default { "0" "0" "0" }
help "Defines a vector direction on which to orient the object if both 'orient' and 'N' attributes do not exist. The vector designates the object s Z+ axis. May also be used to calculate motion blur by toggling Geometry Velocity Blur on the Geometry containers and on the instance object settings toggling Point Motion Blur to Use Point Velocity Attribute"
disablewhen "{ vel_onoff != 1 } { use_vel == 1 }"
range { 0 10 }
export none
}
parm {
name "v2"
label "Variance"
type vector
size 3
default { "0" "0" "0" }
help "Modulates the velocity values by a random amount in each axis. I.E. A value of 1 in any axis adds a random amount between -.5 and .5 to the designated Velocity."
disablewhen "{ vel_onoff != 1 }"
range { 0 10 }
export none
}
parm {
name "vel_seed"
label "Seed"
type float
joinnext
default { "0" }
help "Adjusts the seed for the randomized variance of velocity values."
disablewhen "{ vel_onoff != 1 }"
range { 0 10 }
export none
}
parm {
name "use_vel"
label "Add Variance to Existing Velocity Values"
type toggle
default { "0" }
help " Using this allows the user to add a bit of randomness to velocity values that come out of simluation. Toggles using the already established values of V to modulate with variance, or whether to use the user defined constants."
disablewhen "{ vel_onoff != 1 }"
range { 0 1 }
export none
}
parm {
name "rot_onoff"
label "rot_onoff"
type oplist
nolabel
default { "0" }
menu {
"0" "Keep Rotation"
"1" "Add Rotation"
"2" "No Rotation"
}
range { 0 1 }
export none
parmtag { "oprelative" "/" }
}
parm {
name "rot_type"
label "Rotation Type"
type ordinal
joinnext
default { "0" }
help "Determines whether to use a constant rotation value across all points, or a per point rotation that falls between a designated max and min per axis."
disablewhen "{ rot_onoff != 1 }"
menu {
"1" "Constant Rotation"
"2" "Random Rotation"
}
range { 0 1 }
export none
parmtag { "script_callback_language" "python" }
}
parm {
name "rot_order"
label "Rotation Order"
type ordinal
nolabel
joinnext
default { "0" }
help "Designates in which order to apply the differnt axis rotations. Euler rotations are not cumulative so order is important. Possible order s read from left to right."
disablewhen "{ rot_onoff != 1 }"
menu {
"0" "x y z"
"1" "x z y"
"2" "y x z"
"3" "y z x"
"4" "z x y"
"5" "z y x"
}
range { 0 1 }
export none
}
parm {
name "rot_offset"
label "Use rotation as offset to random."
type toggle
default { "0" }
help "This toggle adds the rotation vector to the random value produced. This is especially useful for the case scenarios where you need objects spinning but from different starting points."
disablewhen "{ rot_logic == 0 } { rot_logic == 1 }"
range { 0 1 }
export none
parmtag { "script_callback_language" "python" }
}
parm {
name "rot_logic"
label "rot_logic"
type integer
invisible
nolabel
default { "(ch(\"rot_onoff\") == 1) * (ch(\"rot_onoff\") + ch(\"rot_type\") + ( ( ch(\"rot_type\") != 0 ) * ch(\"rot_offset\") )) " }
range { 0 1 }
export none
}
parm {
name "rot"
label "Rotation"
type vector
size 3
default { "0" "0" "0" }
help "Defines a vector amount in which to rotate the object after other orientation methods are applied. Rotations are in degrees."
disablewhen "{ rot_logic == 2 } { rot_logic == 0 }"
range { -1 1 }
export none
}
parm {
name "rot_min_"
label "Rotation Min"
type vector
size 3
default { "0" "0" "0" }
help "Defines a minimum amount the random rotations can use per axis in degrees."
disablewhen "{ rot_logic == 0 } { rot_logic == 1 }"
range { -1 1 }
export none
}
parm {
name "rot_max_"
label "Random Max"
type vector
size 3
default { "360" "360" "360" }
help "Defines a maximum amount the random rotations can use per axis in degrees."
disablewhen "{ rot_logic == 0 } { rot_logic == 1 }"
range { -1 1 }
export none
}
parm {
name "rot_seed"
label "Seed"
type float
default { "0" }
help "Adjusts the seed for the randomized rotation values."
disablewhen "{ rot_logic == 1 } { rot_logic == 0 }"
range { 0 10 }
export none
}
}
}
# Automatically generated script: Wednesday January 11, 20:55 2012
\set noalias = 1
#
# Creation script for instance_attr operator
#
if ( "$arg1" == "" ) then
echo This script is intended as a creation script
exit
endif
# Node $arg1 (Sop/instance_attr)
opexprlanguage -s hscript $arg1
opuserdata -n '___Version___' -v '' $arg1
ParmsFromVfl := 0;
PrefixDroppedParmName := 1;
UseDSParms := 1;
ForbidOutsideParms := 1;
LockContents := 1;
SaveSpareParms := 0;
CheckExternal := 1;
GzipContents := 1;
MakeDefault := 1;
SaveCachedCode := 0;
PrefixDroppedParmLabel := 1;
UnlockOnCreate := 0;
= Instance Attributes =
"""Creates all of the attributes that instancing picks up."""
Mainly used to initalize attributes,
but also can be used to do several common tasks efficiently. Such tasks include: instancing a random selection
of objects, randomizing rotations, and randomizing scales both uniformly and axially.
Instancing in Houdini picks up a variety of attributes for just such these purposes, and in previous cases they need to be added by hand with custom attributes.
NOTE:
Since the [Node:sop/instance_attr] is a Digital Asset: per point or primative local variables cannot be used.
For advanced expression writing please use the more sophisticated [Node:sop/point], [Node:sop/primitive], [Node:sop/vertex] or [Node:sop/attribcreate] SOPS.
@inputs
Source Geometry:
Connect the incoming source geometry that requires the instancing attributes to be manipulated.
@parameters
Number of Threads:
Designates how many threads for the internal VOPSOPS to use.
Map Local Variables:
Determines whether or not added attributes will have local variables created. E.G. Adding pscale with this toggle on will map $PSCALE to the existing values.
Use ID Attribute for Randomness:
When toggled the ID attribute is used as an offset for the randomness seeds. This is particularly useful for particle simulations so that rotations, scales, and instances do not change if the point numbering changes.
NOTE:
__Keep__ uses the default values, __Add__ allows you to assign new values, and __No__ removes all values.
== Standard ==
=== Instance ===
Instance Type:
Determines whether to instance a single object or multiple objects randomly distributed between points.
Instance Object:
Receives a string path or name of one object. Pattern matching is allowed. Only the first applicable object will be used.
Inputting "/obj/geo1", "geo1", and "/obj/geo*" are all valid strings, but the last only the first returned object that pattern will be used.
Random Instances:
Recieves a string with multiple paths or names of any number of objects. Pattern matching is allowed. All applicable objects will be divided
randomly between the points. Inputting Inputting "/obj/geo1 /obj/geo2", "geo1 geo2", "geo[1-2]" and "geo*" are all valid.
To weight the random simply enter an object multiple times. E.G. "geo1 geo1 geo2" will randomly distribute geo1 over two thirds of the points
and geo2 over the last one third.
Seed:
Adjusts the seed for the random instances.
NOTE:
These options use the existing "instance" string point attribute. To manually set instance objects per point simply use this attribute by putting the
full path of the object level geometry container, that you wish to instance, for the attribute value.
=== pScale ===
Scale Type:
Determines whether to use a constant scale across all points, or a randomized scale falling within a certain range of values.
Uniform Scale:
The amount to scale the instanced objects by if contstant scale is selected.
Scale Range:
The min and max values that the instanced objects will be scaled by if random scale is chosen.
Seed:
Adjust the seed for the randomized scale of instanced objects.
NOTE:
These options use the existing "pscale" float point attribute. "pscale" is a uniform scale on points used in rendering for a myriad of purposes.
For instances pscale designates the overall scale of just object that is being instanced. To maintain a 1:1 ratio between the original geometry
and the instanced versions leave the pscale value at a constant 1.
=== Scale ===
Scale Type:
Determines whether to use a constant non-uniform scale across all points or a randomized scale falling within a certain range of values.
Non-Uniform Scale:
A vector of values to constantly scale the instant objects non-uniformly. Each field allows a scalar value in the corrsponding axial direction.
The order is ((X))((Y))((Z)). Scaling is done before rotations, so all non-uniform scales will be done in the instance object's space before being
oriented.
Scale Min:
A vector of values for the minimum random scale the instanced objects should inherit for each axis.
Scale Max:
A vector of values for the minimum random scale the instanced objects should inherit for each axis.
E.G. to only randomize the Y scale, put 1 for both the minimum and maxiumum of both the X and Z fields, and put the desired range in the Y values.
Seed:
Adjusts the seed for the randomized scale of instanced objects.
NOTE:
These options use the existing "scale" vector point attribute. "scale" is a non-uniform scalar value used mainly for copystamping and instancing.
To manually set non-uniform scales use the attribute. E.G. to scale the object in the Y-Axis based on life, use a [Node:sop/point] SOP and under
the custom attribute tag, put in "scale" for the custom attribute name, and put in __1, $LIFE, 1__. This assumes that the points have an
existing life attribute that is mapped to $LIFE.
Using this SOP to initalize the scale value, can make modifying the values easier later.
=== Translation ===
Translation Type:
Determines whether use a constant translation or a randomized translation falling within a certain range of values.
Translate:
A vector of values to translate all objects a constant amount. This value is an offset from the instance point's position.
Translation happens before orientation so all offsets are done before the object is oriented.
Translation Min:
A vector of values for the minimum random translation the instanced objects will be offset for each axis.
Translation Max:
A vector of values for the maxiumum random translation the instanced objects will be offset for each axis.
Seed:
Adjusts the seed for the randomized translations of instanced objects.
NOTE:
These options use the existing "trans" vector point attribute. "trans" is a 3 axis offset value that adds to the position of the instance point
before orienting and instancing. Using the "trans" attribute manually can allow extra controls on a per point basis.
== Orientation ==
=== Orient ==
Orient Type:
Determines whether to use a constant value for all instances for the orientation amount, or if a random angle between a max and minimum.
Orient Axis:
Defines a vector direction upon which to rotate around.
E.G. An orient axis of 0, 1, 0 will cause rotations around the Y+.
An orient axis of 1, 1, 1 will cause rotations around the vector 1,1,1.
Orientation Angle:
The angular amount to rotate around the Orient Axis. Values are in degrees.
Angle Range:
A minimum and maxium angle range upon which to randomly rotate per point.
Use angle as offset:
This toggle adds the Orientation Angle to the random value produced in the angle range.
This is especially useful for the case scenarios where you need objects spinning but from different starting points.
E.G. Set the orient axis to 0, 1, 0 and the Orientation Angle to $T*45. Toggle __Use angle as offset to random.__ on and make sure the orient type
is set to Random Angle. This will cause all instanced objects to rotate 45 degrees every second, but starting from different positions.
Seed:
Adjusts the seed for the randomized angle value of the instanced objects.
NOTE:
These options use the existing "orient" quaternion (vector4) point attribute. It is important to realize that quaternion math is not axis and
angle amount. Quaternions, however, are not easily human readable. The [wikipedia page | http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation]
has more information.
For ease of use, this asset has the user input a vector axis of rotation and a rotation amount around that axis. The rotation is then converted
into quaternions before being posted into the attributes for each point. This means that manual adjustments should either be done with the correct
conversion equations, or should be done in a VOPSOP with the existing conversion tools.
=== Normals ===
Normals:
Defines a vector direction on which to orient the object if the 'orient' attribute does not exist. The vector designates the object's __Z+__ axis.
=== Up Vector ===
Up Vector:
Defines a vector direction on which to orient the object's Y+ axis.
=== Velocity ===
Velocity:
Defines a vector direction on which to orient the object if both 'orient' and 'N' attributes do not exist. The vector designates the object's __Z+__ axis.
May also be used to calculate motion blur by toggling __Geometry Velocity Blur__ on the Geometry containers and on the instance object settings
toggling __Point Motion Blur__ to __Use Point Velocity Attribute__
Variance:
Modulates the velocity values by a random amount in each axis.
I.E. A value of 1 in any axis adds a random amount between -.5 and .5 to the designated Velocity.
Add Variance to Existing Velocity:
Toggles using the already established values of V to modulate with variance, or whether to use the user defined constants.
Using this allows the user to add a bit of randomness to velocity values that come out of simluation.
Seed:
Adjusts the seed for the randomized variance of velocity values.
NOTE:
If 'orient' or 'N' point attributes exist then the orientation of the object will ignore velocity. See the [instancing point attributes |/copy/instanceattrs]
for more information on orientation order. To force velocity to be used as the orientation values toggle the override option at the top of the Orientation page,
or set the Orient and N attributes to __No__.
=== Rotation ===
Rotation Type:
Determines whether to use a constant rotation value across all points, or a per point rotation that falls between a designated max and min per axis.
Rotation Order:
Designates in which order to apply the differnt axis rotations. Euler rotations are not cumulative so order is important. Possible order's read
from left to right.
Rotation:
Defines a vector amount in which to rotate the object after other orientation methods are applied. Rotations are in degrees.
Rotation Min:
Defines a minimum amount the random rotations can use per axis in degrees.
Rotation Max:
Defines a maximum amount the random rotations can use per axis in degrees.
Use rotation as offset to random:
This toggle adds the rotation vector to the random value produced.
This is especially useful for the case scenarios where you need objects spinning but from different starting points.
Seed:
Adjusts the seed for the randomized rotation values.
NOTE:
These options use the existing "rot" quaternion (vector4) point attribute. It is important to realize that quaternion math is not axis and
angle amount. Quaternions, however, are not easily human readable. The [wikipedia page | http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation]
has more information.
For ease of use, and consistancy to other places in Houdini where rotation is used these values are being inputable in their Euler form. The
rotation values are then converted into quaternions before being placed in the point attributes. This means that manual adjustments should either be done with the correct
conversion equations, or should be done in a VOPSOP with the existing conversion tools.
SOP
SOP
$HDA_TABLE_AND_NAME
Digital Assets
ے$Gv V̐Y"]횉&!@~.3b0ţ:̚BGId27LOE? g-=.yʬh;3=rsÓ-?30f D! $
'!rp(/H(ům~O_~O闟}٧^|g N!O_-l>{yY_+奺`v_5Ex{SփY]uWxfUO$^,26U[Rt~~_p_zi?dD>d(փX]uWvmfqnΓ<|q:f{ZeP`UwD].d둪ڏݛ0M$Y~&Qg?՟.{w_>^A''ɿ3+<9J`1WNN^z:~NNԠ_"迿o_2/^)_w/c'O2_W6yϫAF1g
()xU&)V;ɟ|"[-c}6~@ڇ#CkdaiT,P1+
T,m3k;<~ܫac̹]
0{+NV](ו?Ecwd\'`jk?knX/doN쫬a](ٗ{j?d^..gWŋ.~>߿_ZgϾ|/$AիMpHo
U_]/g6~.L/g
˲gx~4/nu R$X%o^no@{2/7JosekSq\׳-pLuEA yH8^W/oBnnͳ\̼p&a?3
)8axzzy|#:|T4Mnwu0E8vdK.#uY/>=ww2U+wL*l~EIy?9̔xl"tr"+$O^{@/KWA`ewfq|Ջ<{y/I?eғnN{U_'66P(v?i}'/cO8V\<묃:tq_Q!w.Ͽ:⣗?xPjZM䩉k5q^1Nz>Kt
b.5Oy<$*
wz}ە3pYJuWYֹH\5w6/.-HqV7-gN̛5>r%
ɕD};;;Lj/2X*_G_iLQ\|cjh^k Bƚ%=z?f*㯹\ra֊٧[*l̰%On\ɍ>$Oiɱ&K9߿}wnucuXUaRv|uYwg
,2Von~1ii:5,$Q7ב㷩֪Fl
h9@62eYͭ2ت꒬YwFOX
HM24!R5_'zi&'*#|';e.oXWT,7\g=KYSFƼ͙-FεetRdNW.6IJɅ^l2M
WP-ĺM.rX߃T/BϮ*lδgf.dƕl3kӶk3lkӷ5XbxKX mnʻs`eE
Tnp~~sw
K(;x|ňp~q潬ڟl,uG]VdN>2=^!Q'g) *uGIQ*6{'#2o)LPRR}M|mt)p ,ػX )_jLk":Ɣ]CaX^t̐:^