Goals
Squash and Stretch
I want to implement a non-physics based deformation technique that is more general than
scaling the three coordinate axes. The deformation technique that I will implement will
work for objects that can be approximated by a medial axis, for example spheres and cylinders.
This deformation technique will be used to simulate squash and stretch by constraining the
orientation of the object so that it's medial axis is in the same direction as the object's velocity.
The deformed medial axis will be represented by an interpolating cubic Hermite curve. The center point
will be the objects current position. The end points will be based off of the object's previous and
next position and velocity.
Once the deformed medial axis is defined a space warp must be constructed to deform the object. Every point
on the medial axis (Hermite curve) not only has a position but also a local frame defined by the
three normal vectors T, N, B, where T is in the direction of the derivative of the curve. If the
radius of the object is constant, then N and B are in the normal to T and these vectors are orthonormal.
In order to implement this in general I will have to generate the medial axis and the radius along that
axis for a poligonal model. I also want to be able to effect the deformation with an object variable
saying how deformable the object is. A scheme must also be developed smoothly transition between
stretching, squashing, and during squashing to re-orient the object in the new direction of travel. Also
the jacobian of this space warp needs to be found so that the correct normals can be recomputed.
View Depenedant Warping
My idea here is to take as input a realistic 3D scene like a town. Then I want to automatically
generate a FFD deformation of each object based on where it is in relation to the viewing direction.
THe goal of this deformation is to make the scene/object look more "cartoony". This will involve
determining some heuristics, which will be pseudo random and based on the objects position w.r.t. the
viewing direction. While the effects are random, there must be frame by frame coherence.
What's done
Squash and Stretch
I Considered a cylindrical object oriented along the positive z axis from z=0 to z=1. Its medial axis is (0,0,0)->(0,0,1),
and T = (0,0,1), also let N = (0,1,0) and B = (0,0,1). At time t there is a T', N', and B'.
The space warp is defined by:
X' = curve(z) + y * yScale * N' + x * xScale * B'
Where xScale = yScale = sqrt( orignal_arc_length / new_arc_length). This makes it so that the volume
is conserved.
In the series of images below the motion of the cylinder was generated by hand, so the deformation
is not based on the object's velocity.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
What's left
Squash and Stretch
Future Work