Building off of advanced ragdoll systems

It’s been a while since I last posted here. Since then, I’ve been steadily working on my 3rd person game. But today isn’t about updates to that system — instead, I want to talk about ragdolls on Roblox.

You’re probably familiar with how ragdolls typically work on the platform. The simplest implementations often use ball joints for all rig joints. Some developers go a step further by adding joint limits to prevent limbs from bending unnaturally (like a broken bone). Others have even created ragdolls that appear to balance themselves with clever math for foot and head placement.

A few days ago, I started building a ragdoll system that aims to be more precise and realistic than most of what I’ve seen so far. I’m getting close to my goal, but I’m not quite there yet.

So, I thought I’d share some of my ideas in this post — and maybe even compare different ragdoll systems to see what these improvements actually bring to the table.


Basics

The foundation of any decent ragdoll is simple: ball joints with limits on how much each body joint can rotate. Roblox’s built-in ball joints support limits out of the box, so this part isn’t particularly groundbreaking.


Moving to an Advanced System

Here’s where it gets interesting! There are two main enhancements that completely changed how my ragdoll behaves:

  1. Adjustable Center of Mass (COM) for each limb
  2. Springy rotational limits (torsion springs)

Adjustable Center of Mass (COM)

Roblox calculates each limb’s COM automatically, but it doesn’t always align with typical human anatomy. This also limits how customizable the ragdoll’s fall behavior can be.

To fix this, I made each original part massless and welded an invisible part (with the desired mass and offset) to the original. This allows for precise COM adjustments.

But how do you figure out how much of the total mass each body part should have? After some research, I landed on these approximate percentages:

{ // NOTE: Each value is a percentage of total mass
    head = 6.94,
    upperTorso = 32.07,
    lowerTorso = 11.18,
    upperArms = 2.71,
    lowerArms = 1.62,
    upperLegs = 14.16,
    lowerLegs = 4.33,
    hands = 0.61,
    feet = 1.37
}

With some tweaking of the mass part offsets, I was able to get something that feels pretty darn good:


Springy Rotational Limits (Torsion Springs)

Even with COM adjustments, the rotational limits on the joints still felt… abrupt. I needed something with more bounce and natural give.

The solution? Torsion springs.
By adding springiness, the joints no longer stop suddenly when rotated too far. This creates a smoother, more lifelike response.

Here’s the same ragdoll, now with torsion constraints:


Now enough chattering! let’s compare my system to a more typical high-end ragdoll.

In these videos, yellow is my version, and green is the traditional ragdoll:



Pretty neat if I would say so! The greens fall has some forces that are applied when dead which does improve the looks although can be an issue if you’d say want the ragdoll to fall backwards. But I’m not done yet. There are still two features I still want to add:

  • Smooth transitions to ragdoll when the dummy dies (no more abrupt animation cutoffs)
  • A balancing system (like the one I mentioned earlier)

But for now, that’s all I have to show. Thanks for stopping by, feel free to leave your thoughts down below!

13 Likes

Small little update, you might’ve noticed the head got stuck tilted up. I quickly fixed that with a replacement collision box
Screenshot 2025-07-08 at 15.48.56

5 Likes

this is far a really good explanation

2 Likes

This is super cool

30 birds flying in the sky (30 lettr limit)