thinkingParticles offers an additional Rigid Body Dynamics Operator; a
true particle shape dynamic collision detection engine. In addition to
the highly accurate and production proven Shape
Collision the PhysX operator offers full support for the AGEIA Dynamics
system and it will support in the future the upcoming PhysX hardware rigid
body chip. The Hardware is to expected to accelerate rigid body collision
by a huge amount.
While it is possible to use multiple PhysX 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.
Because of the academically challenging nature of the subject matter,
it is assumed that you have at least some basic knowledge of computer
based physics and dynamic simulations. If not, it is recommended that
you get hold of a good book and familiarize yourself with the concepts
of computer based physics simulations.
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.
UI Control Parameters - those input data streams are the equivalent
of the UI controls, keep in mind that there is no visual indication that
an operator is connected to any of those inputs! It might be needless
to adjust a value if it gets overwritten by a connected operator.
Collision - (Bool) Whenever
a collision event occurs, this output data stream will return true as
its value. In all other non-colliding situations, the output will report
false as the value.
Collision Particle - (Particle) This output data stream supplies
the current particle information. Use this to modify specific particle
properties.
Collision Position - (Position) This output data stream 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 Normal - (Normal)
This output data stream outputs the interpolated normal of the calculated
collision point.
Frozen - (Bool) This output data stream holds the frozen status
of the particles, as determined by 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.
GroupA - This drop-down list selects the particle collision partners
for the floor or inter-particle collision.
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.
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.
Restitution - 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.
Stop, Play, Record - These buttons are fairly self-explanatory.
The Stop button to resets the recorder status. The Play
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.
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 keeps 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.
Skin Width - specifies how much objects can inter penetrate, as
opposed to how much they are separated. This value is specified as a percentage
based on the smallest value of the object's bounding box.
Example:
A Skin Width value of 1% would create the following allowed object inter
penetration:
Lets say a cube with the dimensions of 10,20,20 is involved in a collision
and 10 is the smallest bounding box value and 1% means that the other
object will penetrate this cube with a maximum of 0.1 3ds max units.
One way to deal with inaccuracies within physics simulations when stacking
objects, is by letting them slightly interpenetrate each other.
The maximum interpenetrations allowed between objects can be globally
regulated using Skin Width parameter. Clearly, a lot of interpenetration
is visually undesirable. However, avoiding interpenetration between colliding
objects is even worse, because objects may repel each other to the point
where they separate, and then fall back down on each other. Within an
animation sequence this will lead to visible "dancing" between
objects.
Finding a good balance (a good value for Skin Width) for interpenetration
between colliding objects depends on many things such as the size of the
objects involved (so that the interpenetrating region is visually negligible)
but also on the stability of the simulation, which is usually governed
by the gravity setting as well as the sub-frame sampling. (Lower gravity
and bigger sub-frame sampling values typically result in more stable simulations.)
Velocity Threshold - 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 - defines the minimum rotational speed by which
an object is 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.
Bounce Threshold - a collision with a relative velocity below
this value will not create a bounce. This can be used for example to reduce
jittering for object on a ground plane.
Max. Angular Velocity - sets the maximum angular velocity
permitted for an object; because for various internal computations, very
quickly rotating objects introduce error into the simulation which leads
to undesired results.
Example:
Objects shaped like a pencil for example are difficult to simulate because
they can store a lot of energy while rotating around a short axis, which
is then converted to a very high rotational velocity when they start to
rotate around a longer axis. High rotational velocities can lead to problems
because certain linear approximations of the rotational motion fail to
hold. For this reason the dynamics engine of PhysX automatically limits
the rotational velocity of a body to a user definable maximum value. Because
this may prevent intentional fast rotation in objects such as wheels,
the user can override this value.
Penalty Force - defines the power used to move interpenetrating
objects away from each other. Be careful with high values, too high values
can easily lead to unwanted explosions.
Activate All check box - 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.
Solver Iteration - 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 90 to get more accuracy.