Avatar Morph

This tutorial outlines the recommended sequence for setting up the Carbon Simulation parameters for an Avatar used as a Carbon Morph.

This tutorial builds on top of Avatar Cloth and teaches how to handle cloth pinching situations by using a Carbon Morph instead of a Carbon Collider.

_images/tutorial_morph_initial.png

Initial state of the tutorial scene.

The screenshot above shows the initial state of the tutorial scene which contains an animated character and two pieces of clothing.

Pinching and Dragging

There are various factors which can lead to pinching and dragging of a Carbon Cloth by a Carbon Collider. The most common reasons are unsuited animations which move body parts through another and non-optimally tailored pieces of clothing. But even well-designed setups might result in geometry corruption and inter-penetration.

The top in this test scene is cut to leave small sleeves and material up to under the armpits. While the animation is almost free of self-penetration, there is not enough space between the arm and the torso to fit the top. The screenshots below show how, due to the lag of space, the cloth is pinched between the arms and the torso, which leads to dragging and geometry corruption.

_images/tutorial_morph_corruption.png

Situations where cloth is corrupted by the collider.

Collision Analysis

As explained in Avatar Cloth, the Carbon Collider is capable of running a complete self-analysis to mark areas critical to cloth corruption.

There are 6 basic steps to create and retrieve the results of the analysis:

  1. Deactivate all nodes but the Carbon Collider.

  2. Introduce a Filtering Gap (set this to at least the thickness of the Carbon Cloth being pinched).

  3. Activate Self Analysis.

    _images/tutorial_morph_analysis_dop.png

    Setting up the collider for self-analysis, steps 1-3.

  4. Run the simulation.

  5. Import the last simulation frame using a Numerion Carbon DOP Import node and lock the geometry on this last frame.

  6. Set a Paint node to visualize the analysis point attribute.

    _images/tutorial_morph_analysis_dop_import.png

    Extracting and visualizing the self-analysis results, steps 4-6.

Goal Skin Paint Map

In conjunction with the Cloth Point Group, Goal Skin Strength (painted point attribute name goalSkinStrength) decides which areas of the avatar will be fully dynamic (unconstrained), constrained dynamic (partially constrained) or kinematic (fully constrained, i.e. not simulated).

Note that any point not included in the Cloth Point Group will be kinematic throughout the whole simulation.

There are two main ways to use the information stored in the import node to set up a goalSkinStrength paint map.

  1. Use the analysis to inspire a new paint map

    Use the data as guidance and manually create a new paint map.

  2. Directly apply the analysis attribute

    In order to directly apply the analysis as a goalSkinStrength paint map, create an Attribute Copy node to copy the data from the analysis point attribute into a new goalSkinStrength point attribute. If only parts of the surface geometry are used, set Source Group and Destination Group accordingly.

    _images/tutorial_morph_attribute_copy.png

    Transferring analysis to goalSkinStrength.

    If the analysis had been performed on the whole body, other areas where small primitives occur (e.g. eyes, ears, fingers and toes) would have been marked. It is crucial to manually edit the paint map as such areas can cause large problems. The avatar might literally blow up as usually these areas are prone to contain self-penetrations within the animation. Coping with dynamic areas containing small primitives requires high numbers for simulation iterations and subdivisions as well as small values for the morph’s Inner Fatness and Outer Fatness. This is why only areas relevant to the simulation (group_collider) were analyzed.

    Now, move the Paint node after the Attribute Copy, change the Override Color to goalSkinStrength and clean up the paint map. This involves removing all areas which are not supposed to be deformable, i.e. legs, belly button, etc.

    _images/tutorial_morph_painted.png

    Cleaning up the goalSkinStrength paintmap.

    At last, perform one Smooth operation to get soft transitions between kinematic and dynamic areas in the simulation.

    _images/tutorial_morph_painted_smooth.png

    Cleaning up the goalSkinStrength paintmap.

Warning

Beware of the transitions between kinematic and dynamic areas. If a collision was later to happen in these zones, the simulation would become overconstrained and most likely blow up. Therefore it is important not to create such transitions where the analysis has detected interpenetrations.

Cloth Point Group

The last step of the geometry setup is to specify a Cloth Point Group. This group defines the Cloth part of the geometry. If left empty, the Morph behaves just like a Collider.

Such a group can be either selected manually, or, in cases where a goalSkinStrength paintmap exists, be easily extracted with a Group node.

_images/tutorial_morph_cloth_point_group.png

Extracting Cloth Point Group from goalSkinStrength paintmap.

Carbon Morph Setup

We can now replace the Carbon Collider by a Carbon Morph.

Note

Do not forget to adapt the Numerion Carbon Binding node to use the morph instead of the collider.

Switch the Carbon Morph node’s Morph Setup Mode to Advanced in order to access the full range of its parameters and make sure to copy over all relevant parameters such as Inner Fatness and Outer Fatness.

Warning

It is often necessary to adjust the inner fatness values. As the simulation goes, dynamic and kinematic areas can interact from inside the surface. This could create an overconstrained situation that will lead to the simulation blowing up.

In this scenario, change the Inner Fatness from 1 to 0.1. In very extreme cases, it is crucial to turn the geometry into a double-sided geometry by setting Inner Fatness to 0 and relying on a larger Outer Fatness.

There are four main parameters which need to be set regarding the goal skin:

  • Base; default value: 1.
  • Range; default value: 0.
  • Lower Threshold; default value: 0.
  • Upper Threshold; default value: 1.

Goal posing (as in Goal Pose) is an artistic and very powerful feature and it might take beginners several attempts to get a good parameter setup. The following steps give general guidelines on how to proceed most efficiently.

First, keep all default values and activate the Guide Geometry to visualize the Goal Skin. In this state, each point of the surface will be drawn in a yellow-brown color. This means that all points are dynamic constrained right now. Red would indicate kinematic points and green fully dynamic points.

Now, set the Base value. A good value is large enough to keep the avatar body from falling under gravity, but not much larger. Too small of a value will later allow the body to easily deform, while too large of a value preserves the shape too much and still corrupts the cloth. In this example, 10 is a good value.

_images/tutorial_morph_base.png

Goal skin strength base setup.

Next is the Painted Attribute Range, which scales the painted point attribute values and their product is added to the Base value. The final goal skin strength value therefore is value = base + range * attribute. For more information, please refer to Painted Attribute Maps. Moreover, the sign of Painted Attribute Range decides whether the painted attribute map is applied in an additive or a subtractive manner (whether we paint the areas which should be dynamic or the areas which should be kinematic).

  • Positive Painted Attribute Range values treat the map as additive: painted areas are kinematic areas.
  • Negative Painted Attribute Range values treat the map as subtractive: painted areas are dynamic (constrained) areas.

At this stage, ignore the absolute value and set the range only based on the sign, e.g. -1, as we are dealing with a subtractive map.

The thresholds control which areas are kinematic, dynamic constrained or fully dynamic. There are certain rules in regards to these thresholds:

  • If Lower Threshold is 1 and Upper Threshold is 1, all points are fully dynamic, regardless of the Painted Attribute Range.
  • If Lower Threshold is 0 and Upper Threshold is 0, all points are kinematic, regardless of the Painted Attribute Range.
  • If Lower Threshold is 0 and Upper Threshold is not 0, there are no fully dynamic points, regardless of the Painted Attribute Range.

Additionally for a positive Painted Attribute Range, depending on each point painted attribute value:

  • If the value is smaller than Lower Threshold then the point is set to be fully dynamic.
  • If the value is larger than Upper Threshold then the point is set to be kinematic.

And for a negative Painted Attribute Range:

  • If the value is larger than or equal to Lower Threshold then the point is set to be fully dynamic.
  • If the value is smaller than or equal to Upper Threshold then the point is set to be kinematic.

These rules seems complicated, but with the help of the Goal Skin Guide Geometry changing the dynamic/kinematic zones is a simple matter of moving the Lower Threshold and Upper Threshold sliders until the colors show in the correct regions.

For deformable characters, as in this scenario, it is unusual to allow fully dynamic areas as the character shape will not be preserved at all. Therefore, the first step is to set the Lower Threshold to 0 (which is the default value). Now, all points are dynamic constrained.

_images/tutorial_morph_lower_threshold.png

Goal skin strength lower threshold setup.

Next, set the Upper Threshold to 0.99 or similar to allow all non-painted areas to be kinematic.

_images/tutorial_morph_upper_threshold.png

Goal skin strength upper threshold setup.

There are 2 other goal skin related parameters, but they do not have to be altered for this example:

  • Goal Skin Velocity Limit: This describes the maximum velocity between a simulated and an animated node. This parameter is used to control overshooting and jiggling induced by a strong goal skin strength. Reducing the Goal Skin Velocity Limit slows down the simulation relatively to the animation and allows for smoother motions.
  • Goal Skin Viscosity: This copes with fast motions in animations. If the avatar was to accelerate fast, large values for Goal Skin Viscosity incorporate that motion and help the simulated skin to keep up with the animation.

At this point, run the simulation to see whether the deformations on the character skin is too strong, not strong enough, too large of an area, or too small of an area. Then either adjust the Painted Attribute Range if the scale of deformation is wrong, or the paintmap if the area is wrong.

After a few simulation test runs, a Painted Attribute Range of -4 proves to be a value that produces appropriate skin deformations while no longer causing cloth corruptions.

_images/tutorial_morph_final.png

Final goal skin setup.

Finally, for visualization purposes, add a Carbon DOP Import node to the avatar geometry and merge it with all primitives of the original animation that are not simulated.

_images/tutorial_morph_import.png

Importing the morph geometry and merging with the rest of the body.