Particle Skinner - Gorilla Skull

by John Rand

Scene File: Max9_PSkinner_Gorilla_finish.max

This tutorial is a will show you how to use Particle Skinner to skin higher poly count geometry and apply PhysX to it. The scene contains two geometry objects in the shape of a Gorillas Skull, one for the particle birth object and a copy for the Particle Skinner object. Some things to consider; you don't need a lot of particles if you only want a few large fractures, on the other hand if you want it to literally it to disintegrate it is going to require a large number of particles. Another notable tidbit to take into consideration when using control point particle technique such as this, the Particle Skinner geometry can interpenetrate, to avoid this you can use prefractured geometry and the Birth Group operator, however using this technique is much more taxing on your system and can be harder to control.


Part 1 - Setup the Box#2 Dynamics using a Birth Grid and a Culling object to generate the control particles.


Open the file Max9_PSkinner_Gorilla_start.max

Start by creating a new standard PhysX Flow.

Open Particle View (Keyboard Shortcut 6) to create a new particle flow system.

  • Drag a new PhysX Flow into the field
  • Remove the Spin operator
  • Change the Shape operator to Sphere and set the size to 5.0
  • Select the PhysX Shape operator
    • Change the Type - Sphere
    • Adjust the Static and Dynamic Friction to 10.0 -- this will increase interparticle friction
    • Set the Mass to "By Value" - 1.0
  • Select the Birth Grid
    • Set the Icon Size to:
      • Length: 360.0
      • Width: 240.0
      • Height: 240.0
    • Align the Icon to encompass the GorillaHead_BirthOBJ
    • Set the Grid Base to Triangle
    • Set the Grid Size to 13.5
    • Enable 'Alternating Lateral Offset' and tick 'Compact Vertical Size'
    • Activate 'Restrict Mesh By Volume' -- we are going to Cull or remove all of the extra particles that fall outside of the birth mesh
    • Click the Reference Geometry Button and Select the GorillaHead_BirthOBJ
    • Finally click the 'Calculate Mesh Volume Limits' button to update the culling of particles in the Birth Grid

    Hide the scene object GorillaHead_BirthOBJ to see the particle structure

 

Next we will setup the Glue and PhysX World properties.

  • Add a PhysX Glue test to Event 01
    • Type - Rigid
    • Bind Distance - 30.0
    • Max Binds p/Particle - 10
    • Tick Visualize Binding if you like
    • Enable Breakable By Force
      • Max Force: 100000.0
      • Max Torque: 800.0 --This reason for the lower torque setting, this will allow easier binding break when the binds are twisted, yet hold strong up/down & side-to-side
    • Tick Test True When Particles + Break Any Bindings
    • Set the Rigid Binding Solver Factor to 1.2 --Use this setting to adjust the rigidity or flexibility of rigid bindings, use this setting sparingly it can cause instability in the simulation if set to high
  • Click the PhysX World operator
    • Press the "=>" -Access Driver Parameters- button
    • Go to the modify panel and adjust the Static and Dynamic Friction to 5.0 --this will create a less slippery contact surface
    • Scroll down to advanced parameters, open the rollout Set the Sub-frame Factor to 36 -- to increase system accuracy, this is above the Rule-of-Thumb we want more accurate/rigid binds
    • NOTE: a good rule of thumb for this setting, "Max Binds p/Particle" multiplied by 2 plus 2 or (MBP*2)+2

 

Select the PhysX World and the Display operator in Event 01 right-click and choose Copy

  • Somewhere below Event 01 right-click and choose Paste (Instance). This will new event with an Instanced World and Display operator.
  • Wire the PhysX Glue test to the new Event 02
  • Add a PhysX Switch above the PhysX World
    • In the Match Rotation or Spin group tick Spin
    • This enable the 'Spin Limit' parameter activate it and set the Spin Limit to 0.0 --this will stop the particles spinning that entering this event, keeping them from 'rolling' away

 

Select the PhysX World Icon, untick 'Update Viewports' and bake the animation.

 


Part 2 - Preparing the Scene Geometry


Open the Layers Panel and unhide the GorillaHead_PSkinner copy, select it, and add a Particle Skinner modifier

  • Add the Particle Flow system PF Source 01
    • Set the 'Distance Influence' to Absolute: 30.0
    • Tick 'Remove Uncontrolled' --This will remove any uncontrolled points leaving a cleaner surface mesh
    • Type: Binding Break
    • With an 'Edge Split Precision' of 0.1
  • Add a Shell Modifier above the Particle Skinner Modifier
    • Set the 'Inner Amount' to 1.0
    • Untick 'Auto Smooth Edge'
  • Go back to the Particle Skinner modifier and Activate it

 

Play the animation

 

 


Part 3 - Minor Tweaks


You can get very different results by doing some very minor things. Here are some things to keep in mind:

Moving the Birth Grid Icon slightly will change the overall outcome. Doing this aligns particles differently with the mesh.

Adjusting the subframe factor will have the most dramatic effect, by lowering this value you can turn a rigid simulation into jello, alternately raising it will make it even more stiff. Raising the Restitution value will give the restore more energy back to the colliding particle, in effect making the ground more dynamic.

Adding or removing Glue binds, changing the Bind Distance, and adjusting the Solver factor will give you a variation in your final result.

Adjusting the Particle Mass has a large influence as well lower the Mass value to something like 0.001 will give the appearance the the Gorilla Head is made more of paper than bone, increasing the value to 1000 will make is seem more like a heavy stone.

For a more explosive impact, lower the Max Force Breakability value substantially, as well as Age Test in a new event between Events 01 & 02 to hold the particles in a simulation state before applying the PhysX Switch to them. You could even add a PhysX Force with a Wind SpaceWarp, animate the strength value to impart influence at impact time.

Max9_PSkinner_Gorilla_further.max