User Tools

Site Tools


reference_guide:thinkingparticles_nodes:operator_nodes:dynamics:physxoperator

PhysX

image90.gif

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.

Operator Inputs 

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.

Operator Outputs 

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.

Rollout Menu 

image42.gif

GroupA - 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.

       

Particle Group 

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 

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.

Recorder 

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.

Optimize Rollout 

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.

Physics Rollout 

image93.gif

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.

image51.gif

Why do we need Skin Width ?

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.

©2024, cebas Visual Technology Inc.

reference_guide/thinkingparticles_nodes/operator_nodes/dynamics/physxoperator.txt · Last modified: 2024/01/24 18:34 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki