Simulating Volume tracked boob physics [Blender]

Posted on July 1, 2021, 12:38 p.m. by Lewdineer • Last updated on June 26, 2023, 9:02 a.m.

Hey everyone that is interested in this tutorial.

Over time I found a way to make somewhat proper boob/jiggle physics with volume tracking in blender, which I thought would not be impossible. I was able to do that in Maya but never in blender, as the volume tracking part never work, but recently I found a way to do it and I would like to share it with you

I will guide you through the process and all the parameters you will have to configure to get a decent working result for a soft body object that can squish/squash and deform your main object that is simulated dynamically and can interact with any kind of another collision object.

Here I will focus on Boob simulation, as that is probably what people want to use it for ;)

I know there are people of different skill levels and I will try to explain every step in a way that everyone should be able to follow.

NEW: Video Tutorial

Example of regular cloth simulation without volume tracking vs the volume tracking method i found: Video G Drive

Things we will do:

  • Making a proxy mesh for the simulation
  • Setting up the cloth simulation
  • Configuring the right parameters for the cloth simulation.
  • Binding the main object to the proxy mesh.
  • Binding the proxy mesh to follow the main object (Rig)
  • ???
  • Profit

Something important I want to mention before we start, make sure to use Real life proportions and sizes for your model, otherwise, you will have vastly different effects for all the parameters. A quick way to check the size of your model, select it and press "N" to open the toolbar and under "Item" check the Dimensions, it will display the XYZ size of your selection, does it make sense, and conform to a realistic size? Good.

Making the proxy mesh

The goal for the proxy mesh is to make a model that encases the area to be simulated, the proxy mesh should have even distribution of polygons, not too many and not too few polygons for the best simulation outcome.

Example of shape that we need

enter image description here enter image description here

One possibility is of course to just copy-paste the existing mesh and use that as a base, but in my experience, the mesh is too uneven and not really suited for the simulation so I will focus on another method

  1. Create a cube with a subdivision modifier level 3
  2. Select the back face of the mesh in edit mode and set the mean grease to 1

enter image description here

  1. Try to align it within the shape from the image above as good as possible while in edit mode

enter image description here enter image description here

  1. Go out of edit mode and apply the subdivision modifier, Modifier tab -> small arrow facing down -> Apply

  2. Now that you have more points to work with, align it more accurately so you have something like this. I personally recommend the plugin PolyQuilt, as it has a smoothing feature that aligns to another surface when you press shift, makes it a lot easier for aligning.

  3. METHOD 2: Instead of alligning by hand, you can use a shrinkwrap modifier, you will have to make a pinning group for the backface, so it does not deform, you will have to make that pinning group in the next chapter anyway, so you can reuse it.

enter image description here enter image description here

Make sure, that the mesh of your proxy and the main mesh do not cross the centerline, as that will cause problems in later steps when binding the meshes.

  1. Add a mirror modifier to the proxy mesh and uncheck merge.

Setting up the cloth sim

  1. Select the backface and press CTRL+G, Assign to a new group, this will be our pinning group for the simulation.
  2. Add a cloth sim to the mesh, and under "Shape" select the group we just made.

You now should have a cloth sim that looks pretty much like crap, good.

Configuring the parameters

I'll go over the parameters of the sim and explain the important bits and things i learned.

enter image description here

Quality steps should be around 10+ as the simulation broke sometimes in my testing.

Vertex mass makes a big difference, use around 1-2kg for a more snappy simulation and 2+ for something with more weight, which will also jiggle more and for a longer time.

Air Viscosity is used to Dampen the whole simulation because boobs don't jiggle for 5 minutes after they moved.

Tension Stiffness is used to keep the whole thing in shape, but setting it too high, will prevent the Volume tracking/ Compression effect, in my testing values from 1-2 are alright, I would recommend 1.6 - 2.

Shear damping is also used for the same reason as the air Viscosity, to dampen the whole simulation, you can play around with it, but for me, the max value (50) was needed.

enter image description here

Now to the probably most important part of the parameters, for this whole thing to work the Pressure Scale has to be insanely high, somewhere from 6000-10000 (max), i recommend 10000. Leave the Pressure at 0, or just increase it by a little bit like 0.1 if you need some extra volume. Leave fluid density at 1.

enter image description here

The shrinking factor will shrink the mesh a little after the simulation has started, which will cause the shape to go back more into its original shape, I recommend something around 0.1, or just 0 in some cases if you want more of a floppy behavior.

enter image description here

For collision distances, something around 0.001 for the proxy and the other collision object was mostly enough.

I think that covers the whole parameters part, at least i hope so :P

Binding the main mesh to the proxy

I'm assuming you have a base character that has an armature applied to it.

For the Main mesh to follow the proxy we need a "SurfaceDeform" modifier, in the modifier select the proxy mesh and click "Bind". For the "Surface"Deform" to not affect the whole rest of the body, we also need a vertex group that tells it which Areas should be excluded. In edit mode in your main mesh select the vertices that are supposed to be affected by the proxy and add that group to the SurfaceDeform modifier.

If you start the simulation now, your main mesh should follow the simulated proxy.

The arrangement of the modifier stack is pretty important, as some modifiers are dependent on others, mine looks like this

enter image description here

The multires/subdivision and corrective smooth are ofc optional. But I would strongly recommend a corrective smooth for the outer edges of the simulated area, as that part can experience some strong deformation compared to the non-simulated area next to it. Important: You don't want the corrective smooth to affect the whole simulated area, just the outer area of it, check the example file and look at the "Corrective_affect" vertex group.

Binding the proxy to the main mesh

So now the other way around.

To Bind the proxy to the main mesh we use a normal Armature modifier.

  1. Select your proxy, then the Armature, press CTRL+P -> Armature deform with empty groups
  2. Add a "Data Transfer" modifier that is placed after the Armature modifier in the proxy mesh. (not 100% sure how important the placement is but that is just how i always do it)

enter image description here

  1. Click the Vertex data box and select Vertes Groups, after that click "Generate Data Layers", then apply the modifier.

Modifier stack should, in the end, look like this

enter image description here

Make sure you are at frame 0 and move your armature, the proxy should follow the main mesh pretty accurately, and when you press play the simulation part should start.


Here is a link to all the videos and a .blend file that contains a setup of the whole working example, feel free to check it out and learn from it.

Examples of what can be done with this technique:

Lying down

Pressing against

An inflation type scenario can also be made like this

With these settings for the proxy mesh:

enter image description here

Make sure to set the pressure scale back to 1 again, and the pressure to around 30, set the tension stiffness to 0, and the tension damping to the max. I can't guarantee it will have the same effect for you maybe have to play around a bit.

The end

Alright, I finally made it.

I wanted to do this tutorial but never really had the time or was just intimidated by the amount of work it would be. At least i hope that this can help some people, or maybe even me if I forget some things.

Here is my Twitter, so if you actually try it in your project I would really like to see how you use it, so feel free to tag me or write me a question if you are stuck or something :)

Okay, I think that's it, I will update the post based on the feedback I get or if I find something myself, alright then, have a good one, and thanks for reading.