1
$\begingroup$

I have an armature for deforming a mesh, using a solution in this question, but when it is posing, the faces get distorted. I don't understand exactly why or how to fix it.

Here is the rest pose:

Rest pose

I assigned vertex groups for the bones to control the popup (the green mesh). As the book closes, the popup folds and the faces get distorted like this:

Distorted popup faces

The popup has two faces, one bone crossing each face. Notice the circled part -- one of the popup faces is being divided and half is bending. I really want the vertices to stay co-planar. Do I need additional bones, constraints, or what?

Update: I found another way to achieve this effect by using drivers instead of bones.

Start by separting the book and popup meshes into left/right objects. Set the object origins so that rotation works along the book binding and popup bottoms (where they attach to a book page). Then parent the left popup to the left page, and likewise for the right hand side.

The idea is that the left page opens/closes by rotating on the Y axis. And the popups rotate up/down according to the book open/close angle.

The popup rotation depends on only two factors: 1) the book rotation, and 2) the offset angle of the popup, i.e. how "canted" it is (20 degrees in this example). The offset angle is a constant, and the book rotation depends on the animation.

Implement the popup rotation via a driver and a python script. The formula is messy (at least I found it to be so). I'm happy to share details, if there is any interest.

$\endgroup$
1
  • $\begingroup$ "I'm happy to share details, if there is any interest." Suggest that if you have an alternate answer to your question, add as an answer, not as an edit to question. $\endgroup$
    – batFINGER
    Commented Feb 14, 2021 at 14:38

1 Answer 1

1
$\begingroup$

You want to control the bone roll (Y axis rotation) of the pop-up bones. This is done most easily with a locked track constraint. Unfortunately, constraints don't play nicely with IK. But it's entirely possible to make it work, using an additional bone.

Start by entering edit mode on Armature Popup. Start by selecting the head of Popup_Center and snapping the cursor to selection (shift s menu for me.) Now, select Popup_L and duplicate it. We'll rename that bone to defPopup_L. Now, with defPopup_L selected, recalculate roll to cursor (ctrl n menu for me.) Finally, parent defPopup_L to Popup_L.

Change to pose mode. Delete the (duplicated) IK constraint on defPopup_L. Give it a locked track constraint, targeting the head of Popup_Center, set to Lock Y axis and Track Z axis (recalculating the roll set the Z axis to point at the cursor.)

Finally, set your mesh object (chiclepopup) to use this new bone instead, by renaming the Popup_L vertex group to defPopup_L.

Repeat this process for Popup_R if you'd like: duplicate it, parent the duplicate to the original, set the roll with a recalculate operation, give it a locked track constraint instead of IK, with appropriate settings, and make sure your mesh is using your new bone for deformation.

enter image description here

$\endgroup$
2
  • $\begingroup$ Thanks for your thorough answer! I will take a little time to implement it and report back. $\endgroup$
    – stav_nan
    Commented Feb 8, 2021 at 17:07
  • $\begingroup$ This is brilliant, and it taught me new things! $\endgroup$
    – stav_nan
    Commented Feb 14, 2021 at 13:04

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .