Character softbodies

You can selectively softbodyfy any part of a SkinnedMeshRenderer using the Obi Softbody component. In order to do this, you need to:

  • Set up the ObiSoftbody component in a separate GameObject.
  • Add a ObiSoftbodySkinner component to the SkinnedMeshRenderer, then drag the SkinnedMeshRenderer to its "target" slot.
  • Parent the softbody object to any bone in the SkinnedMeshRenderer, position it as desired.
  • Initialize the ObiSoftbody. Fix any particles you don't want to be part of the softbody simulation. Then, bind the ObiSoftbodySkinner.

Let's recreate the ElasticCharacter demo scene included in ObiSoftbody. This character's arms are driven by the softbody simulation, while the rest of it is purely animated. First, we want to create a new softbody blueprint: Right click in a project folder, Create->Obi->Softbody surface blueprint. Then, select the character mesh as the "input" mesh of the blueprint, tweak generation parameters, and click "Generate". Once generation is done, enter the blueprint editor by clicking "Edit".

Since we only want the arms to be softbody-fied, we will select all particles except those in the arms:

then click the optimize selected button to get rid of most of them, except those that share clusters with the chest. Then, we will create a particle group out of these few particles that remain selected, as we will later want to attach them to the chest bone.

Since we will want to have control over inertial forces when our character is moving around, we will add a ObiSolver at our character's root. Also, do not forget to include it in a ObiFixedUpdater so that the simulation is updated.

It's time to create the softbody actor. Select the character's root, go to GameObject->3DObject->Obi->Obi Softbody, a softbody actor will be automatically created as a child of the character's root. Then, assign the blueprint we created earlier to its blueprint slot.

We need to ensure the chest particles (that support the arms) are attached to a bone. So we add a ObiParticleAttachment to the softbody. Then, assign the chest bone to its target slot, and select the "Chest" particle group in the dropdown. This will ensure the chest particles follow the chest bone.

Because we want the character arms to be driven by the softbody simulation, we need to bind the mesh to our softbody. Add a ObiSoftbodySkinner component to the character's SkinnedMeshRenderer, and assign the ObiSoftbody to its Source softbody slot. Then, click Bind skin.