Houdini 20.0 Nodes Dynamics nodes

Copy Data dynamics node

Creates multiple copies of the input data.

On this page

This DOP applies the connected data multiple times. If the connected data will generate a unique name for each invocation, this will create a copy each time, hence the name of this node.

To allow the created data to vary the stamp and stamps expressions can be used to access the current iteration. There are two modes for Copy Data.

The geometry mode will use a SOP Node as a source. A pass will be done for every point in the geometry. Each scalar and string attribute will be stamped as its name. Each vector attribute will be stamped as name.x, name.y, and name.z.

The explicit mode allows one to specify a list of stamp variables to perform. CY and NCY values are available as local variables when determining the values of these stamping values.

Parameters

Stamp SOP Path

Specifies geometry to drive the copying. Each point of this geometry will form a copy. All point attributes will be added as stamp values of the same name. Vector attributes will have .x, .y, and .z suffixes to get the components.

Number of Copies

The number of copies of the input data items this node should create.

If this value is less than or equal to zero, no data is output from this node. As with other data manipulation nodes, this node always knows which simulation object is being modified at any given time. This means that the object specific local variables can be used in this parameter to change the number of copies on a per-object basis.

Number of Variables

Sets the number of global parameters that will be set for each copy of the input data that is created.

These global parameters are accessible from the input data node using the stamp and stamps expression functions.

Variable # Name

The name for this variable. This is the value that must be passed as the second argument to the stamp expression function to access this variable.

Variable Evaluation

Controls the way in which this variable is evaluated.

Evaluate For Each Copy

The value for this variable is calculated for each copy of the data.

This option provides the most flexibility in terms of generating the global parameter values, but is the most time consuming if large numbers of copies are involved.

Evaluate Once

The value for this variable is calculated only once when the CY local variable is set to zero.

This approach will not result in each copy of input data being customized, but provides an easy way to pass information from this node up to the input data nodes.

Evaluate Once, One Token Per Copy

The parameter describing this variable is evaluated only once.

In this mode, the String Value is evaluated regardless of the Variable Type parameter. Then for each copy of the input data, the corresponding token within the evaluated string is used to set the global parameter value. The token is treated as a float or string value, depending on the Variable Type parameter.

So for example, suppose the Variable Type is Float, the String Value is “0 1 2 3”, and the Number of Copies is 6. The global parameter value set for the 6 copies of the input data would be 0, 1, 2, 3, 0, and 1.

Variable Type

Specifies whether the global parameter is a floating point number or a string value.

Float

The global parameter is a floating point number. The value of this global parameter will be accessed using the stamp expression function in the input data node.

String

The global parameter is a string. The value of this global parameter will be accessed using the stamps expression function in the input data node.

Float Value

For a Float Variable Type, when the Variable Evaluation is not Evaluate Once, One Token Per Copy, this parameter controls the value that will be assigned to this global parameter.

String Value

For a String Variable Type, or when the Variable Evaluation is Evaluate Once, One Token Per Copy, this parameter contains the string value or series of numeric or string tokens that will be used to set the value of this global parameter.

Inputs

First

The first input to this node supplies the objects or data that will have new data attached to them.

Subsequent

The remaining inputs to this node are the data that are to be copied and attached to the objects or data on the first input.

Outputs

First

The output from this node is a collection of data, with the specified number of copies of each of the input data.

Locals

CY

The current copy number. You can use this variable in expressions to get different values for different copies.

NCY

The total number of copies to be made.

ST

The simulation time for which the node is being evaluated.

Depending on the settings of the DOP Network Offset Time and Scale Time parameters, this value may not be equal to the current Houdini time represented by the variable T.

ST is guaranteed to have a value of zero at the start of a simulation, so when testing for the first timestep of a simulation, it is best to use a test like $ST == 0, rather than $T == 0 or $FF == 1.

SF

The simulation frame (or more accurately, the simulation time step number) for which the node is being evaluated.

Depending on the settings of the DOP Network parameters, this value may not be equal to the current Houdini frame number represented by the variable F. Instead, it is equal to the simulation time (ST) divided by the simulation timestep size (TIMESTEP).

TIMESTEP

The size of a simulation timestep. This value is useful for scaling values that are expressed in units per second, but are applied on each timestep.

SFPS

The inverse of the TIMESTEP value. It is the number of timesteps per second of simulation time.

SNOBJ

The number of objects in the simulation. For nodes that create objects such as the Empty Object DOP, SNOBJ increases for each object that is evaluated.

A good way to guarantee unique object names is to use an expression like object_$SNOBJ.

NOBJ

The number of objects that are evaluated by the current node during this timestep. This value is often different from SNOBJ, as many nodes do not process all the objects in a simulation.

NOBJ may return 0 if the node does not process each object sequentially (such as the Group DOP).

OBJ

The index of the specific object being processed by the node. This value always runs from zero to NOBJ-1 in a given timestep. It does not identify the current object within the simulation like OBJID or OBJNAME; it only identifies the object’s position in the current order of processing.

This value is useful for generating a random number for each object, or simply splitting the objects into two or more groups to be processed in different ways. This value is -1 if the node does not process objects sequentially (such as the Group DOP).

OBJID

The unique identifier for the object being processed. Every object is assigned an integer value that is unique among all objects in the simulation for all time. Even if an object is deleted, its identifier is never reused. This is very useful in situations where each object needs to be treated differently, for example, to produce a unique random number for each object.

This value is also the best way to look up information on an object using the dopfield expression function.

OBJID is -1 if the node does not process objects sequentially (such as the Group DOP).

ALLOBJIDS

This string contains a space-separated list of the unique object identifiers for every object being processed by the current node.

ALLOBJNAMES

This string contains a space-separated list of the names of every object being processed by the current node.

OBJCT

The simulation time (see variable ST) at which the current object was created.

To check if an object was created on the current timestep, the expression $ST == $OBJCT should always be used.

This value is zero if the node does not process objects sequentially (such as the Group DOP).

OBJCF

The simulation frame (see variable SF) at which the current object was created. It is equivalent to using the dopsttoframe expression on the OBJCT variable.

This value is zero if the node does not process objects sequentially (such as the Group DOP).

OBJNAME

A string value containing the name of the object being processed.

Object names are not guaranteed to be unique within a simulation. However, if you name your objects carefully so that they are unique, the object name can be a much easier way to identify an object than the unique object identifier, OBJID.

The object name can also be used to treat a number of similar objects (with the same name) as a virtual group. If there are 20 objects named “myobject”, specifying strcmp($OBJNAME, "myobject") == 0 in the activation field of a DOP will cause that DOP to operate on only those 20 objects.

This value is the empty string if the node does not process objects sequentially (such as the Group DOP).

DOPNET

A string value containing the full path of the current DOP network. This value is most useful in DOP subnet digital assets where you want to know the path to the DOP network that contains the node.

Note

Most dynamics nodes have local variables with the same names as the node’s parameters. For example, in a Position DOP, you could write the expression:

$tx + 0.1

…to make the object move 0.1 units along the X axis at each timestep.

Dynamics nodes