Ground Plane
dynamics node

The Ground Plane DOP creates a ground plane inside the DOP simulation.
It creates a new object that has a simple grid geometry attached to it.
The grid has a Volumetric Representation attached which simulates an
infinitely large plane. This can be used as a collision surface for RBD
or Cloth simulations.

Because the ground plane can be moved and reoriented, several ground
planes can be used to box in an object.

Parameters

For more
complicated adjustments of the display status, including
enabling the rendering of the proxy geometry, use the Rendering
Parameters DOP.

Color

The primitive color for the guide grid to be drawn in.

Grid Size

The scale factor for the guide grid. Note that the underlying
volumetric representation will continue to infinity, unaffected
by this scale factor.

Some culling methods, such as used by the
RBD Solver, look at the geometry to determine a bounding volume.
These may require a larger grid to ensure the collision with the
ground plane is tested.

Initial State

OBJ Path

Allows you to specify the position and rotation of the ground plane based on the position and rotation of an object at the scene level.

Position

The center of the ground plane.

Rotation

The orientation of the ground plane. This is in RX/RY/RZ
format.

Physical

Bounce

The elasticity of the object. If two objects of bounce 1.0 collide, they will rebound without losing energy. If two objects of bounce 0.0 collide, they will come to a standstill.

Bounce Forward

The tangential elasticity of the object. If two objects of bounce forward 1.0 collide, their tangential motion will be affected only by friction. If two objects of bounce forward 0.0 collide, their tangential motion will be matched.

Friction

The coefficient of friction of the object. A value of 0 means the object is frictionless.

This governs how much the tangential velocity is affected by collisions and resting contacts.

Dynamic Friction Scale

An object sliding may have a lower friction coefficient than an object at rest. This is the scale factor that relates the two. It is not a friction coefficient, but a scale between zero and one.

A value of one means that dynamic friction is equal to static friction. A scale of zero means that as soon as static friction is overcome the object acts without friction.

Temperature

Temperature marks how warm or cool an object is. This is used in gas simulations for ignition points of fuel or for buoyancy computations.

Since this does not relate directly to any real world temperature scale, ambient temperature is usually considered 0.

Outputs

First

The ground plane object created by this node is sent through
the single output.

Locals

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
NetworkOffset 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:

This example shows how to use the Active Value DOP to animate the
Active state of an object. When an object is not active (it is passive), it is
not simulated. To keyframe both the active state of an object and its motion
while passive, use the RBD Keyframe Active DOP.

This example shows a system for automatically detecting when RBD
objects achieve a rest state and then turning off their active status.
This will freeze them in place reducing computation time and jitter.

This example shows how to create a constraint network to glue together adjacent
pieces of a fractured object. It also shows how primitive attributes such as
'strength' can be used to modify properties of individual constraints in the
network.

This example demonstrates the use of the Copy Objects DOP. A
single RBD Object is copied 100 times, and assigned a random initial
velocity, and a position based on some grid geometry. These 100 spheres
are then dropped onto a ground plane.

This example demonstrates how to use the FEM Solver to
deform spheres when they collide with the ground plane.
The spheres have particle based animation on them prior
to collision with the ground and are swapped to the
FEM solver on collision.

This example demonstrates the use of the Flip Solver and the Fluid Force DOP.
The Fluid Force DOP is used to apply a drag force on a wire object according
to the motions of a flip fluid. The drag force is only applied at
locations where fluid exists in the fluid object.

This example creates a torus of paint which is dropped on the Grog
character. The Grog character is then colored according to the paint
that hits him. This also shows how to have additional color
information tied to a fluid simulation.

This is a setup for guided wrinkling using the hybrid object.
The first sim creates a detailed mesh consisting of both tets and triangles that doesn’t have any wrinkles yet.
The second sim is targeted to the animation creates by the first sim and this adds in the wrinkles.

This is a simple example demonstrating pressure-driven flow
with no viscosity. This example also demonstrates the use
of a constantly emitting source of particle fluid as well
as how to surface the fluid using the Particle Fluid Surface
SOP.

This example demonstrates the use of viscous and elastic forces
in a particle-based fluid to generate viscoelastic fluid behaviour.
The result is a fluid-like object that tends to resist deformation
and retain its shape.

This example shows how one can control the break up of any glued
object through the use of the RBD State node.

A torus, composed of spheres, is glued together. An additional
sweep plane is defined. Any sphere which ends up on the wrong side of
the sweep plane is broken off the torus and left to bounce on its own.
This lets the break up of the torus to be controlled over many
frames.

This example shows how one can control the break up of any glued
object through the use of the RBD State node.

In this version of the choreographed breakup example, a moving
plane is used to choreograph the breakup of a fractured tube. As the
plane passes each piece, it is allowed to break off from the rest of
the tube.

This example uses the RBD Keyframe Active node to switch from a
keyframed animation to an RBD Solver, and back to keyframed animation.
This same animation could be created using a Switch Solver or Blend
Solver, but this approach is simpler if the only requirement is switching
from keyframed to simulated motion for a few RBD Objects.

This example demonstrates a simple rigid body dynamics simulation using
the RBD Object DOP. A single sphere is dropped onto a ground plane.
It adds in an RBD Visualization DOP to show the impact forces that
are applied as a result of the collision.

This example demonstrates how to use the Ripple Solver and Ripple
Object nodes. Bulge SOPs are used to deform a grid to create initial
geometry and rest geometry for the Ripple Object which is then piped
into the Ripple Solver.

This example uses the Script Solver to remove objects from the
simulation once they fall below a certain threshold velocity. This technique
can be used to speed up simulations that are known to settle down to a static
arrangement.

An example that shows how you can visualize impact data in an RBD
simulation by using a SOP Solver to add custom guide geometry to the
RBD Objects.

This example has three toruses falling on a grid with
green lines showing the position and magnitude of impacts. The force
visualization is added as ancillary geometry data to the actual
toruses, so the RBD Solver is entirely unaware of the effect.
The SOP Solver could also be used as an independent SOP network to extract
impact visualization from an RBD Object.

This example actually includes eight examples of ways that
you can use voronoi fracturing in Houdini. In particular, it
shows how you can use the Voronoi Fracture Solver and the
Voronoi Fracture Configure Object nodes in your fracture
simulations. Turn on the display flags for these examples
one at a time to play the animation and dive down into
each example to examine the setup.

This example shows how to create a low res - high res set up to support RBD objects.
The two main methods are to reference copy the DOP Import SOP and feed in the high res
geometry or to use point instancing with an Instance Object.

This example demonstrates a technique of using the DOP Import SOP
to allow the use of proxy geometry in a DOP simulation. One set of geometries
are used in the simulation, then the transform information for those objects
is applied to higher resolution versions of the geometry.

This example shows how to use the gluecluster SOP and glue constraint
networks to cluster together the pieces of a voronoi fracture. This
allows clustering to be used with Bullet without introducing concave
objects.