Hello Creators!
We’re thrilled to announce the Avatar Joint Upgrade Studio Beta, an exciting new step in expanding what Roblox avatars can do. With this update, setting up physical avatar interactions, like ragdoll effects, becomes significantly easier. This upgrade introduces force and torque-limited constraints directly into avatars, allowing you to create realistic, physics-driven movements effortlessly.
Overview of the Upgrade
To enable the Avatar Joint Upgrade:
-
Opt into the Studio Beta going to File > Beta Features and enable “Avatar Joint Upgrade”
-
Set StarterPlayer.AvatarJointUpgrade to Enabled.
Once enabled, this feature will replace every Motor6D
joint in spawned character models with several constraints:
-
A BallSocketConstraint to keep the body parts attached and apply cone limits during physics simulation.
-
A new AnimationConstraint to play animations on the parts, either kinematically (like Motor6D) or physically with forces and torques.
-
A NoCollisionConstraint only on certain body parts, to improve ragdoll fidelity across diverse avatar bodies.
Key Components
AnimationConstraints
The AnimationConstraint is a new type of constraint designed replace Motor6Ds, with a few key enhancements:
-
Transform Property: This CFrame property allows animation control via an
Animator
orLocalScript
. -
IsKinematic Property:
- When set to
True
, AnimationConstraints will perfectly align parts to animations without physics influence, or in other words, behave the same as Motor6Ds. - When set to
False
, AnimationConstraints will use physics to achieve its target transform, making it possible for animations to drive physical interactions. If the values specified inMaxForce
orMaxTorque
aren’t high enough, characters might not fully reach their target poses, enabling more dynamic, physics-based animation blending.
- When set to
BallSocketConstraints
The BallSocketConstraints provide a foundation for physics-based interactions, enabling realistic ragdoll effects. The joints default to human-like limits, but they can be fully customized or disabled entirely.
In the example provided, a character entering a ragdoll state plays a defensive curl animation. The AnimationConstraints lack the strength to hold the pose, resulting in natural movement.
Note: For ragdoll on character death, set Humanoid.BreakJointsOnDeath to False. See the example script provided.
BallSocketConstraint limits apply to IKControls. Note how this IKControl set to LookAt the red part no longer twists the neck 180° with the joint upgrade active. This can be disabled by setting the BallSocketConstraint.LimitsEnabled to False or disabling the Constraint.
Before (no BallSocketConstraint)
After (with BallSocketConstraint LimitsEnabled)
What Can You Create?
This upgrade opens up a world of possibilities for physically-driven character interactions. To inspire you, we’ve released an uncopylocked example place.
This place includes features like:
- Ragdoll on character death, upon falling, and when getting knocked out
- Physics enabled on arms when holding tools
Get started by checking out this place and experimenting with the new capabilities.
What’s Next?
Once this Avatar Joint Upgrade exits Studio Beta, it will be rolled out in phases, similar to other major engine changes, to ensure a smooth transition across the platform. This phased approach allows eager developers to test the upgrade early and provides flexibility for those who may need additional time to adapt.
In Phase 1, developers can enable the upgrade in live experiences so players can use it. Once we move to Phase 2, the upgrade will become the default setting for all experiences. However, any developers who didn’t test the feature in Phase 1 can still disable it temporarily if it disrupts their experience, allowing them time to make necessary adjustments.
Finally, in Phase 3, AnimationConstraints will be the standard for all avatars across Roblox, ensuring consistent, high-quality character simulation. Motor6Ds will still be supported for legacy content, so any existing projects using them will continue to function as expected.
While we don’t have set dates yet for these phases, we will keep you all updated and share more early next year.
Join the Studio Beta and Share Your Feedback
We’re eager to see the creative ways you’ll use this upgrade to bring avatars to life! Let us know your thoughts, feedback, and any issues you encounter.
Happy building,
The Physics Team
FAQ & Known Issues
Will enabling the joint upgrade change or break my experience? Do I need to update my scripts?
-
In most cases, your experience should behave the same. The AnimationConstraints in spawned players have
IsKinematic
set toTrue
by default, so they will match Motor6D behavior. However, if your scripts access specific Motor6D properties, you may need to update them.- Scripts checking
instance:IsA(“Motor6D”)
will not detect AnimationConstraints. - Setting
C0
,C1
,Part0
, orPart1
properties will error. AnimationConstraints use Attachments instead.
You can Ctrl + Shift + F search your codebase for references to these properties and update them to use Attachments.
Before:
After:
- Scripts checking
Does the joint upgrade affect R6?
- Currently, no. R6 is structurally different from R15. We’re open to adding support in the future.
Are upgraded joints applied to all characters?
- Currently, upgraded joints are only added to characters from the Player spawning flow. We plan to extend this to all character-creation flows, like from HumanoidDescription, in the coming weeks. Upgraded joints will not be added to existing character Models, like NPCs already in your place.
Do AnimationConstraints work with the Animation Editor?
- Yes. However, the editor currently does not preview animations on joints that have IsKinematic set to False. We plan to enable this soon!
Does enabling the joint upgrade impact performance?
- No, the base joint upgrade has little to no effect on performance. Further explanation in this reply.
Known Issues
- There are some visual glitches in some cases on skinned avatars. The parts appear to have correct CFrames, but the visual is wrong. We’re investigating.