I recently had to come up with a basic system for animating the pages of a book for a commercial, it didn’t need to do anything especially fancy, just something that wouldn’t explode if I needed to scale the whole model. In the end I went with a CrvDeform with some straightforward controls, pretty basic to be sure, but this method has since come in handy for a number of other things so I thought I’d share…
Open up a new scene, make sure you have the Model menu open (press 1) and start yourself off with a grid, this will be our page.
- Primitive > Polygon Mesh > Grid
- Length U = 9, Length V = 10
- Subdivisions U = 25, Subdivisions V = 2.
To ensure everything matches up nicely we’re extracting our deformer curve from the mesh itself
- select the central edges running in X
From the Create menu
- Curve > Extract From Edges
- Subdivision = 0
With this new curve still selected, again from the Create menu
- Curve > Fit On Curve
- Subdivision = 1
- Inputs > Delete
So what we’ve just done here is made a curve that matches up with our geometry, then, based on that one, a more simplified, second curve to use as our deformer. Give your curve and mesh some new names, I’m going with DeformerCrv and Page respectively. Now to setup the deformation,
- Select Page
In the Modify menu
- Deform > by Curve
- Select DeformerCrv
In the Curve Deform menu that opens
- Axis = X
- Translation Along Curve = 4.5
- Constraint > Constrain To Deformer > On
If you now move any of the points on DeformerCrv you should see the Page mesh deforming to match
This is all well and good, but we can’t keyframe these points, instead we have to setup up some clusters. Undo any translations you may have just made to the points on DeformerCrv so our page is nice and flat again.
- Select DeformerCrv
- Press T to see its points
- Select DeformerCrv.Point 1 (it should be second from the left)
- Edit > Create Cluster with Center
- Repeat for points 2 and LAST
You should now have a curve with three nulls along its length, each of these acts as a kind of intermediary allowing us to keyframe the translation of individual points on our curve.
We’ll now use circular curves to limit the page’s motion and to use as simple controls.
- Primitive > Curve > Circle
- Repeat 4 times
- Give the circles Radii of 9, 6, 3 and 1 respectively
- Snap each to DeformerCrv.Point 0
- From smallest to largest name the circles: Turn, Inner, Mid and Outer
You will notice that three of the circles intersect our cluster nulls
- Constrain > Parent each circle over its corresponding null
- Constrain > Parent Turn over Inner, Mid and Outer
- Select Turn, DeformerCrv and Page
- Edit > Model > New Model
Name the new model Page_1, your hierarchy should look like this:
For ease of use later on we’ll adjust this model’s centre point
- Select Page_1
- Constrain > ChldComp = On
- Center (from the Select menu)
- Snap the centre point to DeformerCrv.Point 0
At this stage it’s also a good idea to zero out any transforms so select everything (easiest way is to make sure you’re in Wireframe mode in your viewport and drag select)
- Transform > Set Neutral Pose
That’s us done, rotate the circles to control the page turn, Turn adjusts the overall page rotation while the others define the shape.
Here’s a little test animation I did using this setup, I just duplicated and offset the Page_1 model to make a very simple book.
Again, nothing overly advanced here but I’ve found this method useful in all sorts of situations where I’ve needed to control the shape of a curve and haven’t wanted to use shape animation or a bone setup. Hope someone finds it helpful. Crits and comments welcome.
best and logical among all that I have seen yet!
Cheers, glad you found it useful.
Great tutorial – thanks for taking the time to make it clear for us XSI novices. Learned a LOT.
Thanks for the comment Hal, glad you found it helpful. You’ve some great animation on your reel there.