WarpSheet Version 1.0

`If you would like to see this document in color, please click here.`

The concept of (2) can be easily extended to simulate the deformation of a rubber-like sheet. Imagine that the sheet is infinitely elastic, yet does not deform under it's own weight. Hence, the only place where the sheet is deformed is where there is a force applied to it.

We can simulate such a sheet to a specific resolution by modeling it as a grid **u** where **u(x, y)** represents the height of the sheet at position **(x, y)**. If we assume that the sheet is uniform with Dirichlet boundary conditions, we can approximate the derivatives in (2) to obtain the relation

Given (3) we can easily solve for the height at any given grid position as

We can simulate static forces on the sheet by fixing the value of **u(x, y)** to the maximum height of the closest object vertices in the scene. Once these forces have been set it is easy to warp the sheet by repeatedly applying (4) to every grid position until the desired degree of relaxation has been achieved.

While a simple triple-nested loop can adequately perform the task of relaxing the grid, the time for this method to achieve an asymptotic rate of convergence for a square grid of width **n** is **O(n^2)**, and hence very inefficient. A better method is available, that of ** Successive Overrelaxation** (SOR).

In SOR an ** overcorrection** is made to the change in the value of each grid point for each iteration of the outermost loop, in anticipation of future changes in that value. This method is

Besides increasing efficiency via SOR, an additional performance gain was achieved by employing a technique known as ** Chebyshev Acceleration**, which forces the norm of the error in

Even greater gains in performance could have been achieved by using ** Multigrid Methods**. However, while fairly straightforward in theory, these methods are extremely cumbersome to implement.

The user specifies the following parameters through the DX user interface:

Width [scalar] Width of grid in object-units (in the x-direction)

Length [scalar] Length of grid in object-units (in the y-direction)

Xresolution [integer] Number of positions along the grid width

Yresolution [integer] Number of positions along the grid length

Center [vector] Center of sheet in 3-space

Cutoff [scalar] Ignore points above (or below, depending on Warpmethod) Cutoff

Warp method [flag] 0 = Warp under objects, 1 = Warp over objects

The module returns a triangle mesh as a field of positions and connections.

It is important to experiment with the values of Xresolution and Yresolution. Varying these values will allow you to achieve different visual effects. In practice, the higher the resolutions, the "tighter" the sheet appears to stretch over the objects, and vice-versa. As an example, the three sheets below are identical except for having different resolutions.

I have also made available several other examples of sheet warping.

Many thanks as well to my good friend Greg Pass, the originator of the sheet modeling idea, and my co-conspirator in both the early research and the "it's a bug, not a spider" project.

IBM Corporation, Thomas J. Watson Research Center. *IBM Visualization Data Explorer Programmer's Reference*. Fourth Edition. 1993: International Business Machines Corporation.

WarpSheet is ©1995 Christopher Kline <ckline@acm.org>