Sounds like a lot of work under the hood just to make it fast. Why is speed so important?

Cloth is one of those technologies where quantity has a direct impact on quality.  Consider these two cloth rigs:

The cloth on the left has very few vertices in its simulation, and as a consequence has very few places where it can bend.  The cloth on the right is the same size with the same settings but is made up of many more vertices, which means it has many more opportunities to bend and make folds.  And folds are where a large part of the visual payoff is.  But more vertices means more work that the cloth sim engine needs to do to, making it more expensive to simulate.  On top of this, the cloth still needs to be controllable; if you want to use it for clothing on a character, it needs to collide with the body of the character in enough detail to look realistic.  You also need constraints to prevent things like a cape flipping over the character’s head.  These costs go up as the number of vertices in the cloth increases, which is why it is critical that a cloth simulation engine be fast.

Does Shroud run on the GPU?

No, Shroud is a CPU-based technology.

In the modern computing environment, its  more important than ever to make the most effective use of all available resources.  Most developers find it more challenging to use all the processing power of the 4+ CPU cores in modern PC and console hardware than in maxing out the GPU of these same machines.  Most game engines spend a decent chunk of CPU time each frame making less work for the GPU (for examples look at Unreal Engine 3 and the Umbra middleware technology).

Shroud is able to get GPU-like performance out of the CPU, and make use of CPU cycles that might otherwise go unused.  This allows Shroud to deliver a consistent set of features and performance across the broadest possible range of hardware.  Shroud might run faster if it was on the GPU, but in practice running asynchronously on the CPU is less likely to have an impact on framerate for most developers.

What other benefits does the structured data format provide?

Besides Shroud’s industry-leading performance, having intimate knowledge about the internal structure of the cloth helps with modelling as well.  For example, lets say you’ve already set up your cloth rig with a lot of per-vertex data, but its too dense or not dense enough, so you want to change the number of verts in the model.  In other authoring environments, that might mean you would have to manually delete or add the extra vertices, and then set up all their per-vertex data again.  With Shroud Studio, you can specify the density you want, and Shroud Studio will automatically interpolate all the per-vertex settings across the new cloth rig, saving you from having to set them up all over again.  And this example is just scratching the surface.

What platforms does Shroud support?

Windows PC (32- and 64-bit), Mac OS X, Playstation 3 (PPU and SPU), Xbox 360, iOS 4+, Android

What makes Shroud different from other cloth sims?

The core simulation engine of Shroud requires that the simulation data be structured in a particular way so that it can make some key assumptions.  Since it is able to make these assumptions, Shroud is able to perform a high-quality soft-body solve on data with many complex constraints in a very short amount of time.  It also means that it can’t be used with just any old random cloth rig, it has to be formatted in a certain way.

So does that mean Shroud will only support cloth of a particular shape?

No,  Shroud supports cloth rigs of arbitrary shape; it just means making that shape requires a slightly different process than traditional 3D modelling techniques.  You can’t just take a random triangle soup of a mesh and turn all the edges into cloth ‘springs’.  Instead its best to start with a basic shape that is already in the correct format then add and subtract from it to get the shape you want, ensuring with each change that the necessary assumptions are preserved.  Shroud Studio was created to make this process easy and transparent to the user.