Simulating Cloth
Key to the "Gertie, Interrupted" is a simulation of curtains in the window of one of the set pieces.  The following is a description of the Michael's implementation of cloth for this part of the feature.
 The green vertical and horizontal rows in this image represent springs connecting masses (grey).  The stiffness associated with these green springs relate directly to the stretch in a piece of cloth.  The orange diagonals represent springs connecting diagonally adjacent masses.  The stiffness of these springs relates to the shear of the cloth.

Mass
Cloths have a variety of densities from the heaviest carpet to the lightest silk.  Representing a continuous piece of cloth by a membrane or parametric surface would be beyond the scope of this animation project, so we instead lump the mass of regions of the cloth into point masses and connect them by springs.  These masses will be subject to Newton's laws with forces being applied by springs, gravity, air density, and air pressure.

The mass of each is simply the product of the density and one-fourth the area of the cells surrounding the given mass.  Note: this simplification does not look as bad as it sounds once a cubic surface is fit through the mass locations.

The point masses are represented in the simulation by three arrays of points.  These arrays hold the positions of the masses for the previous, current, and next time steps.

The physical effects of the threads in a piece of cloth can be approximated by simulating the forces of springs connecting our point masses in a mesh-like structure as shown on the left.  We simulate the warp and weft threads of the cloth with vertical and horizontal spring forces respectively.  The interaction of the warp and weft threads under loads that would change the orthogonality of these warp and weft is simulated by diagonal spring forces connecting diagonally adjacent masses.

Each spring is assumed to have a nominal length that depends on its orientation in the mesh.  The forces acting between masses are computed by measuring the distance between a subject mass and each of its neighbors.  The difference between this distance and the nominal length of the spring connecting these masses is multiplied by the appropriate spring constant.

This model is still incomplete, we still need a way to simulate the (typically very low) resistance of the threads to bending.

 This image shows a subset of the cloth system in the neighborhood of one mass (shear springs omitted for clarity.)  The red line represents a pair of springs pulling the center mass toward the average position of the vertically and horizontally adjacent masses.  The stiffness of this spring relates to the bending resistance of the threads in the cloth.
Warp and Weft Threads in Bending
The threads in cloth exhibit a resistance to bending, as evidenced by the rounded appearance of folds in the clothing you wear.  This resistance to bending is simulated by spring forces that attempt to keep the structure of the cloth flat.  Locally, the cloth simulation attempts to maintain the flatness of the structure by applying a flattening force computed by comparing a given mass's position pi,j to the average position of its neighbors; multiplying this by the bending spring constant kbend something like:
fflatten=0.25kbend(pi-1,j+pi+1,j+pi,j-1+pi,j+1-4pi,j)
Even this model is incomplete, since there will be both air resistance to the movement of the cloth, as well as internal damping within the cloth fibers.

Damping
To more accurately simulate real cloth, and promote numerical stability, the friction effects of air and the damping of the spring forces are simulated with a generalized damping force.  This force is proportional, and in a direction opposite, to the velocity of each point mass.

Euler Steps
The action of a spring under a time-varying force is modeled by the following equation:
(1)
In the simulation, we store only the position information for each mass at the previous two time steps and use this to compute the motion of the mass at the current time step.  The velocity of each mass is approximated by:
(2)
And the acceleration is approximated by:
(3)
Substituting (2) and (3) into (1) we get:
where fi is the sum of the forces acting on the subject mass.  Rolling the kxi term into the applied forces, and solving for xi, we get:
By using a sufficiently small time steps, we march the simulation forward, computing new positions for the masses at any future time.  The current implementation uses a time step of 0.001 seconds.

This method of explicitly computing the next state of the masses based on their current state is known as an Euler step. The method is very sensitive to the step size, so we must use small steps resulting in a slow simulation. For our purposes, though, this simple approach is fine- we'll simply output the mass positions at the appropriate time step and allow Maya to interpolate them over time. We justify the extra running time in terms of the savings in projected development and debugging time required to implement cloth using the recommended implicit method.

The Software
We can use a coarse mesh to simulate the behavior of the cloth, and export the result to Maya in the form of a script that creates a cubic spline surface and keyframes the control vertices based on the positions of the point masses.  The result is a very convincing simulation of cloth.