FAQ: CUDA Cloth Collision Solver (CCCS)

A CUDA 10.0-compatible NVidia GPU is required for the CCCS to work. It is also very important that you ensure your GPU drivers are up-to-date (CCCS simulations may freeze on a CUDA 10.0-compatible GPU with out-of-date drivers). The solver does not have a CPU-fallback mode. If you do not have a CUDA 10.0-compatible GPU, the solver will not function on your machine (tyFlow will still load on your machine, but CCCS features will be unavailable). Furthermore, you must install the additional required DLL files (available on the main tyFlow download page) in order for the solver to function. The extra DLLs are required because NVidia has not yet released static versions of the Cublas and Cusparse libraries, which are utilized by the CCCS.

The CCCS is not necessarily deterministic (nor does it have a deterministic mode that you can enable). If you wish to render your simulation on multiple machines, you should first cache it out - otherwise the render result may be different on each machine. The easiest way to cache a tyFlow cloth simulation is to use an Export Particles operator in “tyCache” mode.

•  What is the CCCS?

As of version v0.16090, tyFlow has a robust, CUDA-accelerated, cloth collision solver (CCCS) which provides accurate collision resolution for cloth meshes in a simulation. Previously, cloth collisions had to be handled with Collision/Particle Physics operators, which could not resolve collisions very accurately (only vertex-face or vertex-vertex collisions were supported, not edge-edge collisions…so cloth meshes would tend to self-intersect or fall through sharp surfaces, etc).

The CCCS attempts to detect all intersections between applicable triangles of cloth meshes (self-intersections, inter-cloth intersections and cloth-object intersections, depending on Cloth Bind operator settings), and resolve them in a way that ensures no new intersections are introduced in the process.

•  How do I enable the CCCS?

Settings exist in the Cloth Bind operator to enable/disable aspects of the solver on a per-cloth basis. Also, scene objects added to Collision operators within applicable events will be automatically processed by the CCCS if object collisions are enabled for a particular cloth mesh.

•  Does the CCCS itself have any global settings?

The solver’s main settings can be found in the Particle Bind Solver rollout of a tyFlow object. More information about those settings can be found in the Particle Bind Solver section of this documentation.

•  Why is the surface of my cloth jittery when I enable CCCS?

This can happen if your simulation time step is too high. For best results with the CCCS, it’s generally a good idea to set your time step to at least 14 or lower. Thickness values that are very high can also result in jittering, but lowering the time step can help to alleviate this as well (or increasing repulsion iterations). Fast moving colliders can also cause jittering to occur, and the solution is once again to lower the time step. In fact, in almost all cases where CCCS artifacts are visible, lowering the time step is a viable solution.

•  I enabled the CCCS on a cloth mesh, so why do I still see intersections occurring?

If your cloth meshes are intersecting at the start frame of the simulation, this can prevent full collision resolution from ever occurring. Best results will be achieved when the first step of a simulation (that contains cloth) has no existing penetrations.

Furthermore, the CCCS assumes that cloth meshes are only ever moved with forces or changes to cloth particle velocities. Operators that directly modify particle positions (example: Spread operator, Object Bind operator in “sticky” mode, Find Target in “time” mode, etc) can violate that premise and cause un-resolvable intersections to occur.

Also, if the max collision steps parameter in the CCCS main settings is too low, and cloth meshes are sufficiently dense, not all collisions may be resolved. The easiest solution in this situation is to simply increase the max collision steps parameter in the CCCS main settings.

If max collision steps are too low and not all collisions could be resolved in the specified number of max steps, a warning will be printed to the MAXScript Listener while the simulation is running.

Finally, if collider objects (imported with a Collision operator) intersect with each other - especially while in motion - this can force cloth meshes into penetrating configurations that the CCCS cannot properly resolve.

As a general rule of thumb: if a time step starts with no intersections between cloth or collider objects, and enough collision steps are allowed, the CCCS will ensure that the time step will end with no new intersections introduced and the simulation will continue intersection-free. If this condition is satisfied for every frame of a simulation, no intersections will ever occur and the CCCS will have achieved its goal.

In some situations with densely layered cloth (many layers of cloth on top of each other in extremely close proximity), intersections can still occur due to floating point rounding errors. Since 3ds Max coordinates are single-precision, not double-precision, it’s possible to find yourself in a scenerio where all of the advice above still does not lead to an intersection-free result. If such a situation occurs, the best course of action is to increase Cloth thickness and increase the repulsions steps/multiplier. The floating point rounding errors typically show up during the Impact Zone phase of the solver, so if you take steps to prevent collisions from appearing before that point (by increasing repulsion fidelity), you will have a better chance at avoiding floating point errors during the IZ solve.

•  Does the CCCS support cloth tearing?

Cloth tearing can lead to problems in the CCCS due to small torn-triangle proximities potentially leading to divide-by-zero errors in the IZ solver. These issues should be fixed in future builds.

•  What do I do if my simulation froze after enabling CCCS?

The most common reason for a CCCS freeze is too many IZ iterations in a simulation with a very large number of difficult, simultaneous collisions that need to be resolved (intersecting colliders that push cloth into impossible positions is one way to cause this). Keep in mind that the simulation won’t actually be frozen, but if it’s trying to process hundreds of Impact Zones over hundreds of iterations, it will progress so slowly that it may seem as though it has frozen. Luckily, you can quickly break out of most heavy CCCS computations by holding Shift+ESC. The simulation will need to be refreshed after doing so, but at least you won’t need to terminate the 3ds Max process in order to cancel collision processing.