She likes to move it move it (aka softbody for genesis)

Issue #828 resolved
Alessandro Padovani created an issue

daz studio 4.15.0.30, blender 3.0, diffeomorphic 1.6.1.0806

This is related to #506 #776.

Personally I don't like too much physics simulations because they may be hard to control. Also I do not like complex setups I want things easy, so most tutorials on simulation don't meet my personal taste. For these reasons I prefer to use spring bones for bouncing effects, that are easy to setup and control and usually fit most purposes. See below for an explanation.

https://www.daz3d.com/forums/discussion/494266/

That said, since there's some request for "realistic" breasts with bouncing and collision effects, I decided to dig in for the fun and after some tests I believe I got something decent enough. Beware I'm not a simulation expert at all, so I'm sure things can be improved. Credits to Aneesh Arts for the explanation of soft bodies in blender.

https://www.youtube.com/watch?v=eggOO9CIyp4

The following setup is based on the blender softbody modifier, it uses the pectoral bones and weight maps from the genesis figures, and provides both breasts bouncing and collision effects. This setup is also easy enough and can be automated by the plugin. So let's start.

Comments (64)

  1. Alessandro Padovani reporter

    1. THE G8F BOOSTER R1

    The first step we take is to setup a kind of "physics armature" that G8F can wear to interact with the physics world in blender. This first setup is more a proof of concept but gets the basic functionalities in place, it allows G8F to collide with arms and hands and to wear bouncing and colliding breasts. Other armatures can be made for different purposes.

    Please note that the physics modifiers are binded to the armature, so we only have to bind the armature to genesis to get her in the physics world. Apart adding some maps to the figure that we'll see later.

    2. FITTING THE BOOSTER TO DIFFERENT FIGURES

    The booster is placed in its own collection so we can save it in a blender file to reload on the scene for different figures. Once we bind the booster to genesis we can use the "transfer shapekeys" tool to fit it. Below an example where I fitted the booster to Victoria 8 with large breasts. This way the physics armature is portable among different figures.

    edit. note. important. As explained in #826, after shaping the figure and the armature, you have to make all bones posable again because drivers may be added by ERCs.

    3. BINDING THE BOOSTER

    A couple of weight maps and modifiers are needed on genesis to bind her to the booster. Again the physics properties are on the booster so we don't need to add physics to genesis, just to bind her. The two maps we need are "softbody" and "chest".

    The softbody map is used by a surface deform modifier to bind the breasts to the booster. The chest map is used by a smooth modifier to help smoothing the deformations of the physics animation. That's really all of it, no other things are needed. Plus the weight maps can be done by using the genesis weight maps with the equations below. I made them easily with the vertex weight mix in blender using the genesis maps.

    edit. note. We could give the “chest” map a more generic name as “smooth“ since different boosters will have different smooth maps.

    edit. note. important. If we want to go back to change the figure shape then the surface deform must be unbinded first, since it binds to the initial shape of the geometry. Also to use the vertex mix we have to make the booster maps with the basic figure, with no shapes applied, not sure why.

    # booster maps
    softbody = normalize(1.5 * (lPectoral + rPectoral))
    chest = normalize(1.5 * (chestLower + chestUpper))
    

    4. ANIMATION

    Before starting the animation there's a minor caveat, that the softbody modifier in blender doesn't support shape keys. In the example above we fitted the booster to Victoria 8 so we have to apply the Victoria 8 morphs. To do that follow the steps below.

    finalize the shape of the booster softbody:

    1. select the booster softbody
    2. add a new shapekey from mix, this will add a new shapekey with the current shape
    3. delete all the shapekeys, then delete the mix last

    Now you can start animating and the physics properties of the booster will follow. This is also related to #826 where there are bug fixes and tips to handle ERC morphs and animations.

    edit. note. This setup is very fast because it uses low poly geometries for the physics modifiers. Nevertheless it can’t be realtime depending on the cpu power, so for a smooth animation experience it is always better to disable the physics modifiers first, then animate, then enable the modifiers. Or we can bake the simulation using the cache, this will freeze the simulation until the next baking.

    edit. note. important. With more tests I see it is always better to bake on cache, otherwise the simulation may go out of sync if we play it realtime, with odd artifacts.

    I included a couple examples, a dancing animation and a grab animation with the booster. Plus a test scene booster-r1.blend with the booster. We shouldn't share daz assets but this is a basic G8F with stripped materials for demonstration and test purposes only so I feel it is fair use enough.

    5. PLUGIN IMPLEMENTATION

    To implement the booster for the plugin, it is possible to save it in a blender file, it could be for example a daz-helper.blend where we can add more different boosters in the future or any kind of data that the plugin may need.

    Once the booster is loaded from the blend file the plugin has to create the maps and modifiers for the genesis figure as described above. Every different booster will have its own maps to be created and the plugin can recognize the booster by its name in the blender file. Then before animation the booster softbody must be finalized. That's all.

  2. Alessandro Padovani reporter

    re-uploaded the booster for a minor cleanup of the scene

    edit. removed r1 since it’s replaced by r2 and no longer needed as example

  3. Thomas Larsson repo owner

    Now there is an implementation. It is a first draft and many things can be improved, but I think it works surprisingly well and is fast too. Morphing breasts are not supported, but I’m not sure that it is important. Only breasts are considered, but the code can probably be adapted to handle a wiggling belly or butt without too much work.

    I have copied your modifier settings, except that the softbody goal stiffness has been set to 1.0 (displays as 0.999). You settings work fine for the dance in place animation, but if she rotates around her own axis the breasts can be left behind unless the inside of the breast really follows the pect bone.

  4. Alessandro Padovani reporter

    wow that was fast !

    I can confirm that the goal strength is to be 1.0, if it figured as 0.999 it is probably because I did the slider by hand instead of entering the number. I experimented a lot with the settings so this was an incident.

    That the physics armature can be fitted to the figure is very important in my opinion. Otherwise the user needs to shape the softbody by hand to fit it and may not be easy for everyone, since it requires some modeling skills. That’s why I also focused on a way to autofit the armature.

    Going to check the new commit ..

  5. Alessandro Padovani reporter

    edit. important. Sorry now I realize you talked about the goal stiffness. Well that can be any value since the goal strength is 1.0, the stiffness is only used for strength < 1.0 and the default stiffness is 0.5. It shouldn’t make any difference.

    edit. important. With long animations as the aiko example, it is better to bake on the cache instead of leaving it realtime, otherwise the softbody may go out of sync with odd artifacts. This is so in general with physics in blender.

    The Aiko animation works fine here with the booster r1, also tried with various breast sizes. The goal strength seems 1.0 at least it displays so in blender if I enter the numeric field. Are you sure you copied all the settings ? In my opinion it would be better to load the booster from the blend file as suggested above, this leaves no space to errors.

    steps:

    1. load booster-r1.blend, change some shape if you want, then finalize the softbody
    2. load the aiko animation and play

  6. Alessandro Padovani reporter

    Ok I gave a look at commit d73d02f and these are my notes.

    1. VIEWPORT. The object viewport display for collision and softbody could be colored and in front as in the booster example, this gives better visual feedback when the simulation collection is visible.

    2. BINDING. The "add breast bounce" tool leaves the figure in pose mode, I don't know if this is on purpose. Then I'd use "smooth" instead of "chest" for the smooth map since it is a more generic and meaningful name.

    3. SOFTBODY. The goal stiffness can be the default 0.5 instead of 0.999, that is not used anyway. In the booster I changed the solver settings for a better precision, this worked better with collisions.

    edit. updated the picture with the right booster settings.

    4. COLLISION. The collision distance is better to be 1 cm in this case, rather than 1 mm. We're not dealing with cloth so we don't need 1 mm. And the larger the distance the better blender can handle it. It is also important that the breasts get the same size as the figure, otherwise the collision can't work fine if the softbody is too different. Also the collision cubes are too large in my opinion it would be better to scale them down a little also to compensate for the 1 cm distance. Again the cubes have to approximate the figure shape otherwise collisions can't work fine. That’s why I modeled them a little in the booster example.

    edit. On a second thought it may be easy enough for the user to shape the physics armature to better fit the figure. At least until the armature is simple. An autofit system would be nice to have anyway, but I understand this also grows the complexity.

    edit. important. Anyway to take advantage of the “transfer shapekeys“ tool for autofitting, it is enough to fit better the physics armature to G8F, you can use the booster as example if you need a reference. Then that the armature is loaded from a blender file or generated by the plugin doesn’t really matter. Personally I like the idea of a daz-helper.blend file to store any kind of data the plugin may need, this also simplifies the code since the physics armature has not to be coded, just loaded from the blend file. Also should the armature become more complex it may become difficult to generate by code.

  7. Alessandro Padovani reporter

    updated the booster example with "smooth" for the map name and 0.5 default for the goal stiffness, plus some render settings for fast rendering

  8. Alessandro Padovani reporter

    Thomas, since after “morph armature“ we always need to remake all bones posable, can this be added to “morph armature“ ? It is way easy to forget and also annoying to do it every time. Unless there’s some reason why not to.

  9. Alessandro Padovani reporter

    This is another example of collision with the booster r1, to show how the figure can also interact with props in the scene. Again for collisions to work fine it is important that the softbody shape is similar to the figure.

  10. Thomas Larsson repo owner

    Most of your issue are dealt with in the last commit. I kept the goal stiffness at 1.0, because with stiffness = 0.7 the breasts sometimes get lost in the rotating dance animation. Not always though.

    I’m not quite sure why you say that you have to make bones poseable after morph armature. Adding some fbm morph had that effect, but that was when the morph was loaded and not when the armature was morphed. Also I thought that was fixed, but maybe not. I will look into that and the other stuff tomorrow.

  11. Alessandro Padovani reporter

    As for “bones posable” it’s I didn’t get what you explained in #826, if we have to re-make bones posable just one time after loading the ERCs then it’s fine thank you.

    As for the goal stiffness, again that shouldn’t really matter because the goal strength is 1.0. So the stiffness is not used in this case. It may happen that physics gets out of sync if you play the simulation without baking it first, but that’s another story. Anyway since the stiffness doesn’t matter any value will do so 1.0 is fine for me.

    Going to test the new commit ..

  12. Alessandro Padovani reporter

    Thomas I do like commit b69c8d1 a lot. It is clever how you managed to autofit the armature.

    I have to say though that this way the softbody will not behave fine as before. That is, every edge is seen as a spring, short edges will be weaker than long edges, so for the breast effect to be believable all the edges should have the same length or very similar, otherwise the structure will tend to collapse on short edges.

    Also the collision armature should have planar faces so I’m not sure how it will behave with the hands.

    That said, I believe the advantage to have an autofit feature is worth some deficiency in the overall structure. Then if you find a way to keep the softbody edges the same length and the collision faces all planar it will be perfect. But to me we can mark as resolved, if you have nothing to add.

    A minor note you didn’t color the armature as suggested, but it’s fine for me I can do it myself.

    edit. note. The way the structure it is now it seems to work better with 3.5 Kg instead of 3. That’s minor though the user can easily adjust the softbody weight to his taste for more or less bouncing.

  13. Alessandro Padovani reporter

    update.

    Unfortunately the new structure is worse than expected, probably also because it doesn’t have a “back“ spring structure to support the “front“ structure, it ends with a plane thus there’s no force on the edges. Below an example where it collapses on short edges in a back fall, despite the corrective smooth helper.

    Also I noticed that the normals on the softbody are reversed.

    To improve the situation I found that applying a smooth + shrinkwrap tends to make the edges more distributed. But the simulation doesn’t improve much.

    To make the faces all planar for the collision armature there’s the tool in edit mode “mesh > cleanup > make planar faces”.

  14. Alessandro Padovani reporter

    update.

    Ok I found a way to deal with most issues. The improvements below make the new structure working fine enough, but not as good as the booster. So the ideal solution would be to keep the old “ball“ structure in the booster example that’s much more reliable. That said, again since the new structure allows for autofit then some deficiency is worth it.

    1. SOFTBODY FIX. The new structure ends with a plane and this means no force on the borders. We can fix this by adding edges with “face > poke faces” in edit mode. This way the back structure gets springs and can support the front structure. Please note that I also shifted the center to direct the new springs forward.

    So overall to fix the new softbody geometry we need (reverse normals + smooth + shrinkwrap + poke and shift).

    edit. note. Please note that since the back face is pinned its springs are 100% rigid, but they contribute anyway to the overall structure.

    Unfortunately this is not enough because the new back structure is very rigid compared to the old “ball“ softbody in the booster, that means no back forces to distribute collisions, so the new structure tends anyway to flip backward. We can add some self collision to help with this, but it will not always work.

    This is the best I can do with the new structure. Again 3.5 Kg insted of 3 Kg will bounce a little better. But the new structure is inherently more rigid compared to the booster, so the bouncing is penalized anyway.

    2. COLLIDER FIX. A minor fix for the collider too. Since the fingers will move in animation it is probably better to keep the hand collider in a more “neutral“ shape. Scaling it down to 80% with the top as transform pivot will do. Apart making all faces planar as already reported above.

  15. Thomas Larsson repo owner

    The collision and softbody objects are created from a subset of the body vertices. With this method it is impossible to add vertices on the back side of the breasts, since the body doesn’t have any vertices there. Instead you can now shrink the ngon at the back. The shrink factor can be set by the user, at least for the time being. The default is 0.5; the earlier structure corresponds to a factor = 1. I also edited the breast mesh to give a more even distribution of springs and the hands to be more box-like.

    With the default shrink factor a mass = 3 kg is too much, so I reduced it to 1 kg, although that may be too little, I also added a vertex group for the mass which is the inverse of the pinning group. Not sure if that makes any difference.

  16. Thomas Larsson repo owner

    Here is the animation that Jeroen uploaded in #776. It is a rather nasty collision test. Note that you need to load body morphs first.

  17. Alessandro Padovani reporter

    I do it in edit mode with poke faces.

    Anyway feel free to use the information above as you wish. To me it is clear that unfortunately if we can’t keep the “ball“ structure in the booster example then the softbody can’t work fine for what we need. Then anything will do as a “limited” result. Personally I have nothing more to add here, so Thomas feel free to mark as resolved when you’re satisfied with the result.

  18. Thomas Larsson repo owner

    Added an extra vertex at the back of the breasts. It gives a reasonable shape to the softbody mesh, I think.

  19. Alessandro Padovani reporter

    Commit 0219b8f worked much better than I expected, I believe you got it that’s almost as good as the booster. Personally in my tests I needed 3.5 kg to get a bouncing I like, but it may also depend on the breasts size. I believe we can mark as resolved for now.

    Then there’s no limit to what can be added, as glutes and belly for example, but his will also require custom maps since there are no glutes and belly bones in genesis that we can grab from. As well as more collisions for the legs too.

  20. jeroen b

    Hi there, I tested the new setup, good fun!

    Using the same large breasted G8F as before, I made some modifications to the setup. I do not think with very sparse geometry you can get good results, so baking takes longer but such is life.

    Think results are quite reasonable, difficult though to keep the overall shape intact during collisions.

    I will upload the blend-file to issue 776, I can only send it trough my e-mail.

  21. Alessandro Padovani reporter

    That’s why low poly is used. To better preserve the shape with collisions. Other than having the side effect of a high simulation speed. Otherwise there’s no point to use softbody without collisions we can use spring bones instead.

    To explain it better, the mesh density with softbody is the same as the mesh density with cloth. If you need to simulate thin cloth as silk then you need a high density for the thin folds to be simulated fine. But if you need to simulate a stiff cloth as leather then a high density will only get in the way and also take resources other than not working fine. Same for softbody if you need to simulate a “rubber ball” that’s our case with breasts you need a sparse geometry, otherwise with a dense geometry you get more a “jelly sheet” effect that’s not how breasts work.

    Again I’m not a simulation expert at all this is just basic theory.

    edit. note. To use a dense mesh with softbody it is more efficient to use triangles. This way we don’t need some settings that are needed for quadrangles and slow down the simulation, as collision edge/face and stiffness. I used quads in my setup because it’s low poly and also I don’t like tris “aesthetically”, but it is perfectly fine to use tris too.

  22. Alessandro Padovani reporter

    UPDATE.

    Thomas, it would be useful to add support for the outfits. What we need to do is to add the surface deform and the maps to the selected outfit.

    note. important. In my tests the blender data transfer doesn’t seem to be excellent. The transferred weight maps are approximated and don’t always work fine depending on the outfit. So it is better to use the lpectoral and rpectoral maps of the outfit to make the softbody map.

    bind softbody to selected items:

    1. add surface deform and corrective smooth modifiers
    2. transfer softbody and smooth maps

    Below an example where I binded the softbody to the basic wear bra.

  23. Thomas Larsson repo owner

    Implemented in last commit. No weights are transferred at all, instead I use existing vertex groups: lPectoral + rPectoral for softbody and chestLower + chestUpper for smooth. Seem reasonably close to the previous weights.

  24. Alessandro Padovani reporter

    Commit d3bfcf9 works great thank you Thomas for the fast fix. A couple notes, that are not bugs.

    1. The plugin transfers the softbody even if the selected mesh doesn’t have pectoral maps. It may make sense to be less “error prone“ and don’t transfer if there’s no pectorals, may be with a warning too.
    2. I am not sure that transferring the smooth modifier is a good thing, it may mess up some outfits. It is also true that the user can easily remove or fix the smooth modifier should it cause unwanted or too much smoothing. Also the smoothing is more a helper for “extreme movements”, it may not be needed in most situations. This can be a note to add to the docs.
    3. This is minor. We could give the tool a more generic name as “Add Softbody“ instead of “Add Breast Bounce“. Both to be less weird and more politically correct, and also because we may very well improve the tool for other body parts too. This is really a generic softbody implementation.

  25. Thomas Larsson repo owner
    1. Makes sense. Will fix later.
    2. The subsurf modifier is kept if it was there originally. Wouldn’t it be weird if this tool removed subsurf modifiers without asking?
    3. I see your point, but with a generic softbody tool one would have to specify which body part that the softbody should be added to. I rather imagine a separate button for each body part. That the different tools would share a lot of code is not something that has to be displayed to the user. But yeah, some (over-sensitive) people could find Add Breast Bounce offensive. Add Breast Softbody is perhaps better.

  26. Alessandro Padovani reporter

    2. Just for clarity, I’m not talking of subsurf but of corrective smooth for the target. Then yes this is just a note for the docs, if it becomes an option then it must be user controlled. May be we can have a general option in the “add softbody“ tool to generate the smooth or not.

    3. Not sure that it will be possible to provide separate tools. May be a single tool with more checkboxes to select the body parts to generate makes more sense. I mean both the geometry and the maps are shared this will be a single softbody modifier, even for multiple body parts. But again this is minor.

  27. Thomas Larsson repo owner

    Most changes incorporated in last commit. Though I’m wondering if you it would be better with icosphere breasts, if they can be fitted well. If each edge is a spring, an icosphere should give an optimal distribution of forces.

  28. Alessandro Padovani reporter

    Commit a368e4f is good.

    Yes I tried with icospheres, they tend to be a little more rigid than quads but work fine too, mine is just a matter of “easthetic“ choice. The stiffness option is needed for quads. If for some reason we need a high density softbody then tris are better for performance.

    p.s. The booster r2 is coming with nice news. Need some more tests before publishing.

  29. Alessandro Padovani reporter

    1. THE G8F BOOSTER R2

    And here it is. I added softbody for glutes and belly and collision for the legs. The collision armature is a little refined, during collision it is important to avoid "hard" angles so a smooth shape helps. Apart this the concept is the same no great news here.

    2. FITTING THE BOOSTER TO DIFFERENT FIGURES

    The following procedure is much better and doesn't require to load any morph. We fit the booster directly to the figure. Basically we have a binding geometry that's the G8F basic shape, then we copy the figure shape as a shapekey for binding and transfer the shapekey to the physics armature.

    The binding geometry also keeps the softbody map to copy on the figure.

    steps:

    1. load the G8F BOOSTER R2 collection in the scene (file > append)
    2. copy the figure shape as shapekey for the binding geometry (shapekeys > join as shapes)
    3. transfer the figure shapekey to the armature (morphs > transfer shapekeys)

    Below an example where I fitted the booster to a voluptuous figure.

    3. BINDING THE BOOSTER

    No news here, the binding procedure is the same. Apart that we don't use a smooth map anymore. The reason is that the corrective smooth preserves the original shape and details of the figure, and only smooths the deformed areas. So practically it "auto maps" itself. Was this a normal smooth then yes, we need a weightmap to limit its effect to the necessary areas.

    The details are preserved better if we use the length weight option.

    This also means that we don't have to worry about transferring the modifier to outfits, it won't lose the outfit details.

    https://docs.blender.org/manual/en/latest/modeling/modifiers/deform/corrective_smooth.html

    steps:

    1. copy the softbody weightmap from binding to the figure (object > link/transfer data > mesh data)
    2. bind the physics armature to the figure (parent > armature deform)
    3. add the surface deform and corrective smooth modifiers

    4. ANIMATION

    The blender softbody doesn't support shapekeys, so as always we need to finalize the softbody shape. Just delete the shapekey that we transferred before, first the base key then the figure key, this way the figure shape is finalized. We can also finalize the collision armature and delete the binding shape that we don't need anymore.

    I included a couple examples showing the new glutes and belly softbodies.

    edit. note. Forgot to mention that in r2 I also included an alternate pin map for softbody, “PIN BRA“, that can be used for pinning figures wearing a bra, rather than free breasts.

    edit. note. It is also easy to modify the bouncing effect as desired by assigning a mass map to the softbody, if we want more or less bouncing to a specific part. Or modify the overall mass to affect all parts.

    5. PLUGIN IMPLEMENTATION

    Thomas feel free to pick up what you want. As it is now the booster is rather independent from the plugin and could be used as a "stand alone" helper. In case you want to implement the "daz-helper.blend" idea with the binding shape, I'm waiting for a confirmation from DAZ to redistribute the genesis shape. Though I know that other free products do this and got permission from DAZ so I'm not expecting any problem.

  30. Thomas Larsson repo owner

    I took a new approach to fitting the simulation objects. The objects are stored as they are, and then each vertex is moved as the nearest body vertex. This works well for the collsion objects, and for the outside of the softbodies, but not so well for the inside since there are no body vertices nearby. Maybe it is better to start from a character that has more body fat that can jiggle instead of the the default skinny G8F. Say 100% Heavy + 100% Breast implants. Or maybe 50% of each.

  31. Alessandro Padovani reporter

    Yep that’s also how I did the “improved“ collision armature using shrinkwrap. As for fitting the softbody, I believe the best way is to use genesis as basic shape and transfer the figure shapekey as explained above. This also tends to fit better the original shape of the softbody that’s very important since it defines forces, so a different shape will get different results.

    May be using a little corrective smooth after fitting will preserve better the original shape. Then I also agree that a “fat“ genesis may allow to better define the initial softbody shape, though I’m quite satisfied myself with the R2 rig.

    edit. Commit 52a0b65 looks great to me. Of course there’s no limit we can always improve but this is definitely a good start in my opinion. I may mark as resolved for now. Will leave this open for a while just in case anybody wants to make comments or suggestions.

  32. Alessandro Padovani reporter

    update. minor bug. I see now that commit 52a0b65 doesn’t use the “length weight“ option for the figure corrective smooth. This is minor but the corrective smooth modifier preserves better the shape details with the “length weight“ option. Please note that I didn’t use this option on the softbody corrective smooth, because in this case I don’t want to preserve the details but only the volume.

  33. Alessandro Padovani reporter

    update. bug. Also commit 52a0b65 doesn’t transfer the softbody map to the outfit when we select multiple objects for softbody. To transfer the softbody map it seems to me that the “projected face interpoolated“ option for vertex mapping works fine enough.

  34. Alessandro Padovani reporter

    update. bug. When we apply the softbody the subdivision gets “use limit surface“, that should be disabled to match the daz subdivision.

  35. Thomas Larsson repo owner

    The issues should be fixed now.

    The reason why I would like to start from an obese character is that the softbody objects may be too flat if you start from the default skinny character. This is particularly evident for the belly, which I think should look more like the black circle.

  36. Alessandro Padovani reporter

    As for commit 08f40ba there are a couple issues.

    1. SOFTBODY TRANSFER. The blender transfer tool is not excellent. So it is better to use it only when we have no alternatives. In our case we’re lucky because we can compute the chest from the daz maps. So I’d use the daz maps for the chest and the transfer tool for glutes and belly.

    2. SOFTBODY. This is minor, but I’d keep preserve volume and simple smooth for the softbody. Again not really important.

    As for the belly softbody, I did it on purpose to keep it “flat“, because the belly fat is not a “ball mass” as the breasts fat, but it is rather a “layer“ above the belly muscles. The muscles are relatively rigid and the fat bounces above that. Anyway I’ll do some more tests to see if we can improve things and let you know.

  37. Alessandro Padovani reporter

    update.

    Ok this is a refined version with better maps and a little refined collision shape. The belly looks good to me, included sample animation belly-2.mp4. I also added a MASS map with CHEST GLUTES BELLY selectors that the user can use to modify the mass percentage, so there's control on the single parts. Rig included g8f-booster-r2.1.blend.

    I'd make this final for now, unless bugs come out.

  38. 3 Pood

    There are two things this method seems to do worse with than a cloth proxy with pressure:

    • Laying down, back and side to side. Even with higher weight, the breasts tend to stand full with the armature is lying flat
    • It’s very easy to collapse into the chest cavity if the forces are too high.

    The former can sort of be ameliorated with lower stiffness, but that yields other issues. Still, I would add a lying-down motion to the test cases.

    Tangentially, one thing that can help is to add a vertex group to the avatar mesh with no vertices in it, then use a VertexWeightMix (with each body group’s set) and set the vertex set to all, and the mix mode to replace, and use the influence amount to help control the influence of the physics which can help to control the effect while not touching the physics settings and maintaining the bake. Can then drive that from the properties panel for simplicity.

    @Alessandro Padovani It’s in Finishing now

  39. Thomas Larsson repo owner

    Yes, I moved it to the Finishing section because it must be done before the mesh is changed, by merging geografts or lashes. I will rite a blog post soon.

  40. Alessandro Padovani reporter

    @3 Pood

    I didn’t use self collision that’s what gives softbody true volume and resistance to strong forces. The reason I didn’t do that is mainly because I felt the softbody was behaving reasonably good even without. As for the figure laying down there’s nothing to prevent the softbody to penetrate the figure geometry, a better collision structure would be needed for that. Even so I believe within its limits this first example is behaving fine enough for most common effects.

    We may add self collision as an option to manage strong forces when the animation requires them. This tends to make the structure more rigid though. Also self collision is not excellent with low poly geometries because it is based on spheres thus lacks precision.

    As for using cloth instead of softbody that’s doable of course. I just tend to use the “right“ tool for the job and I feel cloth is a little more complicated to setup other than not strictly intended for softbody effects. But yes, cloth with pressure is a viable alternative. We just need to replace the softbody with a cloth modifier and play around with the settings to find something good. All the setup is the same.

  41. 3 Pood

    The issue with lying isn’t self-collision (collapsing in on itself… that more of the second point), the issue is that the weight distribution with larger breasts would normally cause them to fall along the side or spread out. With the cloth proxy method, you keep most of the proxy outside of the body mesh, so as long as the pressure isn’t too high they will fall and spread as expected. Though perhaps modifying the mass map would improve the behavior

  42. Alessandro Padovani reporter

    Again, there’s nothing to prevent the balls penetrating the figure geometry, so you don’t want to do that. Unless you setup a better collision structure. Than to do that with the actual softbody it is enough to set the pull and push to 0.2 instead of 0.3.

    Below the result of laying down with pull and push to 0.2 and some self collision.

  43. Alessandro Padovani reporter

    Thomas, commit 200cb1d is great but there are a couple issues.

    1. The MASS map is not set by default. If this is on purpose then it's fine. The user will have to set the mass map by himself if he wants to use it.

    2. The chest map for the outfit doesn't seem to use the daz pectoral maps, but rather the transfer tool. So artifacts happen. If I use the daz maps with the booster r2.1 then those artifacts don't happen.

    edit. The booster r2.1 example provides separate chest glutes belly maps so you can transfer only glutes and belly if the outfit gets the pectoral maps. That is, we transfer glutes and belly to the outfit softbody map, then compute chest from the outfit pectoral maps.

    edit. Test scene included g8f-soft.duf.

    # we compute the chest map from the daz maps
    chest = normalize(1.5 * (lpectoral + rpectoral))
    

    note. As a minor note you didn’t mention in the blog that there’s a PIN BRA map for figures wearing a bra instead of free breasts.

    edit. note. important. In the blog you mention dForce. It is important to understand that dForce is a cloth simulator without pressure thus it can’t do softbodies. This is evident when the dForce “softbody“ collides with a prop, it doesn’t preserve the volume. At its best dForce can do bouncings, but not softbody collisions as we do in blender. So this is not to replace dForce but to do things that dForce can’t do.

    Below there’s the “so good“ dForce breasts V2 in the video demo as referenced in #776. It is evident they just “flat“ on collision.

    https://www.youtube.com/watch?v=FOCTfB4sL6E

  44. Thomas Larsson repo owner

    Fixed the problem with transferred chest vertex groups. However, there are still artifacts with the panties and belly simulation. In the video I fixed that with shrinkwrap modifiers.

    I will update the blog post later, but I need to understand more first so I know what to write.

  45. Alessandro Padovani reporter

    Commit ecf2ef2 works wonderful thank you Thomas for the fast fix.

    As for the panties I don’t see any artifact here the softbody map seems to transfer fine. Tried with and without smooth. I also removed the subdivision in the panties and bra since they’re high poly already but this doesn’t seem to make any difference. Anyway in general it may happen that outfits poke through even in daz studio so this is a “normal” issue to deal with.

    Since you mention that there are cases where the softbody collapses. This is true but should happen only with extreme forces that are usually from bad animations. Remember that softbody simulations rely on “realistic“ animations. For example it is unlikely that a prop will hit a figure at 300 km/h, or that a figure will move at that speed. So to go from two very different poses in just a few frames may not be realistic, that is, a real human couldn’t move that fast. This is true in general for any simulation type.

    Then if there’s any realistic animation where the softbody collapses please let me know so I can look at it and may be find better parameters.

  46. Alessandro Padovani reporter

    update. important.

    It is stated in the blender manual that softbody doesn’t follow the scene timing. That is, we have to set the simulation speed ourselves depending on the fps. I found the equation below with the free fall test 9.8 m/s that’s the default blender gravity (earth’s G factor). Please note that the manual is wrong it’s not 1.3 for 25 fps. Also the equation doesn’t seem to be accurate so it’s just an approximation, works fine enough for values around 24-30 fps that are commonly used. Tested in blender 3.0.

    edit. note. The blender gravity does influence the softbody though, so a 5 m/s G will affect the simulation. It’s only time that’s to be adjusted. So the equation below works fine for a different blender gravity too.

    edit. note. important. Forgot to set the friction for surrounding media to zero, updated the equation factor from 1.6 to 1.56 that’s exact for 30 fps. Not a big difference anyway.

    Test scene included soft-speed.blend.

    https://docs.blender.org/manual/en/3.0/physics/soft_body/settings/simulation.html

    # we have to set the softbody speed depending on the animation fps
    # this equation works fine enough for values around 24-30 fps
    simulation speed = 1.56 / fps * 30
    

  47. Thomas Larsson repo owner

    The simulation speed is set in the last commit, and the docs have been updated.

    I think the vertex group transfer tool runs into problems at folds, where the normals change abruptly. So where the bottom of the breasts meet the vertical ribcage. For a slender character the bottom of the belly is quite flat and transfer should work well. I encountered the problem with a character that is 100% FBMHeavy, where the bottom of the belly is horizontal and the pelvis is vertical.

  48. Alessandro Padovani reporter

    Commit 1d0cc60 is fine thank you for the fix. Agreed for the transfer tool if I can find some workaround will let you know.

  49. Alessandro Padovani reporter

    Thomas just to let you know.

    I did some tests and the only workaround I found for the transfer issue is to go back to the fitting method in buster r1. Nothing else worked. This essentially means to load the figure and outfit with the basic genesis shape, then apply the softbody, then load the morphs we need and apply them to the figure and outfit. Also for this to work fine we would need a way to “finalize“ the ERC morphs so we can get rid of them once they are no more needed, as discussed in #826.

    That said, the breasts always work fine and it doesn’t happen so often to get folds in the glutes and belly. We may also try a shrinkwrap when this happens. These can be notes to add to the docs for others to be aware of.

  50. Log in to comment