WarpSheet Version 1.0
If you would like to see this document in color, please click here.
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
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 O(n) in convergence, which proves to be an enormous increase in efficiency when the size of the grid becomes larger than 50x50.
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 u(x, y) to decrease with each iteration of the outermost loop (without Chebyshev Acceleration the error often grows by large factor before beginning to converge).
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>