Move Armature Rig into Pose Position

Here is the rigged model in object mode on its pose position. The rig was done with the Auto Rig Pro addon.


And here are what I presume to be the deform bones as they appear on the edit mode of the armature, displayed as if the model where on its rest position.

If I apply the armature modifier, the mesh`s real geometry adheres to the pose position.

If I then reassign the armature modifier, the already deformed mesh gets deformed a second time, which produces an undesirable result:

https://www.dropbox.com/s/sj5c8y7bc8ov09h/Gen%208%20Basic%20Male%20Test%2010.blend?dl=0

Any idea on how to bypass this issue without having to rig the character again? I suppose I would have to move all of the relevant parts of the rig into the pose position that the model has been previously baked in and then somehow tell Blender that that is the new rest pose, so that it does not attempt to deform the mesh again on top of the deformation that was already performed. I have tried doing exactly this by moving bones in edit mode, but the result was simply a stretched mess. I do not have enough knowledge of how this rig is built to be able to edit it beyond trial and error. (Edit: this method works by copying the armature modifier, applying the original, selecting the rig, going into pose mode and then Pose : Apply : Apply Pose as Rest Pose, but you lose both the original rest pose, of course, and all of the poses on the pose library that had to do with the moved bones, either by becoming ineffective or by deforming the mesh incorrectly. You can see it done here. But an ideal workflow would preserve the original rest pose and, consequently, the pose library also.)

The context here is trying to export a posed mesh into Zbrush, sculpt it there, bring it back into Blender, and then reassign the armature modifier after transferring weight data. It is easy to do so working with a mesh in rest pose, but everything complicates when trying to handle a posed mesh whilst preserving the ability to further edit the pose via the armature.

What do you mean by reassign? Did you first clear the parenting and apply the modifiers?

You can apply your pose to a new rest-pose (strg-a), but bevor you have to check if all relevant bones are selected, you may have to activate all armature-layers in the armatureTab.

By reassign I mean adding the armature modifier again into the mesh on the properties editor and then selecting the rig on the “Object:” input box.


I have just tried to clear the parent of the mesh first, but it appears not to influence the behavior. If you mean clearing the parenting of the bones or the rig as whole, you would have to point which specific part so that I can try.

It’s just how an armature works. That’s why you have to place bones correctly, based on the way the mesh is shaped. If the mesh changes shape, as with applying an armature modifier, then the bones need to be moved to new, appropriate places.

For simpler rigs, you can use ctrl a -> apply to rest pose to reposition the rig to how you’ve posed it. If you apply the armature modifier, apply as rest pose, and then recreate the armature modifier, the bones will be in the right places for the model’s new shape.

But with more complicated rigs, applying to rest pose isn’t necessarily so easy, because constraints can be tuned to angles and dimensions built into the rest pose, and apply as rest pose doesn’t change those constraints, only bone positions. (A good example is a stretch-to constraint, which has a set rest length, rather than reading it from your bone’s rest length-- if the bone changes size, the constraint will need to be adjusted.)

I’m not familiar with auto-rig pro. But I’d suspect that any rig that justified making an add-on would have these kinds of constraints that required adjusting.

In typing this late night I forgot to mention that I was trying to preserve the rest position in order to preserve also the pose library. I added an edit to the paragraph after the dropbox link:

(Edit: this method works by copying the armature modifier, applying the original, selecting the rig, going into pose mode and then Pose : Apply : Apply Pose as Rest Pose, but you lose both the original rest pose, of course, and all of the poses on the pose library that had to do with the moved bones, either by becoming ineffective or by deforming the mesh incorrectly. You can see it done here. But an ideal workflow would preserve the original rest pose and, consequently, the pose library also.)

I have no idea why you want to change the rest pose of the mesh, without changing the rest pose of the armature, and still have them work together-- that really doesn’t make any sense to me.

If you want, before you apply as rest pose, duplicate your armature beforehand. Afterwards, give the bones copy transform constraints targeting the bones in the duplicate. Then, alt-g alt-r alt-s gives you a “rest” pose like you originally had (but it’s not really the rest pose), and any animation data on the duplicated armature will be interpreted in the same old local axes.

But again, I can see absolutely no reason to want to do that, and I have a feeling if you say why you want that to happen, people might be able to say, “Oh, just do it this way, not that way.”

1 Like

Yes, this is likely asking too much of the software.

I have tried describing the why in the last paragraph, but I presume it was not clear enough: “The context here is trying to export a posed mesh into Zbrush, sculpt it there, bring it back into Blender, and then reassign the armature modifier after transferring weight data.”

To clarify:

The idea was to perform the following workflow:

  1. Pose rigged character in Blender.
  2. Export it into Zbrush, sculpt it altering vertex count (Sculptris Pro, Dynamesh, etc).
  3. Import it back into Blender.
  4. Transfer weights of original mesh into new mesh.
  5. The difficult part, possibly not doable: Use existing previously posed rig on new mesh - - in a manner that Blender associates the mesh’s current position with the rig`s pose position, instead of its rest position - -. This would avoid double deformations and preserve the rest pose, which would in turn preserve the pose library.

I will take a look at what you suggest on the second paragraph.

You want to sculpt on a posed character, is that right?

It would be best to sculpt on an unposed character, if you can get away with it (although if you’re doing something like corrective shapekeys, I can see how you’d need a posed character.)

What I was saying before, with copying transforms from a duplicate armature, would work. If you’re not using “preserve volume” you’ll get some (additive) volume loss from the transformations though. (“Preserve volume” might lead to some copy-of-copy noise as well, I’m just not sure, don’t know well enough how quaternion skinning works.)

If you can stand Blender sculpting, you can sculpt an armature deformed model in Blender.

You might also look at the corrective shapekeys addon, which basically does what I’m saying but automates some of it-- it deforms a model into a posed position for the purposes of creating shapekeys or other edits, then undeforms it. I’m not very familiar with that addon, but I wouldn’t be surprised if there was some way to intercept it in the middle of its processes for a Z-brush export/import cycle.

I have only a vague notion of how constrains work, so i would need a more detailed step by step. I had to reverse engineer what I could extract and order it in a way that made sense to me, so here is what I am interpreting from the method that you suggest:

  1. Duplicate armature.
  2. Apply pose as rest pose on original armature. Its rest pose now conforms to the mesh’s pose.
  3. Revert duplicate to rest position in pose mode (alt-g alt-r alt-s).
  4. Add armature modifier to posed mesh and select original armature as object.
  5. Add copy transforms on original armature to target duplicated armature. Both original armature and its underlying mesh now conform to the first rest pose, typically an A or T stance, while still being on their own pose position.
  6. Hide original armature and pose duplicated armature as if it was the original, so that the original will follow what the duplicate is doing. This would preserve the pose library functionality, as it remained intact on the duplicate.

The roadblock is then how to set up the constraints. Are you referring to object constraints or bone constraints? I suppose the latter, because the first would only be applied at the level of the whole rig, which does not alter the position of individual bones, but merely snaps the whole thing to the same transforms. With bone constraints, however, there is the simple problem of quantity; unless there is an automatic way to assign constraints based on matching names or something like that, I would have to add the copy rotation modifier bone by bone. This is more laborious than rigging the mesh again with Auto Rig Pro, so it defeats the purpose here.

You understand. It is laborious, unless you feel like scripting it.