1
$\begingroup$

I have a rigged model of a human right arm - https://drive.google.com/file/d/11F8P9zs4Fdkb_hYBB_QHxgYF3PR_LqPa/view?usp=sharing

enter image description here

Loaded into my three.js application:

enter image description here

I'm not looking to symmetrize this model or create a mirror duplicate. I'm trying to convert the entire model along with its bones and mesh so it resembles a human's left arm instead.

I'm new to blender, I first tried flipping the armature across the global x axis in object mode and the result looks correct in blender:

enter image description here

but when I import this back into my application scene, it seems like something still isn't correct?:

enter image description here

However, I do not believe that is an issue with three.js

I also looked up various tutorials which instructed me to change the suffixes of bones from "Right" to "Left", mirror the mesh, add mirror modifiers, check x axis mirror, update bone directions, etc... and these options produce the same results?

Can someone help figure what else I'm missing?

$\endgroup$
2
  • 1
    $\begingroup$ Select both object and apply the scale (Ctrl+A) in Object mode. This will flip the normals on the mesh, so go to Edit Mode (of the mesh), select everything then use Mesh>>Normals>>Flip. $\endgroup$
    – FFeller
    Sep 4, 2021 at 5:57
  • $\begingroup$ @FFeller So I selected the bone group and the mesh, went into object mode, clicked apply scale. Then I selected just the mesh, selected everything, and then tried to flip the normals but I got the error "could not create merged face." I also tried this with recalculating the inside and outside normals? $\endgroup$
    – Ietpt123
    Sep 4, 2021 at 7:19

1 Answer 1

2
$\begingroup$

Your mesh is fine. But the bone orientation is wrong. All bones stick out of the mesh but they should be inside. And there are too many bones for the thumb. You need to fix this first or you have a hard time animating this.

Bone Layout

Your bone layout:

your bone layout

Good bone layout (Rigify meta rig):

good bone layout

Renaming the Bones

When you fixed this, give all bones the .R suffix in their names. (_R, _Right or ´.right` work, too). This can be done with the batch rename Ctrl+F2:

  • find: ^(.*)$
  • replace: \1.R
  • choose type bones and activate the regex operations * as shown here

Mirroring the Bones

Blender mirrors objects at their origin. That's the little orange dot. Because the origin is in the center of your mesh and armature they will be mirrored in the middle.

In Object mode, Switch to front view with Numpad 1 (or menu: View > Viewpoint > Front), and move the armature to the left. Then apply the Location with Ctrl+A > Location. This will move the origin to the world origin.

Switch to Edit mode, and choose the menu entry Armature > Symmetrize. This will copy all "right" bones and make them "left" bones. The suffix will change automatically (.R <-> .L or _Right <-> _Left):

symmetrize the bones
(Bone layout is still wrong)

Mirroring the Hand Mesh

In Object mode, just select the mesh, apply the Location with Ctrl+A > Location, add a Mirror modifier, move it to the top of the stack and apply it.

Note: If you want to keep your weight paint then don't apply the mirror modifier yet. Parent the mesh to the armature first with Ctrl+P > With Empty Groups. This will create the vertex groups for the left bones. Then apply the mirror modifier. It will fill them when the option Mirror modifier > Data > Vertex Groups is selected (default).

mirrored mesh

Weight Paint

In Object mode, select the mesh and then the armature (must be the active object, selected last). Parent them Ctrl+P > With Automatic Weights.

Test the armature in the Pose mode.

$\endgroup$
4
  • $\begingroup$ Wow this is an amazing tutorial thank you! As far as the bone orientation goes, this isn’t my model, this is a downloadable model from a company called leap motion. I did notice the bones were not orientated normally as well. I think the reason for this may be when you move a specific bone in blender, because of its unusual orientation and relation to parent bones, it causes the parent bones to curve in what seems a more natural way than if the bones were oriented in the standard way? $\endgroup$
    – Ietpt123
    Sep 4, 2021 at 19:33
  • $\begingroup$ Ah, I see. I've already wondered how you did the weight painting with this bone layout. Have you imported the model from an FBX or OBJ file? In the import dialog, there is an option (Armature > [X] Automatic Bone Orientation) at the right bottom. Enable this checkbox and see if it helps. Blender tries to rotate the bones properly. Just to clarify, the rig works as it is. But the layout will give you a headache because when the bones will be rotated then it's hard to see which one is which one & how the hand is deformed when you hide the mesh for a moment. Also Automatic Weights won't work. $\endgroup$
    – Blunder
    Sep 4, 2021 at 19:47
  • $\begingroup$ Yes it was actually an imported FBX, I just tried that and it looks like it does help! The bones along the arm seem to be misaligned slightly from head to tail and of course the extra bones are still there but that definitely saves some time! I was experimenting with manually moving each head to tail so this is a nice trick. And yes, rotating the bones with JavaScript seemed to produce the desired effects regardless, so it wasn’t a problem for me but the consequences of that are good to know. Thank you again for your help! $\endgroup$
    – Ietpt123
    Sep 4, 2021 at 19:53
  • $\begingroup$ Thank you for the answer, it put me on the right track. I also had a rigged and weighted left hand for leap motion that I wanted to mirror. I was able to do it without reparenting/re-weighting the rig. I duplicated the hand (rig and mesh), symmetrized the Armature (with correct naming scheme), then I scaled the mesh in Edit mode to -1 on the X-Axis and recalculated the normals. Then all I had to do is to rename the Vertex Groups - switching R for L. Delete the Left bones. And yes the Leap expects these strangely rotated bones - maybe because of different coordinate systems Blender vs. Unity $\endgroup$
    – mbbmbbmm
    10 hours ago

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.