Softbody simulation and rendering are taken care of by two separate components:
Using two separate components lets you decouple simulation and rendering, which is often very useful. Also please note that you're not forced to have a single ObiSoftbodySkinner for each ObiSoftbody: you can skin multiple meshes to a single softbody, using multiple ObiSoftbodySkinners.
The ObiSoftbody component requires a softbody blueprint to get its particle/constraint data from. The blueprint will generate particles at the mesh surface / volume / skeleton (depending on your blueprint settings, see below), and shape matching clusters to hold these particles together.
To create a softbody blueprint, go to Assets->Create->Obi->Softbody surface blueprint, or right-click on a project folder and select Create->Obi->Softbody surface blueprint. This is how the blueprint inspector looks like:
Mesh used for particle / cluster generation. Any mesh will work, including non-manifold meshes and polygon soups.
Scale applied to your mesh before using it to generate blueprint data.
Rotation applied to your mesh before using it to generate blueprint data.
Once you've provided a mesh, the initially grayed out Generate button at the bottom of the inspector will become usable. Upon pressing this button, particles and clusters will be generated using the parameters you've set for each of the 4 generation stages:
If you modify any parameter of any of the stages, you will need to click the Generate button again to apply the changes.
This stage will distribute particles on the surface of your mesh.
This controls how fine grained particle sampling will be. Higher resolution values will use more smaller particles. Lower values will use less, larger particles.
This stage will distribute particles in the volume of your mesh. Note that if your mesh does not enclose any volume, this stage might generate no particles.
This controls how fine grained particle sampling will be. Higher resolution values will use more smaller particles. Lower values will use less, larger particles.
You can optionally ask Obi to generate particles for a character skeleton. These particles can be driven using animation, and in turn affect volume/surface particles around them. This results in what we call a full-body volumetric softbody, or FBVS for short.
Hence, a FBVS is a 3-layer model of a real body: bone particles approximate the skeleton, volume particles approximate the body's fat & muscles, and surface particles approximate skin.
GameObject that contains the skeleton you want to use.
This dropdown lets you select the specific bone in the skeleton's hierarchy used as the root bone.
Rotation applied to the skeleton before sampling it with particles.
As a final step, Obi will perform some additional shape analysis of your input mesh. This has two purposes: to adjust the shape and position of your particles to better fit the mesh, and to discard invalid clusters. Shape analysis is performed by voxelizing the mesh, and determining the shape of the local neighborhood around each voxel.
This controls how fine voxelization will be. Higher resolution values will make blueprint generation slower, but will yield better quality results.
Maximum ratio between the longest axis of a particle and its shortest one. Large values will result in a very pronounced ellipsoidal shape for particles. Small values will result in rounder, more spherical particles.
Amount of laplacian smoothing applied to particles. Large values can help in representing thin features such as antennaes and limbs with linear particle chains. In the following images, this is most noticeable in the bunny's ears: they get thinner as smoothing increases.
Generation is a process can take quite a while. Once it is done, the initially grayed out Edit button will become usable. Pressing it you will enter the blueprint editor.
There's three main modes in the softbody blueprint editor, that can be acessed using the 3 buttons at the top:
In particle selection mode, you can select particles to modify their properties, create particle groups, and generate tethers. To select particles, click and drag over them in the scene view. To deselect particles, hold the shift key while dragging.
You can change the brush size by dragging the brush size slider. You can change the particle culling mode to one of three options:
There's also a few available tools that operate on the current selection:
You can get/set any property of the currently selected particles:
You can group together particles that have a special role or significance to you. For instance, you could create a group out of the 4 particles at the corners of a rectangular cloth sheet, to be able to later hang it from another object. Groups are mainly used when creating particle attachments, but can also be acessed at runtime in custom scripts.
To create a new group from the current selection, simply press the "+" button at the bottom right corner of the list. To delete a group, select it from the list and click "-". You can also select all particles in the group by clicking the select button (multi-selection of groups using the shift key also works), and you can replace the particles with the current selection by clicking set.
In property painting mode, you can use brush tools to paint particle properties directly on the surface of the softbody. Enabling the mesh render mode is recommended to work when painting.
The brush has a inner and an outer radius. The brush opacity within the inner radius can be set by changing the brush opacity value. The opacity smoothly decays outside the inner radius, reaching zero at the outer radius.
Using "Brush mirror axis" and "Brush mirror space" you can mirror brush position in all 3 axis in world space or camera space.
Most properties offer 3 brush modes:
If there are some particles currently selected, you can enable selection mask. When the selection mask is active, the paint brush will only act upon the selecte particles. This is useful if you only want to paint some parts of the mesh.
You can import/export any property to a texture using these tools.
When loading property values from a texture, we need know how to map pixel values to property values. Obi maps linearly from the 0-255 pixel value range to a user-defined property value range.
When exporting color properties, all 4 texture channels are used. When exporting floating point properties, the maximum property value in the mesh is mapped to white pixels (255) and the minimum value to black pixels (0). Values are always stored in the red texture channel.
All three blueprint editor modes (selection, painting and texture import/export) have a "render modes" section. Here, you can change the render mode which determines the elements that should be drawn in the scene view. Some of the options are:
When the mesh render mode is active, the currently selected property (mass, radius, etc...) is mapped to a color gradient and used to draw the mesh. By default, the minimum and maximum property values are calculated and used to map values to a color gradient. If the "automatic property range" option is enabled, the gradient wwill range from the minimum value of the current property to the maximum. Otherwise, you can manually specify the property value range to use when drawing the gradient.