How to scale a bone without affecting it's children?

Hi,

Is there a way to scale a bone without affecting it’s child bones?
When applying a Transform (Modify) Bone, it affects it’s child bones, they are scaled too.

Thank you.

Did you find a solution to this?

I’m also interested in this. Any workable solution?

you can use a blueprint or a script when you change the size of the object get all the first child set the size to 1,1,1 ore what ever size you use .

hope this helps you :slight_smile:

Unfortunately, setting the child bone’s scale to 1,1,1 will not affect it at all. You’ll need to set its scale to 1/(parent’s scale) to combat the changes you’re making up the chain. If you are affecting lots of bones in a long chain, each will have to figure out all of its parent’s scales and account for them before they can set their own.

1 Like

How possible after YEARS nobody found a solution for this?

I think all of that guys forgot this problem, but finally I find out the solution.

  1. create a control rig BP(Blueprint) and an AnimInterface BP

  2. In ABP Anim Graph create a control rig node and set the CRBP which just created, then connect the input pose and output

  3. In CRBP, create “Set Transform - Bone” node, and most important thing is, uncheck the property “Propagate to Children” !!!

1 Like

Because it’s kinda like asking “is there a way to make 1+1 be something other than 2?”

The way to scale only the geometry that’s affected by a particular bone, without affecting children of that bone, is one of three ways:

  1. You could build a morph target (blend target) that does the inflation/scaling, instead of a bone. This affects particular vertices, in the space of the bind pose.
  2. You could counter-scall each child with the scale of 1/scale, when you scale the bone by scale. This is most applicable when you can’t improve the source asset.
  3. You can create a new bone that’s a child of the bone you want to scale, but that no other bone is a child of. Make this child bone have an identity position/rotation/scale, so it’s essentially a “copy” of the parent bone. For all vertices currently bound to the parent bone, bind them to this child bone instead. When you scale this child bone, only its contribution to vertices will be affected, not any other child of that parent.

Now, it may be that in particular cases, you can finesse it. For example, when you calculate the pose, each output bone matrix can be separate affected AFTER all the children are computed. This doesn’t “scale the bone,” as much as it “scales a particular application of the bone.” Sometimes, that’s good enough. But, also, beware that the effect may be applied in a different coordinate space, so if the scale is not uniform, it may not look the same.

Can you give details in how to do that?
It scales the childs too.

  1. You could build a morph target (blend target) that does the inflation/scaling, instead of a bone. This affects particular vertices, in the space of the bind pose.

  2. Needs external software, the solution doesn’t apply to Unreal Engine at all.

  3. You could counter-scall each child with the scale of 1/scale, when you scale the bone by scale. This is most applicable when you can’t improve the source asset.

  4. Once scaled the parent, the child will lose the original position, which makes IMPOSSIBLE to be a good result. (Tested from AnimBP and Control Rig too.)

  5. You can create a new bone that’s a child of the bone you want to scale, but that no other bone is a child of. Make this child bone have an identity position/rotation/scale, so it’s essentially a “copy” of the parent bone. For all vertices currently bound to the parent bone, bind them to this child bone instead. When you scale this child bone, only its contribution to vertices will be affected, not any other child of that parent.

  6. Needs one more time external software, the solution doesn’t apply to Unreal Engine at all.

The main objective here is being able to hide a bone without getting weird glitches.

I don’t understand the comment “doesn’t apply to Unreal Engine.”
To develop art that behaves the way you expect, you need to develop art.
Developing art, requires some kind of digital content creation tool.
In general, you can export assets from Unreal to a FBX file, and then load that into Maya or Blender or whatever your tool of choice is.

Unreal Engine has slowly added a few art creation tools inside the editor, but they’ve mainly focused on animating ready-made rigs/skeletons, building materials, and building static geometry meshes.

So, if you want the outcome that’s requested above, you’re going to have to update your art. If your art is a skinned mesh, you’re going to have to do that in Maya or Blender or something else. There’s no way around that.

Doesn’t apply means: “Can’t be done from Unreal Engine”.
I can’t edit the skeleton, since the one I’m using is an industry standard, otherwise in this project +300 assets will need to be edited\tweaked too.

Welcome to game development, where certain things require a lot of work to do!

I don’t really understand what “hide a bone” really means. Most geometry is skinned to more than one bone. Even when there’s only a single bone weighted, some triangles will be made up of vertices that are weighted to different bones.

If you have attachments that are weighted only to a single bone, then those might as well be static meshes, and you could “hide” them by marking them not rendered.

If you want to hide certain areas of a skinned mesh, you can also draw the mesh in cutout (masked, alpha-tested) mode, and paint in a texture that masks out certain parts of the mesh.

But, in general – in game development, you sometimes have to apply some change to 300, or 3000 assets. And sometimes, the cost of making such a change is too large, and you end up not able to implement the feature you wanted. But, before you reach that point, you first need to be precise about what “hide a bone” really means, because for a typical skinned mesh, this doesn’t really make sense as a concept.

You can use c++ to split the mesh, sever the bone, do whatever transform, and re-attach the bone.

And your quip for #2 makes 0 sense.
Further reply and the implication you would need to edit the actual asset makes even less sense.

Add bone modifiers to your animation blueprint. See how they work.
Propagating/not propagating was a somewhat recent addition (2020 or so).
You don’t even have a need to loop the chain to reduce the other bones anymore.

You are honestly just both off topic and overcomplicating the topic for the next poor sap dragged in from a google search…

Though one thing is true: 300 meshes is nothing. If one is scared to edit stuff because 300 is a lot, then perhaps hire someone specifically for the purpose… lots of potentially jobless artists out there that can probably do the edit in less than an hour…

1 Like

Solved separating material slots for the base skeletal mesh, leaving the bone structure intact, then applying a transparent masked material.

I found the answer! My version is ue 5.3.

  1. Create a ,Blend mask, in the mesh or skeleton editor. Assign index 1 to the desired bone.

  2. In AnimBP make a blend with a mask and transform the desired bone through Transform bone and check the boxes as in the photo against Mesh Space Scale Blend.

  3. After that, everything should work!!!

1 Like

HERO!

I’m far away from the UE Forums, if you get trouble can send me the mail: daosuiban@gmail.com

  1. create a control rig BP(Blueprint) and an AnimInterface BP

  2. In ABP Anim Graph create a control rig node and set the CRBP which just created, then connect the input pose and output

  3. In CRBP, create “Set Transform - Bone” node, and most important thing is, uncheck the property “Propagate to Children” !!!