thinkingParticles offers a unique feature in the Shape Collision
Operator; a true particle shape dynamic collision detection engine. When
used in concert with the well-known automatic fracture system that comes
with thinkingParticles, you can create impressive life-like animations
quickly and effectively.
As a testament to the power that comes with the Shape Collision operator,
it was successfully used in the 2010 blockbuster movie 2012
and was instrumental in creating the destruction effects in the various
shots of the movie.
While it is possible to use multiple Shape Collision operators in a DynamicSet, it is highly recommended that you use as few operators of this type as possible. The memory requirements are huge and they increase with each addition of that operator type.
ON - (Bool) This input data stream determines whether
the operator is considered 'on' or 'off'. You can connect other operators
to this input channel such as a Bool Helper to activate/deactivate
the whole operator.
Time - (Time) This input data stream is used to define the local
time for the operator when the user wants to override the default system
time.
Floor Node - (Node) This input data stream is used to specify
through a node helper for example a 3D mesh as a floor collision object.
A floor object is automatically treated as immovable with an infinite
mass.
Voxel Grid - (Integer) This input data stream is used to override
the Voxel Grid that is used on the selected particle Group. This value
is normally set within the selected Group's Shape
Collision Dynamics rollout.
Edge Samples - (Integer) This input data stream is used to override
the Edge Samples value that is used on the selected particle Group. This
value is normally set within the selected Group's Shape Collision Dynamics
rollout.
Optimize - (Bool) This input data stream is used to override the
Optimize check box setting that is used on the selected particle Group.
This value is normally set within the selected Group's Shape Collision Dynamics
rollout.
Elasticity - (Scalar) This input data stream is used to override
the Elasticity value that is used on the selected particle Group. This
value is normally set within the selected Group's Shape Collision Dynamics
rollout.
Dynamic Friction - (Scalar) This input data stream is used to
override the Dynamic Friction value that is used on the selected particle
Group. This value is normally set within the selected Group's Shape Collision
Dynamics rollout.
Static Friction - (Scalar) This input data stream is used to override
the Static Friction value that is used on the selected particle Group.
This value is normally set within the selected Group's Shape Collision Dynamics
rollout.
Size As Mass - (Bool) This input data stream is used to override
the Size as Mass check box setting within the Particle Group of Controls.
Floor Voxel Grid - (Integer) This input data stream is used to
override the Voxel Grid spinner value in the Floor Group of Controls within
the Shape Collision Operator.
Floor Optimize - (Bool) This input data stream is used to override
the Optimize check box setting within the Floor Group of Controls within
the Shape Collision Operator.
Floor Elasticity - (Scalar) This input data stream is used to
override the Elasticity spinner value within the Floor Group of Controls
within the Shape Collision Operator.
Floor Dynamic Friction - (Scalar) This input data stream is used
to override the Dynamic Friction spinner value within the Floor Group
of Controls within the Shape Collision Operator.
Floor Static Friction - (Scalar) This input data stream is used
to override the Static Friction spinner value within the Floor Group of
Controls within the Shape Collision Operator.
OPT Face Threshold - (Angle) This input data stream is used to
override the Face Thresh. spinner value within the Shape Collision Floor
Node.
OPT Edge Threshold - (Angle) This input data stream is used to
override the Edge Thresh. spinner value within the Shape Collision Floor
Node.
OPT Bias - (Scalar) This input data stream is used to override
the Bias spinner value within the Shape Collision Floor Node.
OPT Max Edge Length - (Scalar) This input data stream is used
to override the Max Edge Len. spinner value within the Shape Collision
Floor Node.
OPT Preserve Smooth Boundaries - (Bool) This input data stream
is used to override the Preserve Smooth Boundaries check box setting within
the Shape Collision Floor Node.
OPT NumFaces - (Integer) This input data stream is used to override
the Off Under Faces spinner value within the Shape Collision Floor Node.
Velocity Friction - (Scalar) This input data stream is used to
override the Velocity Friction value that is used on the selected particle
Group as it interacts with the Floor Node. This value is normally set
within the selected Group's Shape
Collision Dynamics rollout.
PHY Collision Iteration - (Integer) This input data stream is
used to override the Collision Iteration spinner value within the Physics
rollout of the Shape Collision Operator.
PHY Contact Iteration - (Integer) This input data stream is used
to override the Contact Iteration spinner value within the Physics rollout
of the Shape Collision Operator.
PHY Deactivation Time - (Scalar) This input data stream is used
to override the Deactiv. Time spinner value within the Physics rollout
of the Shape Collision Operator.
PHY Velocity Threshold - (Scalar) This input data stream is used
to override the Velocity Thresh. spinner value within the Physics rollout
of the Shape Collision Operator.
PHY Rotation Threshold - (Angle) This input data stream is used
to override the Rotation Thresh. spinner value within the Physics rollout
of the Shape Collision Operator.
PHY Contact Type - (Integer) This input data stream takes an integer
value that represents the Collision algorithm the particles will use.
Valid input values are 0 through 1, where:
PHY Activate All - (Bool) This input data stream is
used to override the Activate All check box setting within the Physics
rollout of the Shape Collision Operator.
Particle - (Particle) outputs
the current particle information for the colliding particle. Use this
to modify specific particle properties.
Collided - (Bool) this output data stream will return true whenever
a collision is happening. In all other non-colliding situations, the output
will report false as the value.
Collision average Position - (Position) provides the current interpolated
collision point.
Be aware that this point may be highly inaccurate as face to face collisions usually happen on areas and not at one individual point. Also, when objects come into contact and start sliding, the collision point will be generated at all times over and over again.
Collision average Normal
- (Normal) outputs the interpolated normal of the calculated collision
point.
Frozen - (Bool) outputs the frozen status of the particles as
is determined by within the Physics
rollout. When particles are considered "frozen" or "inactive",
this value will be true. When particles are actively moving, this value
will return false.
Double Star Outputs (**) behave like the Top-Level Initiator outputs
(*), these outputs activate connected nodes for evaluation. It is important
to understand that all connected nodes will be evaluated. However, as
this is a secondary Initiator output (**) it can not be combined with
the Top Level Output (*) at the same time. The main rule still applies:
Never use 2 Initiators on the same node or wiring.
Number of Collisions - (Integer) holds the total number of all
collisions that happened for a particle. A collision may happen multiple
times, especially with sliding objects (surface - surface). Note, this
is a secondary Initiator output that can not be combined
with the top level Initiator outputs at the same time. Either the Top-Level
will be active or the low level department but not both at the same time.
Coll Index - (Integer) outputs the current index number of the
collision. This might be used to get the current progress of the collision
evaluation. Collision index can become as big as the Number of Collisions
value, if this is reached the collisions are done.
Coll Particle A - (Particle) outputs the particle A of the collision
pair. This output is always evaluated before particle B!
Coll Particle B - (Particle) outputs particle B of the collision
pair.
Coll Floor - (Bool) when a collision with the floor object happens,
this output will be set to True.
Coll Position - (Position) outputs the real world position Collision
point.
Coll Normal - (Normal) outputs the normal of the calculated collision
point.
Coll Position A - (Position) outputs the collision position of
Particle A in local object space.
Coll Position B - (Position) outputs the collision position of
Particle B in local object space.
The Shape Collision operator is used to control all true
shape collision dynamics in thinkingParticles.
Particle Group of Controls
Group - this drop-down list selects the particle collision partners
for the floor or inter-particle collision.
All Physics based parameters are set and controlled within the particle group itself. Select the relevant particle group in the particle group tree view to access the dynamic properties of a particle group.
Deflector - used to choose the deflector objects. Important
those objects will be treated as unyielding all the time regardless of
their local physics settings. One use would be to use recorded particles
as deflectors.
Size As Mass - Activate this check box to enable an automatic
mass calculation that is based on the size of the particle. For example,
a particle with a size of 2.0 will be treated as 2 Kg.
Floor Group of Controls
Voxel Grid - This spinner defines the number of cubic subdivisions
to wrap the object's outer boundaries within.
Optimize - Activate this check box to enable the parameters found
in the Optimize
rollout. The face count of the colliding meshes will be automatically
reduced. This face reduction is only done "internally" for the
collision objects and not for the rendering mesh. This option may speed
up the dynamic simulation enormously. However, if overdone the results
may be inaccurate.
Elasticity - Use this parameter to control the bounce value between
the floor<->particle collisions. Higher values will make the particles
lose less energy per bounce. Be aware that values greater than 100 will
create extra energy and the particles will gain energy with each bounce.
Dynamic Friction - This spinner sets the friction (you can also
think of it as "power loss") between particles and the floor
when they impact with each other. Please note that this power loss ONLY
happens on impact.
Static Friction - This spinner defines the friction between particles
and the floor when they are in contact (sliding). Higher values will make
the particles slide less.
Velocity Friction - This spinner defines the relative speed difference
between two particles. A slower particle will force a faster one to slow
down. This can be used to simulate viscous substances like molasses.
thinkingParticles allows you to record particle dynamics. It is always
a good idea to use this feature whenever a simulation seems to be perfect
for the job. Recording the particles as they bounce around will make life
easier at a later rendering stage. Playback from hard disk is also usually
much faster than calculating the solution each time you play back the
particle collisions.
Select Record File - Click this button to bring up a standard
Windows Save dialog. Any legal name and path can then be specified to
save the recorded particle simulation.
Simulate, Play, Record - These buttons are fairly self-explanatory.
The Simulate button turns the recorder into playback
mode and will play back the recorded file on hard disk as you scrub the
3ds Max frame slider in the view ports. The Record button
will switch the recorder into record mode. With the record button pressed,
clicking the Play button on the 3ds Max time line will
start the recording and simulation of the particle dynamics. After the
last frame has been reached, the recording automatically stops and turns
into Play mode to show you the results.
Active Time Segment / Range - This is a standard 3ds Max control
that lets you choose whether you want to record out the entire particle
animation, or just a specified range of frames as defined within the two
spinners.
Redraw Views - when checked, the 3ds Max view ports will be updated
while simulating. Depending on scene complexity it might be a good idea
to turn off View Updates while simulating.
This rollout is responsible for adjusting the degree of optimization for
the particle collisions.
Off Under Faces - If an object that is being sent to be optimized
has fewer faces than the threshold value set in this spinner, it will
not be processed for optimization and ignored. This does not affect it's
participation within the simulation, it simply removes it from the optimization
routines.
Face Thresh - This spinner sets the threshold angle used to determine
which faces are collapsed during the optimization process. Low values
produce less optimization but better approximations of the original shape.
Higher values improve optimization, but are more likely to result in faces
that render poorly as you get more degenerate triangles. (see Bias
below for information on how to control this).
Edge Thresh — This spinner sets a different threshold angle for
open edges (those that bound only one face). A low value preserves open
edges. At the same time you can apply a high Face Threshold value to get
good optimization.
Bias — This spinner's value helps eliminate the skinny or degenerate
triangles that can occur during optimization, which in turn can cause
simulation and rendering artifacts. Higher values keep triangles from
becoming degenerate. The default of 0.1 is generally considered enough
to eliminate the skinniest triangles, while a value of 0.0 turns the Bias
setting off.
Max Edge Len — This spinner specifies the maximum length beyond
which an edge cannot be stretched when optimized. When Max Edge Len is
0, it has no effect. Any value greater than 0 specifies the maximum length
of the edges. Along with Bias, this control helps you avoid creating long
skinny faces while optimizing.
Preserve Smooth Boundaries check box — Optimizes an object and
maintain its smoothing. When turned on, allows only faces that share at
least one smoothing group to collapse.
Collision Iteration - This spinner sets the number of sub-steps
to be used to estimate the real collision point of colliding objects.
The lower this number, the faster the simulation will run. However, lower
values would also mean less accurate results. In most situations, you
can keep this value between 5-10, while in exceptionally complex scenes,
you can try to set a value as high as 30 to get more accuracy.
Contact Iteration - This spinner defines the number of sub-steps
to be used between colliding objects to create a "contact" situation.
Face to face contact is one of the most complex situations to handle for
the dynamics engine. Increase this value to get more realistic simulations.
Contact Type 1 - The physics engine within thinkingParticles offers
two algorithms to handle dynamic simulations. Contact Type 1 is the fastest
method but it may show some inaccuracies when objects need to stay down
on the floor for example. Also face to face direct contact situations
are not well handled with this method.
Contact Type 2 - This contact type provides the more accurate
physics engine that tries to solve many of the well known problems other
dynamic engines show. This takes a bit longer to process, but it creates
usually a much more realistic result.
Deactivation Time - This spinner defines the time-slot a particle
is surveyed to determine whether is it actively moving due to dynamics
or simply doing a stupid "dynamics dance" as it comes to rest.
If a particle falls into this time-slot and it's speed or rotational value
is equal or below the ones defined it is considered sleeping or frozen.
Lower values will freeze the particles much faster. This spinner works
in concert with the two spinners below it (Velocity Thresh. and Rotation
Thresh.).
Velocity Threshold - This spinner sets the minimum speed an object
needs to fall below to become treated as frozen or inactive. Be aware
that other objects interacting with a sleeping one may change this status
when the impact creates a velocity higher than this value.
Rotation Threshold - This spinner sets the minimum rotational
speed and object needs to fall below to become treated as frozen or inactive.
As is the case with the Velocity Threshold, be aware that other objects
interacting with a sleeping one may change this status when the impact
creates an angular velocity higher than this value.
Activate All - This check box will "wake up" frozen
fragments after they have been deactivated through either
by Velocity Threshold or Rotational Threshold. This setting can be helpful
when working with fragments since frozen particles don't respond to space
warps.