Avatar Cloth

This tutorial outlines the recommended sequence for setting up the Carbon Simulation parameters for an Avatar wearing clothing.

This tutorial assumes a basic knowledge of the Houdini DOP Network and its graph creation.

Refer to the Reference and the User Guide sections for more information on the individual parameters that are discussed below.


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.

Basic DOP Network

All Carbon nodes must be added inside a DOP Network object. First add a Houdini DOP Network object to the project, then go inside the network graph and add a Carbon Simulation node, as well as a Merge node and a Carbon Collider node as shown in the image below.


Add a basic DOP Network to the project and set it up with a Carbon Collider connected to a Carbon Simulation.

The Carbon Collider node, and all other Carbon nodes, are initialized with default values, some must be adjusted for every single model while others can be left unchanged, allowing for a fast and easy setup of a scene which can then be customized to fit a specific need.

Attach the geometry of the animated character to a Carbon Collider by specifying it in the SOP Path and the character geometry becomes visible.

Simulation Scale

Now it is necessary to adjust the Carbon Simulation parameters to the character. To get the simulation conditions comparable to real world conditions, it’s easiest to use SI (metric) units.

The Gravity is pre-set to 9.81 m/s^2, and in this example, the character has a size of 175 scene units. Using SI units means that the Carbon Simulation always expects size in meters; therefore the Scale parameter has to be set to 0.01, converting 175 scene units to 1.75 meters.


If the scale is not correctly set, then the Carbon Simulation simulation will not look right. In this specific case, if the default scale value was used instead, the clothes would appear to be too light and almost floating in space, as shown in the screenshot below.


As you can see, simulation scale not only affect the objects, but also the scene conditions, such as gravity. Here is a another simple example: you look at a jenga pile falling: It’s fast. Now, compare this to a falling building, it looks very slow because the point of view and scale are bigger.

Now, imagine an artist created a jenga pile, but with units that made it the scale of a building. Everything would look like in low gravity, slow falling. The obvious solution would be to scale down the whole scene including the camera position etc… and then get the right perception. But this would be very time consuming. In order to avoid this, we have the Simulation Scale parameter, which invert-scales all parameters that are length dependent such as gravity and density.


A non-adjusted Scale parameter will lead to an incorrect Carbon Simulation.

Adjusting The Collider

The next step is to adjust the Carbon Collider properties according to the type of character, the animation sequence and expected collisions.

Collision Properties

  1. Inner Fatness

    The Inner Fatness of a Carbon Collider is the attribute that adds volume to the object. The Inner Fatness is in scene units.

    An Inner Fatness of 0 automatically turns the collider into a double sided collider. An Inner Fatness greater than 0 describes a single sided collider. For the Avatar we want a single sided collider.

    The Inner Fatness is limited by the smallest feature such as a finger or a thin region that will interact with the cloth. The Inner Fatness should be no more than half the size of such a feature. Using larger values, e.g. an Inner Fatness of 5 with fingers of 2 units thick will lead to unwanted collisions as you can see in the screenshot below.


    A too large Inner Fatness will lead to unwanted collisions.

    Assuming that fingers have a radius of about 1 unit, it is safe to set the Inner Fatness to 1 for this tutorial.


    See also


  2. Outer Fatness

    The Outer Fatness is also in scene units. The Outer Fatness of the collider is not limited by the size of the triangles unless it is a deformable collider (a Carbon Morph as used for example in pinch mitigation). But it is important to remember that the real collision surface is at the Outer Fatness distance from the character mesh.

    Too big an Outer Fatness can result in a floating-like look of the cloths because the Outer Fatness acts like a buffer (see screenshot below).


    Too large values for the Outer Fatness act like a buffer.

    Also, a big Outer Fatness could result in pinching of the cloth even though the visible cloth mesh may not look pinched.

    In our case, we will use an Outer Fatness of 0.01.


    See also


  3. Filtering Gap

    The Carbon Collider provides a Filtering Gap parameter, which, when setting the value greater than 0, automatically turns on an internal collision analysis. At each frame of the simulation, it finds potential pinching situations between cloth and the collider and weakens the collision at these areas, which can be visualized using the Collision Analysis Geometry Guide.

    Remember that pinching can happen between animation frames (it is possible in Houdini to toggle off the Integer Frame Values from the Global Animation Option to check your animation between frames).

    The value of the filtering gap should be set to Filtering Gap = Cloth Thickness.

    If your scene setup contains multiple layers which can be pinched at the same time, set the filtering gap to the sum of the thickness values of those layers.

    The screenshot below shows the results of the Geometry Guide Collision Analysis with a Filtering Gap of 0.4. The red and blue areas mark the parts of the character that undergo pinching during the animation. These areas need to be observed carefully when introducing clothing as they could cause unwanted effects. In extreme cases of pinching, animators can use this information to adjust the animation to reduce pinching.


    Results of the Geometry Guide Collision Analysis.

    Regarding the simulation, the filtering gap can be utilized in two main ways. First, simply set the filtering gap parameter to your cloth thickness and run the simulation. This is the easiest way to avoid corruptions and run smooth simulations.


    Weakening collisions by using the Filtering Gap results in situations where the collider is penetrating through the cloth, which leads to potentially undesired visual effects.

    A second way to utilize the filtering gap is to once simulate the collider without any clothing. Then import the last frame of the simulation using a Numerion Carbon DOP Import node. It contains a point attribute analysis which stores the results of the filtering gap analysis. This parameter can then be used to either guide or directly set up the Goal Skin Strength of a Carbon Morph.

    Given the cut of the tank top in this tutorial, it is not necessary to use filtering, therefore revert the Filtering Gap to 0.

  4. Open And Non Manifold Edges

    Another important visualization feature provided in the Guide Geometry is the check for Open Edges (and Non Manifold Edges).


    Example of Open Edges detection .

    Open Edges and Non Manifold Edges should be avoided in all collision areas for single sided collision geometries, in order to avoid collision errors.

Collision Material

First, toggle off Animated Material. It’s good practice to leave this toggled off when not using animated parameters because it impacts performance. The Static Friction and Dynamic Friction are best set small (for example 0.3 for the Static Friction and 0.2 for the Dynamic Friction), to prevent the cloth from gripping too much to the character at the start.


See also


Creating The Cloth

It takes time and practice to fine-tune all parameters in order to achieve a certain behavior. We can use some values provided by fabric manufacturers in their online catalogs for a material we are interested in simulating and to guide the setup of a material.

In this tutorial, we will aim for cotton-like material for the skirt and the tank top.

Adding The Cloth Node

Once the collider is set up correctly, clothes can be added using Carbon Cloth nodes.

After creating the Carbon Cloth object node, set the geometry path (SOP Path) to the geometry object or SOP node of your choice.


Adding the skirt to the scene .

The Carbon Cloth Guide Geometry tools give you the ability to check your geometry for problems. Please use them to assure that there are no unwanted Open Edges. A double sided cloth can have many Open Edges and Non Manifold Edges, but if they are where they are not supposed to be, they can degrade the cloth simulation. Also if the Angular Quality and/or the Surface Quality of the cloth geometry are not good, again this will likely degrade the cloth simulation.


Open Edges should only appear on the borders of a piece of cloth.

Binding The Skirt

Given the current setup of the skirt, it will most likely not stay on the body as the hip movement is slowly shaking it off. In order to prevent this from happening, we can introduce a Carbon Binding which binds a Carbon Cloth to a Carbon Collider.


Skirt without (left) and with (right) Carbon Binding.

A Carbon Binding attaches a group of points to the closest position of the specified Carbon Collider.

The process involves 2 steps:

  1. Create a point group inside your skirt geometry object.


    Select points for the seam (left) and create a point group inside the skirt geometry (right).

  2. Create a Carbon Binding node inside your DOP Network which binds the point group to the Carbon Collider.


    Complete the Carbon Binding by setting the name of the Carbon Collider , the Carbon Cloth , and the point group.

Adjusting The Parameters

  1. Thickness

    The Thickness parameter describes the thickness of the material, e.g. a simple tank top is rather thin compared to a sweatshirt or a jumper.

    Carbon Cloth is a double sided object and only has outer Fatness which basically describes how thick your cloth material is on each side of its surface. The Thickness represents double the Fatness.

    For this example, we might be looking at a skirt with a Thickness of 0.4 scene units (equivalent to 4mm with the Scale we setup).



    It is best to not abuse big Thickness values as that can lead to reduced performance and can potentially make things worse when multi-layers of cloth get pinched.

    To avoid large Thickness causing self-collision issues, a computed inter-fatness is used internally for self-collision. The Carbon Cloth Guide Geometry Fatness Check shows in green the areas where half the Thickness is used as the Fatness value for self-collision, in orange where the local inter-fatness value is used instead, and in red the problem areas where the resulting inter-fatness value used is less than a quarter of the given Thickness.


    Test for Thickness = 0.4 (left) and Thickness = 1.0 (right).

    See also


  2. Density

    Set a value for Density that matches the density of the cloth in the real world in SI units. Remember that the density is mass per area, i.e. kg/m^2 when using SI units in Carbon. Searching the internet, e.g. fabric manufacturers’ online catalogs, for cotton density values will reveal a lot of different values measured in different units. Usually, the values for mass per area are stated in oz/yd^2 or g/m^2.

    For example 175 gsm (grams per square meter) translates to 0.175 kg/m^2 in SI units in Carbon. If the weight is in imperial units (oz/yd^2) then it needs to be converted to metric so for example 5.8 oz/yd^2 = 197 g/m^2 = 0.197 kg/m^2 in SI units in Carbon.

    For our custom cotton, we pick a value of 155 g/m^2 which translates to 0.155 kg/m^2.

  3. Stretch, Shear & Shrink

    The Stretch settings should be done in three major steps leading to the following values for the custom cloth:

    • Resistance

      Once the density is set, we need to find the Resistance that would roughly drape the cloth as desired. To get the value of the Resistance by trial and error, you must first deactivate all hard constraints (Stretch Factor and Shear Factor). This can be done by setting the Stretch Factor to a value of 5. (Please do not forget to reset these hard constraints to their original values once you have found a suitable value for the Resistance).


      Draping of the skirt for stretch Resistance values of 0.5 (left) and 45.85 (right).

      We pick a stretch Resistance of 45.85 for our skirt as it stops the skirt from stretching out from its own weight but does not make the cloth too tense.

    • Damping

      The Damping is a damping behavior parameter. A value between 0 and 1 corresponds to a wobbly fiber, a value of 1 is critically damped, and a value over 1 creates an over-damped behavior. A value between 2 to 4 will suffice to avoid stretch oscillations of the cloth as a network and provide a less springy behavior.

      We pick a Damping of 4 for our skirt because we want to simulate a non-elastic cotton skirt.

    • Stretch Factor, Shear Factor and Shrink Factor

      Stretch Factor constrains changes in area as well as changes in length of the edges.

      Shear Factor controls shearing which is a special case of stretching that guarantees area preservation. With shear, as the cloth is stretched in one direction it also shrinks in the other.

      Therefore, Stretch Factor and Shear Factor both influence the edge length constraints, but only stretching allows area changes. Both values are typically set between 1 and 2 and it is recommended that Stretch Factor is set to 1 unless the fabric being simulated is stretchy.

      Setting Stretch Factor and Shear Factor to 1 would mean that the fabric maintains its reference area and reference edge lengths no matter the deformations and that could be suitable for continuous materials such as leather.

      The Shrink Factor sets the edge elastic resting length, where for example a value of 0.8 would tell the edges to elastically reach 80% of their reference length.

      In this tutorial we use the default values for Stretch Factor, Shrink Factor, and Shear Factor.

  4. Bending

    Cloth behavior is often defined more by its bending/creasing properties than anything else. By changing the Angular Limit we limit the size of the creases that are possible. Here we set the Angular Limit to 60 to allow for some tighter creases.

    A value around 10 for Resistance produces very stiff material, such as jean fabric. On the other hand, values smaller than 1 (sometimes <0.1) are associated with fabrics like silk.

    The crease Damping can be set pretty high and we can exploit this resistance to motion to produce the feel of a heavy material.

    Yield and Plasticity parameters control the level of angular plasticity, which is crease persistence. For more information, please refer to the Angular Plasticity page as well as Examples.

    The process of setting those is similar to the one we just followed for the tretch.

    For our custom scene with the heavy cotton skirt, we can keep the default bend Resistance of 10 and should set the bend Damping quite high, e.g. 8; this results in a heavy cotton material.



    If you are not seeing the small creases you expect, then you can try decreasing the bend Resistance and Damping and/or increasing the number of Iterations to maybe 100 to see if the creasing is being held back by solver convergence. Increasing the number of Iterations will slow down your simulation.

  5. Pressure

    Pressure describes the force per area over a surface map, exercised by a virtual fluid. It needs to be used with care as it is an explicit force, thus inherently unstable.

    In this scenario, we do not want to apply any Pressure.


    See also

    Surface Pressure

  6. Energy Dissipation

    There are two parameters to help dissipate energy: Viscous Damping local to each cloth and the global simulation Damping.

    • Cloth Viscous Damping

      Viscous Damping controls the damping of a cloth node velocity relative to the inertial motion of the entire cloth.

      Strong Viscous Damping gives the cloth a sort of rigid body behavior.

      While Viscous Damping is good at reducing local momentum, it does not affect the linear and angular momentum of the cloth center of mass.

      For our custom cotton cloth, we will use a value of 10.


      See also

      Viscous Damping

    • Simulation Damping

      This global parameter is the last resort in killing the kinetic energy of the cloth. It is isotropic and applies to all dynamic objects in the scene.

      Setting Simulation Damping too high will make the cloth look like it is lagging behind the character animation.

      A value of 1 often improves the look of the cloth simulation by making it slightly less lively.



      • A Carbon Flow could also be used with drag coefficients to simulate dissipation in cloth/fluid interaction.
      • Carbon is not strong at dissipating energy due to its formulation. For heavily damped behaviors it is recommended to increase the simulation Iterations. A value of 50 to 100 is sometimes necessary to improve convergence.
  7. Friction

    Friction works the same as the collider friction parameters. Remember that in all collision pairs the smallest friction term from two objects is used in the computation.

    Cotton has a frictional ratio of about 0.4.


    See also


  8. Drag

    Shapes with a large apparent cross section exposed to the air flow and with a high drag coefficient will receive more drag than thinner ones.

    Since there will not be any Carbon Flow nodes in this tutorial, we do not need to set the Drag parameter.


    See also


Adding Another Cloth

Now that we have created a custom type of cotton cloth, we can add the tank top and assign the same parameters to it. The screenshot below shows the final setup and animation of our tutorial scene.


Final setup of the tutorial scene.

Simulation Parameters

This tutorial already talked about Simulation Scale and Simulation Damping.

There are two more Carbon Simulation parameters that need to be adjusted for every simulation.

Simulation Iterations and Simulation Subdivision.

Iterations The number of Simulation Iterations control the convergence, so the more iterations the better the convergence towards the problem solution. The convergence is directly impacted by the size of the problem, the mass ratios between objects interacting, the stiffness desired, etc… In other words, in a complex system it is impossible to tell how many iterations might be needed to converge at a given precision and it gets even worse considering that most problems end up over constrained locally by pinching or collisions singularities. So, we allow you to set a hard limit in number of iterations to balance processing time and convergence while avoiding systems iterating forever around a solution that might not even exist.

Subdivisions Simulation Subdivision is the number of substeps the simulation performs for each frame. Imagine you have a scene at 24 frames per second. So, if you set 10 subdivisions, then the physics solver will perform 10 substeps between each frame, interpolating the information internally to run at 240 Hertz (10 x 24 per second). So, the output is still at a frame every 1/24 seconds but the solver will run 10 solves per frame through substeps of 1/240 second. The number of subdivisions is very important because it controls the accuracy of the collision. If you have small / thin objects and fast motion, then you need higher number of subdivisions to better sample the time to avoid objects interpenetrating. The number of subdivisions is also very important to capture fast oscillations. The time sampling must be smaller than the frequency of the oscillation and the number of subdivisions is your friend in this case too. In summary, any simulation error is relative to the simulation time step (time step = frame step / subdivisions). So, either reducing the frame step or increasing the number of subdivisions will increase precision.

Iterations & Subdivisions Relationship The number of iterations and the number of subdivisions also combine. For example, imagine a simulation using 10 subdivisions but also needing 50 iterations to converge as desired. The same problem with a setting of 20 subdivisions might only need 20 iterations or less to reach the desired convergence while increasing the accuracy of a problem that struggled to converge. The computation time in both cases is roughly the same since the physics will execute 500 solver steps with 10 collision detections in the first case and 400 solver steps with 20 collision detections in the second case.

Convergence The Carbon solver is an iterative solver, meaning that during each simulated frame, it will run a fixed number of iterations towards the “correct” physical solution. The larger the constraints network (i.e. number of triangles/quads), the longer it will take any iterative solver to reach a converged state. This means that with a fixed number of iterations/subdivisions, we will almost never reach a converged state, because most problems are too large.


Once we have something that looks pretty good we could see if we can improve on that for the final result by changing the number of Iterations for the Carbon Simulation to e.g. 100. This could result in a better damping behavior and different creasing from improved convergence.

Naturally, this comes at a performance cost, the time needed for higher-quality simulations increases more than threefold for this example.


Comparison of the results for Iterations = 10 (left) and Iterations = 100 (right).