Any idea how to scale a Custom Bone Rig?

Hi, I have got this Dinosaur Rig and I am trying to make it scalable using the Humanoids AutomaticScaling Values.

Heres my result…
https://gyazo.com/7495584c0b7875902a780c6350adfeaa

Scale Value set to 6:

Scale Value set to 0.4:

I believe this is happening because there are no RigAttachments to re-position the body parts as it is a Skinned/Bone rig… Is there any way to make those Bones re-position…?

1 Like

you could just scale it down with the mesh if it’s in a model. That’s much simpler.

That doesn’t work in a live game though as the Bones break for some reason.

Ohhh, then maybe it could be matched up with the mesh also scaling down? The bone rig won’t scale the mesh all by itself.

I was able to scale the whole model in a live game using Robloxes Scaling tool in Studio… I wish there was a way to replicate that because it works so smoothly. I tried a Model Scaling script but it breaks all the Motor6Ds and Welds.

Is there a possible way to lose the motor6ds and welds?

I’ll give it a shot. There are 4 Parts in the model.

  • The Main Body in which the bones morph.
  • Teeth
  • Eyes
  • RootPart in which the Bones are stored.

I was able to remove the Bones from RootPart and put them inside the MainBody… I will attempt the scaling again. Lets see if that works!

Follow up. I am having the exact same problem. It seems like the bones aren’t being Re-scaled with the Body when I modify the Humanoid Size Values.

I am unsure why it works fine when using Robloxes Scaling Tool though?
https://gyazo.com/74ab6cdc6f418d1ae896a365337a93a3

Roblox Scaling Tool:
https://gyazo.com/f86c2f4f60aef349edb02ffadb64f324

In conclusion, I have noticed the model is in fact getting larger but the bones are not scaling with it. That is why the model is getting squashed as it is trying to keep the original bone positions but the model is getting larger.

Yes, that’s the problem, is there some way to maybe scale bone positions? The scale tool somehow scales everything in a model, so there must be some way to do it.

1 Like

That’s what I am unsure about? The fact Roblox’s scaling tool works fine even during a Live Studio test is interesting… Perhaps it is possible?

Update: I found this post on the Forum. Skinned MeshPart Studio Beta - #294 by RobieTheCat

After testing this in a 0.2 wait loop, it seems to be working very well. This will have to do for now until Roblox adds a more efficient feature!
https://gyazo.com/47f1b07941827e5122a75c6dacc036da

1 Like

i may be dumb, but i have no idea how you made that script work

I figure this is better late than never as it seems still relevant… and hopefully someone else may find this useful. I corrected the parameter name, commented out part of the rotation line, and created the missing scaleVector from the scaleFactor. That got it to work for my use-case:

function scaleRecursive(meshPart, instance, scaleFactor)
	if instance:isA("Bone") then
		local scaleVector3 = Vector3.new(scaleFactor, scaleFactor, scaleFactor)
		-- move bone local translation to part space, scale xyz in part space, then move back to bone parent space
		local bone = instance
		local parentCFrame
		if (bone.Parent:IsA("Bone")) then -- parent can be either the MeshPart or another Bone
			parentCFrame = bone.Parent.WorldCFrame
		else
			parentCFrame = bone.Parent.CFrame
		end
		local parentInPartCFrame = meshPart.CFrame:Inverse() * parentCFrame
		local parentInPartRotationCFrame = parentInPartCFrame --[[->  parentInPartCFrame.Position --rotation only --]]
		local pivotOffsetInPartSpace = parentInPartRotationCFrame * bone.Position 
		local scaledPivotOffsetInPartSpace = pivotOffsetInPartSpace * scaleVector3
		local partToParentRotationCFrame = parentInPartRotationCFrame:inverse()  
		bone.Position = partToParentRotationCFrame * scaledPivotOffsetInPartSpace
	end
	local children = instance:GetChildren()
	for i = 1, #children do
		local child = children[i]
		scaleRecursive(meshPart, child, scaleFactor)
	end
end

print("Scaling Part and Bone hierarchy ...")
local scaleFactor = .67 -- edit this to your scale factor
local part = workspace.NEWTowel.Towel -- edit this to point to the MeshPart you are scaling
scaleRecursive(part, part, scaleFactor)
part.Size = Vector3.new(part.Size.x * scaleFactor, part.Size.y * scaleFactor, part.Size.z * scaleFactor)
print("Done.")

yeah thanks, i got it working, roblox ended up adding a model scale system a week later anyway.