Storm - Fixing High Velocity Collision Problems
Related Videos:
Intro to Storm Nodes Part 1 (Rumble)
Intro to Storm Nodes Part 1 (BitChute)
Unstick my (Storm) Balls (Rumble)
Note that the information in this post is more up to date than what is shown in the older Intro to Storm Nodes Part 1 video, but it still as good basic information.
What Is the Issue?
In Storm soft-body masses can collide improperly at high velocities. Imagine some soft body balls dropped from a great height into a tall glass. If they end up penetrating each-other into a fused blob, it's probably not the look you were after. What is causing this?
The problem lies with the Resolution setting of the Granular-Solver node and how it relates to the Voxel Size value of the Mesh-to-Volume node. Voxels are of course little cubes, and if there is enough space between them, they can interlock in unpleasing ways given enough meeting force.
Approaching the problem:
Tweaking these values is important when testing. When the values of two different nodes are playing off each-other, it can be frustrating to go from one node to the other, altering each one when setting up a new test.
Linking the two values in the two different nodes can help make this process easier. Here's how it works:
Going With the Flow:
The first thing to know is that a node cannot "see" any settings to a node below it on the node tree. Storm node trees start from the top and work their way down. So the last pertinent node would be the one that makes a reference to the pertinent node above it.
Typically the Mesh-to-Volume is the first on the tree. The Voxel Size setting inside it is effectively your resolution; how many little cubes per inch your soft body will get.
The next part will be your Granular Solver node, further down the tree. We will tell it to look up at the Mesh-to-Volume node and use it's Voxel Size setting for it's own purposes. Unfortunately it is not as simple as setting this up and forgetting it. I am going to make an analogy of how I believe this works. I could be wrong, so maybe Leonard or the developer or someone will correct me but dig this: The Voxel-Size is how many little voxel cubes are generated per cubic unit of space. The Resolution of the Granular Solver tells these little cubes (now converted to little balls) how large they all are. The larger they are, the less empty space exists between them. This means it is less likely another mass of the same soft-body balls will wind up stuck together upon colliding.
Setting up a relationship
In the Granular Solver node, go to the Resolution setting and change the default value to this:
1/ref(Mesh-to-Volume/voxelSize)
This will reference the Voxel Size value of your Mesh-to-Volume node and apply a division to it. Note that the Mesh-to-Volume is the default name. If you have more than one, or if you rename it, you will need to have it named as it appears in the Objects list seen on the very left side of the Storm program window. Now pay special attention to how I typed voxelSize. Lower case V and no space between the words. This is different from how the value label appears inside the Mesh-to-Volume node. But check this out: Go to this node and hover your mouse over the Voxel Size value name. You will see a little panel pop up with a name in parenthesis. (voxelSize). This is the super-secret code that Storm uses for inter-node communication. So the next time you want to make a reference to something, you know you have to hover your mouse over it's name to get the exact super-secret code name. Cool, huh?
The 1 used for division is a starting off value, but most likely you will need to lower it. As far as I can tell, there is no one-size-fits-all value that can be used in every project. It will take some trial and error to get it working right. Try going down to 0.85/ref(Mesh-to-Volume/voxelSize), or possibly 0.6/ref(Mesh-to-Volume/voxelSize). If you go too low, you will see a cushion of air between any colliding soft body masses. If it's too high, you risk the masses getting fused together if they hit each-other hard enough.
Testing it out!
Now you have the basics. There are still two values to adjust, but because they have been linked, you will not need to edit both of them each time. The Voxel-Size inside Mesh-to-Volume is for the pure resolution, making sure the resulting array of balls represents your soft body form in a way that will accurately represent your final mesh: With enough definition to give pleasing interactions. The Resolution inside Granular Solver is for making sure that when the soft bodies self-interact, they do so without getting stuck together.
Closing notes:
The information in this section is a bit off of the focus for this post, but they to help shape the final results, so will touch on them.
At the top of the Objects list the GlobalSettings. In here you can adjust the Point Size. This changes how big or small the little balls appear in the viewport, but this has zero effect on simulations.
As if the Voxel Size and Resolution settings were not complex enough, other settings do influence your simulation results. Min Substeps and Max Substeps tell Storm how many times it will process everything between each frame. The general rule of thumb is, the more Substeps, the more accurate the simulation will be. Unfortunately this also means it will sim more slowly.
Constr. Search Distance inside Granular Solver is a setting for how much distance Storm will seek out to neighboring particles when creating it's initial network of springs between the particles. Increasing this value can result in a stiffer, stronger particle hierarchy. Compensate by lowering the Constraint Stiffness to relax things if you like. But most importantly, raising the Constr. Search Distance value will increase simulation times very, very quickly! Don't get too greedy!
Iterations, also inside Granular Solver can improve accuracy and will also contribute to sim times. Iterations are multiplied by each Substep so use with caution. I find that if I get unsightly lingering dents in my soft body mass upon collisions, Iterations can help prevent this from happening. If you have very stubborn denting problems, try adding to both Iterations and Constr. Search Distance (and then go to the movies while it sims).
Have fun!
I hope I explained all of these concepts well enough for you and I wish you happy Storming.