Maya: Rigging a book

I’m playing around with trying to rig a book, and my main challenge turned out to be the one I thought would be the easiest.

So the thing I struggle with is the pages, my first though was that the pages could just be rotated, and then get it’s “dynamic look” driven with a bend-deformer. However when I actually tried to do this, it occured to me that I can’t rotate the pages at all, because the base of each individual page will have to bend relative to which position it has in the book, and relative to the “spine” of the book (all of the pages is constrained to this).

Lets say the book is placed on the grid with the front cover opened, if I then were to flip the first page over 180 degrees, it will have to bend (at the bottom) as the base of the book is unchanged. Ok, great… So what if I were to open the book from the middle, with half of the pages turned to the left, and the other half to the right.
This is how it looks with rotations:

So I thought I could just add a bend-deformer to each individual page, but as each page will have different bend relative to which index they have, this doesn’t work:

My third attempt was to have one bend-deformer placed at the first and last index’ position (affecting all pages), and this gets pretty close to what I want. However there’s two problems, the first one is that the length of the pages stretches based on how far it is from the bend-deformer. The second problem is that the page(s) farthest from the bend-deformer requires denser geometry because they get “translated” more than the pages closer to the deformer:

There’s definitely more challenges to this, but I don’t see any point on trying to tackle these before I get the most basic and fundamental challenge in place.
So first off, have anyone of you rigged a book successfully? If so, what kind of approach did you have on the pages?
Second, what do you think of the bend-deformer approach? Is there any clever way to deal with the scaling-problem and the “resolution problem”?
Third, any hints/tips/general suggestions is greatly appreciated :slight_smile:

I thought I could create curves where the pages are placed, apply bend-deformer, then turn on lock length on the curves and wire the curves to the pages. However it doesn’t look like lock length works, it’s overridden by deformers. It would be great if it was possible to lock the length of curves/geometry so that the bend-deformers couldn’t extend the length of the shapes. The only way I can think of to do this is to apply a splineIK to each curve, that way the joints wouldn’t stretch even if the curves stretched, the only problem is that it would be pretty heavy :confused:

You could use a lattice to bend the bottom parts of the pages. When the book opens it would deform the lattice and the lattice would bend the pages. That way you will get the bend you need depending on where the page is, closer to left or right cover.

Thanks raziel, it might be that I’ve misunderstood you, but I don’t see how that helps? If I were to apply one lattice to all of the pages, I would still need to place my bend on the first and last page and bend from that position, so I still get the resolution problem and the scale problem (the scale is better as I bend downwards, but still) :?:

Maybe I misunderstood you. :slight_smile: Anyway, what I was suggesting was to layer the lattice deformer on top of the bend in order to bend back parts of the rotated pages. One more thing I can suggest is to try and scale down the bend deformers handle and see if that helps.

Good luck with your project.

Ah yes, that could actually solve the problem with the papers having the same length, with a 2x2x2 lattice I could animate the top corner down, great tip, thankyou :slight_smile: Too bad it doesn’t fix the resolution-problem :p:

Actually, the reason I get problems with the resolution is partly because I’ve scaled down the bend-deformer. I’ve attached another image of the resolution-problem I get, it’s totally logical that I get this problem, but I just can’t wrap my head around how I can do this without having to have super-dense resolution on the papers.

So I’ve done some more testing, I thought I’d just go for the bend-deformer approach, and then just add enough resolution to the pages to counter the resolution-problem. However, even if this actually works, the UVs will mess up :frowning: This longer the paper(s) are from the deformer, the more stretching I get. I’ve uploaded another gif demonstrating the problem I get.

I’ve searched long and wide for a tutorial covering this, but the only one I found is this one. But he doesn’t use all of the pages, he “cheats” it by having some cubes to represent the pages. I want this to work with the actual pages.

Any bright minds that could shed some light on this? I’m totally lost here :sigh:

EDIT: There’s ONE thing that could solve my problem that I can think of, and that’s the ikSpline solution. Instead of deformer the pages directly I could use curves instead, and then apply a chain of joints with an ikSpline to each curve, that way the joints would maintain their length, however this will be a pretty heavy solution if I have many pages. So I was wondering, is there any way to “hack” the ikSpline solver to extract information without having actual joints? I don’t really know how that solver works under the hood, but in theory this should be possible, rigt?

Is this rigging for manual animator control ? Or are you going to drive this yourself?

Could you elaborate on that question Theodox?

i woud just rig 2 pages and a a control to scale in the vertices on either side towards the cover of the book (all joints)
then create an expression driven by an attribute that flaps up the single pages towards the other side
when a page has reached this side, hide it and put it back in its original position and from there unhide it so it can flap up again
and in the meantime you can thicken one side of the book showing that pages are added ( at least that is the easiest thing that comes to my mind)

Well, if you’re the only person working on it you can do things that you probably would not want to hand off to a line animator.

I was thinking you could represent each page as a pair of curves with their shapes driven by expressions. Make the curves longer than the pages and then use duplicate curves with an expression to maintain the correct lengths. Then loft or birail the curves to create the actual pages.

The main thing here is that you’d be doing all the animation with sliders, so it’ll be unpopular with animators :slight_smile: