On this page | |
Since | 18.0 |
The disturbance operator applies noisy forces to the velocity field, mimicking the effects of localized environmental change. This localized change in momentum cancels itself out over time, preserving the simulation’s general motion and overall shape. It is effective, however, at introducing small-scale details to the simulation.
Gas Disturb DOP has two methods for generating the noise: Continuous and Block-Based.
-
In continuous mode, force applied at each voxel is independent, resulting in details being introduced at voxel-scale. This mode is useful when you want to add details at the smallest representable scale, one example being an avalanche-type effects. However, if voxel size is too small, disturbance in continuous mode could lead to a noisy, undesirable look.
-
Force in block-based mode is generated by compositing several layers of noise that is constant in cubical blocks. Base Block Size controls size of the largest such blocks; size and amplitude of each subsequent layer is controlled by Lacunarity and Roughness, respectively.
In both modes, the disturbance force adjusts magnitude of the applied force in an effort to keep the effect similar at different resolutions. In Continuous mode, Strength controls the expected variance of the integrated force over a region of size Reference Scale. The number of composited layers in Block-Based mode depends on block sizes and the voxel size (since blocks smaller than a single voxel cannot be represented). However, the DOP compensates for any truncation (when the actual number of layers is less than value of Max Octaves).
There are additionally two ways to apply the generated random force. By default, the force is exerted linearly: the disturbance is simply added to the Disturb Field. When Rotational Force is enabled, values in Disturb Field are instead rotated towards the randomly-generated vectors, without change of length. When applied to a velocity field, this corresponds to redirecting the momentum while maintaining the kinetic energy. Rotational application of disturbance is especially useful in fire simulations, where it can be used to add character to the flames.
Note
You can make this node apply forces that are very similar to the previous version of this DOP. To this end, use block-based mode with Max Octaves set to 1; you also need to mutliply Disturbance value from the old node by 24 to get comparable Strength.
Parameters
Time Scale
A scaling factor for time inside this solver. 1 is normal speed, greater than 1 speeds up the simulation, while less than 1 slows it down.
Rotational Force
When enabled, the values in Disturb Field are rotated towards the randomly-generated directions without changing their length.
Settings
Strength
Controls strength of the applied force.
Note
When Rotational Force is enabled, Strength governs how fast the vectors are rotated towards their goal.
Threshold Range
When this option is turned on, value of the Threshold Field is mapped
from this range to 0-1
and applied as a multiplier on top of Strength.
Note
When the Threshold Range is enabled, voxels whose Threshold Field value falls beyond the first value of the range will not get disturbance applied.
Mode
Controls the nature of the generated random vectors.
Continuous
Every voxel gets an independently-assigned random vector.
Block-Based
The random pattern is formed by composing several layers of blockwise-constant noise.
Reference Scale
Variance of the aggregated noise field over a region of this size will be equal to Strength when Mode is set to Continuous. Provides a scale for normalizing the force against voxel size. A larger value for this parameter will increase magnitude of the applied force.
Tip
You should set this parameter to a reasonable value for your scene scale and leave it there; Strength can be used to more finely control how much force is applied.
Base Block Size
Controls size of the biggest blocks in the generated noise pattern when Mode is set to Block-Based.
Pulse Length
Length of time (in seconds) that the noise pattern is held fixed; only applies when Mode is set to Block-Based.
Note
The noise pattern changes on every frame in Continuous mode.
Lacunarity
The ratio of block sizes between successive noise layers. Value of 2
, for
example, means that the first layer has blocks that are twice the size of
the second layer; the second layer will in turn have blocks that are twice
as large as the next layer. This parameter is only applicable in
Block-Based mode.
Roughness
The ratio of amplitudes between successive noise layers. Value of 0.5
, for
instance, means that the second layer will have half the amplitude of the
first one. This parameter is only applicable in Block-Based mode.
Tip
Lower Roughness values will better preserve the block structure in
the generated noise, whereas higher ones (nearing or exceeding 1
) will
yield more chaotic patterns resembling white noise.
Max Octaves
The maximum number of noise levels to compose in Block-Based mode.
Control
Control Field
When enabled, the force exerted is scaled by the content of this field.
Control Range
Map from this range of values in the control field.
Remap Control Field
Enables or disables the control field ramp.
Control Field Ramp
The ramp’s vertical axis is strength of the effect and the horizontal axis is the value in the control field.
Visualization
Visualize Strength
This option can be enabled to visualize strength of the applied force at different points in space.
Note
The strengths will also be saved into the Visualization Field.
Mode
Determines how the visualization will appear in the viewport.
Plane
Viewport will show a color-coded cutout of the strength field.
Smoke
Viewport will show a fog volume whose denser areas correspond to regions of higher applied strength.
Plane Orientation
Orientation of the cutting plane for Plane visualization.
Plane Position
Relative position of the cutting plane inside the bounding box.
Color Mapping
Controls how strength values are mapped from the Guide Range to colors.
Guide Range
Range of strength values that gets mapped into the 0-1
range before color
conversion. The final visualization colors are controlled by
Color Mapping.
Smoke Density
Multiplier on density of the fog volume representing force strength.
Bindings
Disturb Field
The vector field to apply the disturbance forces to.
Threshold Field
This field’s values are used for thresholding purposes (when Threshold Range is enabled).
Visualization Field
When Visualize Strength is enabled, the amount of applied force at each voxel is stored in this scalar field.
Stencil Field
A scalar field to use as a stencil for where to perform this node’s computations. Voxels whose stencil value strictly exceeds 0.5 will have the operation applied, while the rest will be left unchanged.
Note
If a stencil field isn’t provided or does not exist, the operation will be performed everywhere.
Advanced
Use OpenCL
Use the OpenCL device to accelerate computations.
Outputs
First Output
The operation of this output depends on what inputs are connected to this node. If an object stream is input to this node, the output is also an object stream containing the same objects as the input (but with the data from this node attached).
If no object stream is
connected to this node, the output is a data output. This data
output can be connected to an Apply Data DOP,
or connected directly to a data input of another data node, to
attach the data from this node to an object or another piece of
data.
Locals
channelname
This DOP node defines a local variable for each channel and parameter on the Data Options page, with the same name as the channel. So for example, the node may have channels for Position (positionx, positiony, positionz) and a parameter for an object name (objectname).
Then there will also be local variables with the names positionx, positiony, positionz, and objectname. These variables will evaluate to the previous value for that parameter.
This previous value is always stored as part of the data attached to the object being processed. This is essentially a shortcut for a dopfield expression like:
dopfield($DOPNET, $OBJID, dataName, "Options", 0, channelname)
If the data does not already exist, then a value of zero or an empty string will be returned.
DATACT
This value is the simulation time (see variable ST) at which the current data was created. This value may not be the same as the current simulation time if this node is modifying existing data, rather than creating new data.
DATACF
This value is the simulation frame (see variable SF) at which the current data was created. This value may not be the same as the current simulation frame if this node is modifying existing data, rather than creating new data.
RELNAME
This value will be set only when data is being attached to a relationship (such as when Constraint Anchor DOP is connected to the second, third, of fourth inputs of a Constraint DOP).
In this case, this value is set to the name of the relationship to which the data is being attached.
RELOBJIDS
This value will be set only when data is being attached to a relationship (such as when Constraint Anchor DOP is connected to the second, third, of fourth inputs of a Constraint DOP).
In this case, this value is set to a string that is a space separated list of the object identifiers for all the Affected Objects of the relationship to which the data is being attached.
RELOBJNAMES
This value will be set only when data is being attached to a relationship (such as when Constraint Anchor DOP is connected to the second, third, of fourth inputs of a Constraint DOP).
In this case, this value is set to a string that is a space separated list of the names of all the Affected Objects of the relationship to which the data is being attached.
RELAFFOBJIDS
This value will be set only when data is being attached to a relationship (such as when Constraint Anchor DOP is connected to the second, third, of fourth inputs of a Constraint DOP).
In this case, this value is set to a string that is a space separated list of the object identifiers for all the Affector Objects of the relationship to which the data is being attached.
RELAFFOBJNAMES
This value will be set only when data is being attached to a relationship (such as when Constraint Anchor DOP is connected to the second, third, of fourth inputs of a Constraint DOP).
In this case, this value is set to a string that is a space separated list of the names of all the Affector Objects of the relationship to which the data is being attached.
ST
This value is the simulation time for which the node is being evaluated.
This value may not be equal to the current Houdini time
represented by the variable T, depending on the settings of the DOP
Network Offset Time and Time Scale
parameters.
This value 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
This value is the simulation frame (or more accurately, the simulation time step number) for which the node is being evaluated.
This value may not be equal to the current Houdini frame number
represented by the variable F, depending on the settings of the DOP
Network parameters. Instead, this value is equal to
the simulation time (ST) divided by the simulation timestep size
(TIMESTEP).
TIMESTEP
This value is the size of a simulation timestep. This value is useful to scale values that are expressed in units per second, but are applied on each timestep.
SFPS
This value is the inverse of the TIMESTEP value. It is the number of timesteps per second of simulation time.
SNOBJ
This is the number of objects in the simulation. For nodes that
create objects such as the Empty Object node,
this value will increase for each object that is evaluated.
A good way to guarantee unique object names is to use an expression
like object_$SNOBJ
.
NOBJ
This value is the number of objects that will be evaluated by the current node during this timestep. This value will often be different from SNOBJ, as many nodes do not process all the objects in a simulation.
This value may return 0 if the node does not
process each object sequentially (such as the Group
DOP).
OBJ
This value is the index of the specific object being processed by the node. This value will always run from zero to NOBJ-1 in a given timestep. This value does not identify the current object within the simulation like OBJID or OBJNAME, just 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
will be -1 if the node does not process objects sequentially (such
as the Group DOP).
OBJID
This is the unique object 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.
The object identifier can always be used to uniquely identify a given object. This makes this variable very useful in situations where each object needs to be treated differently. It can be used to produce a unique random number for each object, for example.
This value is also the best way
to look up information on an object using the dopfield expression
function. This value will be -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
This value is the simulation time (see variable ST) at which the current object was created.
Therefore, to check if an object was created
on the current timestep, the expression $ST == $OBJCT
should
always be used. This value will be zero if the node does not process
objects sequentially (such as the Group DOP).
OBJCF
This value is the simulation frame (see variable SF) at which the current object was created.
This value is equivalent to using the
dopsttoframe expression on the OBJCT variable. This value will be
zero if the node does not process objects sequentially (such as the
Group DOP).
OBJNAME
This is 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 only on those 20 objects. This
value will be the empty string if the node does not process objects
sequentially (such as the Group DOP).
DOPNET
This is 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 node,
you could write the expression:
$tx + 0.1
…to make the object move 0.1 units along the X axis at each timestep.