New Body Type & Proportion Sliders for Humanoid

Overview

Roblox is introducing two new sliders to the avatar’s scale to control body shape and proportion: BodyTypeScale and BodyProportionScale. These values are used to control the overall shape of a character.
BodyTypeScale

BodyTypeScale is a NumberValue attached to Humanoid that controls how much the character is to be modified from a standard R15 body shape. When set to 0, the character appears as a standard R15. When set to 1, the character is taller and more slender.

The current maximum value for this factor is 0.3. We will be allowing higher values for this setting in the future when we confirm that visual and physical targets are working well.
BodyProportionScale

In addition to BodyTypeScale, BodyProportionScale determines the shape of the taller, more slender character. When set to 0, the body proportion is “wide,” taller, with broader shoulders. When set to 1, the body proportion is “narrow,” shorter with narrower shoulders.

Changes To Rig Attachments & Joint Creation

The joints of an R15 are built from attachments on parts. Each of the two parts that connects a joint has an attachment whose name ends in “RigAttachment” indicating that a joint is to be built between these parts. For example, both the UpperTorso and the RightUpperArm have an attachment called “RightShoulderRigAttachment.”

When the engine builds the rig (via Humanoid:BuildRigFromAttachments) it finds all the RigAttachment pairs and creates joints connecting their parts based on the location of the attachments.

Unlike the other scaling values (BodyHeightScale, BodyWidthScale, etc), the BodyProportionScale and BodyTypeScale values must interpolate joint locations between the standard R15 positions and the new, taller, thinner positions. In order to do this, RigAttachments now contain a Vector3Value indicating their original position, which is the position when BodyTypeScale is set to 0. This value is used during scaling to determine where the joint should ultimately be positioned.

Because the joint creation code uses OriginalPosition to reposition the RigAttachments during joint creation, setting the location of a RigAttachment is no longer enough to position the joint. Existing code that copies body parts or moves RigAttachments in existing parts to create custom joint locations may not work correctly.

To solve this problem, simply remove OriginalPosition from any RigAttachment and then position it normally. The engine will reset OriginalPosition to be the position of the incoming RigAttachment. Alternatively, you can set OriginalPosition yourself to the desired value and the engine will use that value to reposition the RigAttachment.

76 Likes

nice!

2 Likes

Neat

2 Likes

Very Cool, I’ll be using this in my new games. :grinning:

3 Likes

That’s pretty cool!

3 Likes

:+1::+1::+1::+1:

2 Likes

:thinking:
am breaking this

2 Likes

This will help make some crazy outfits. :smiling_imp:

5 Likes

:+1:

Can confirm that I’m going to be following the same path as superstephson,

5 Likes

Cool beans

1 Like

That explains what they do. Neat!

I was literally wondering what these did a few hours before this was posted

2 Likes

Will this change “custom” R15 rigs? The character model I use for Apoc 2 uses non-standard meshparts for the parts of the body, and since I’ve never had a use for attachments in my game I’ve never put them into the rig. The character has its Motor6Ds already set before Player:LoadCharacter() is ever called.

In the past I’ve had problems with my characters joints being destroyed, the Motor6D C0/C1 values being changed and joints being made even though ones already existed. All these would happen after Player:LoadCharacter() is called.

It’s been an uphill battle to make sure my characters are always functioning as designed, it’s troublesome trying to use new features as intended when I keep needing workarounds.

2 Likes

It may have an impact on your character loading. If you send me a simple place here that demonstrates your custom character loading, I can run it through the feature and let you know. In principle, these scaling values should not have any more impact on character loading than the other scaling values.

In general, the preferred path for custom character work is to go through Humanoid:BuildRigFromAttachments and let the engine build joints.

As the R15 capabilities evolve, we anticipate that custom load code will need to be updated. We’re working on APIs to make custom body part manipulation easier to support. As always, we are open to suggestions :slight_smile:

4 Likes

I assume this still hasn’t been implemented into the avatar editor as changing the sliders doesn’t do anything.

5 Likes

Yes, we rolled out the editor sliders before activating the feature. The editor is sending good values to the server, but the server isn’t doing anything with them yet. Anticipate activating in the next couple of days.

4 Likes

Soooo… anthro has been released?

2 Likes

Pretty excited to see the outcome!

1 Like

Awesome

1 Like

Fantastic. Excited to utilize these new features.

2 Likes

Yeah, pretty much. Or at least that’s what we’ve speculated this to be. Either way, at least it’s actually good looking compared to the… unspeakable… also known as before.

5 Likes