Skip to content

2026.06.19 - Maya

Stable access and Maya 2027!


Overview

A port of features originally written for Ragdoll Standalone to keep Maya fresh and up-to-date. 😊


Gosling

Another gem from Jason Snyman.

Hikari

Another cloth example on the forums!


Stable Access

We are out of Early Access!

Thanks to everyone who dared to dip their toes into early versions of Ragdoll 4.0. We're marching ahead with the remaining features for Ragdoll 4.0 listed here and Maya will continue to see these updates as well.

What this release means is that the version you're looking it is stable and production ready.

100% Backwards Compatiblity

Everything made since Ragdoll 2.0 (2022.01.17) continue to open and run identically in Ragdoll 2026.

100% Forwards Compatibility

Scenes saved in this version of Ragdoll still open in prior versions of Ragdoll.


Maya 2027

With support for Maya 2027, you can now rescue your motion maker "animations". 😊


My Ragdoll

Another entry fresh out of early access, this one has been going for quite a while and is now ready for the public eye.

If you bought another seat of Ragdoll recently you may have noticed the purchase page has seen an update.

Now when you make a purchase, you'll be invited to an optional web frontend where you can manage both new and old licences.

Features

  • Get an overview of your serials
  • Download the latest Ragdoll releases
  • Edit your contact details
  • Edit your billing details of your subscriptions
  • View and download your invoices and receipts
  • Edit seat counts per serial
  • Free up a seat by deactivating a machine
  • Activate a serial offline
  • Upgrade to a higher tier, for example Complete to Unlimited
  • Renew lifetime serials, a.k.a. AUP or Annual Upgrade Program
  • Add additional serials
  • Add temporary seats onto a lifetime serial
  • Cancel a subscription, or reinstate one you've scheduled to cancel
  • Review your account activity

Existing Customers

If you've already purchased a licence, you'll most likely already have an account ready for you to login to. Try Forgot Password to login for the first time.

If you made a purchase the old fashioned way - invoice and email - ping us and we'll get you setup on this new platform!

Manage Serials

Manage your serials from one convenient location.

Remote Deactivation

Manage renewals, seat counts, remote deactivations and your purchase receipts in one place, per serial.

Upgrade Personal to Freelancer

Upgrade from one tier to another.

  1. Personal
  2. Freelancer
  3. Complete
  4. Unlimited

Renew your AUP

Renew your annual upgrade program, a.k.a. AUP.

Temporary Seats

Add temporary subscription seats to your lifetime licence, perfect for when production scales during those peak months.


WebGPU Backend

The last released boosted rendering performance and quality, and here we are doing it again.

This time, we're leaving the dedicated OpenGL 4 and DirectX 11 backends behind and setting course on the future proof and cross-platform low-level rendering API WebGPU. On Windows, this translates to Vulkan on Windows and Linux and native Metal on MacOS.

In practice, this means:

  1. Greater consistency across platforms, e.g. Mac users now have raytraced soft shadows
  2. Greater stability, as the API itself is more vocal and less accepting of things that work on some platforms but not others; meaning we have no choice but to deliver solutions that work equally on each platform.
  3. Greater development speed; no more duplicating our efforts across 4 separate APIs - OpenGL, WebGL, DirectX and Metal.
  4. Greater performance; as a lower level API, it means greater control over the underlying hardware, which means more juice for you.

Backwards Compatibility

If for whatever reason nothing is rendered, revert back to the legacy backend with:

import os
os.environ["RAGDOLL_RENDERER"] = "kLegacy"

Prior to loading the plug-in. And let us know this is happening, so we can patch this up. The legacy path will eventually be removed entirely.


Technical Details

Notes from the founder

Hi, it's me. Marcus. :)

Because this was an interesting challenge that been on my mind for the longest time, take another look at the diagram above. This is a long long ways from where Ragdoll started, using Maya's MUIDrawManager API to produce shapes of our own in the Maya viewport.

// From Ragdoll 2020.10.16
void SceneNodeDrawOverride::drawShapes(const MDagPath& /*objPath*/,
                                       MHWRender::MUIDrawManager& painter) {
    // ...

    painter.setLineWidth(1.0f);

    for (auto rigidEntity : g.registry.view<RigidComponent, SceneComponent>()) {

        // ...

        painter.setColor(color);
        painter.setDepthPriority(MHWRender::MRenderItem::sDormantFilledDepthPriority);
        painter.setPaintStyle(MUIDrawManager::kShaded);

        if (desc.type == GeometryDescriptionComponent::Box) {
            const MVector center { mtm.getTranslation(MSpace::kTransform) };
            const MQuaternion rotation = mtm.rotation();

            painter.box(
                center + shapeDrawable.offset, // center
                MVector(0.0f, 1.0f, 0.0f) * rotation,  // up
                MVector(1.0f, 0.0f, 0.0f) * rotation,  // right
                desc.extents.x * 0.5,
                desc.extents.y * 0.5,
                desc.extents.z * 0.5,
                true            // filled
            );
        }

        // ...
    }
}

The advantages of that was that everything you drew automatically fit with the rest of Maya's rendered geometry. Light, shadow and screenspace effects were all coming along for free, and the code involved was tiny.

You should definitely start here with your plug-in!

With Ragdoll 2.0, we started rendering using the graphics API directly - OpenGL and DirectX. The advantage was total control over the end result, which is how we managed to get the performance we did. But it also meant rewriting a lot of what Maya already did for free, like light, shadow and screenspace effects.

But worst of all, it meant doing this twice. Once for OpenGL, and once for DirectX. Because when Maya is launched under DirectX, there is no OpenGL and vice versa. To make matters worse, OpenGL on Mac was limited to a version of OpenGL from 2010. That's 16 years ago!

And then along came Ragdoll Web, the version of Ragdoll running in your browser. That meant no OpenGL, no Metal and no DirectX but instead WebGL. And then Ragdoll Standalone, to run directly on your hardware, outside of both Maya and browser. For that we need yet integration with Metal.

So we were left with either duplicating our work 5 times

  • DirectX 11
  • OpenGL 4.6
  • OpenGL 4.1
  • Metal
  • WebGL

And if we ever wanted the best performance on Windows, we would need yet another for DirectX 12 or Vulkan. It just doesn't make sense. So instead, we draw everything with a lower-level API called WebGPU and pass it to OpenGL or DirectX last minute.

OpenGL then is effectively getting a pre-rendered screenshot of what Ragdoll produced and composites that over the Maya viewport. Except it's not just a screenshot, but a full framebuffer, with depth taken into account such that it still renders behind the Maya geometry as you would expect.

The UI and outlines are rendered into their own separate "screenshots" and composited to appear on-top of everything, as you would expect.

The end result is one rendering implementation and two thin compositors whose shaders are literally:

void main() {
    vec4 c = texture(uScene, vUV);
    if (c.a == 0.0) discard;
    fragColor = c;
}

That is, if Core rendered a fully transparent pixel, ignore it. Otherwise, plop it in. It's the simplest shader in the world, even the 16 year old OpenGL on MacOS can pull it off.

You'd think that you would pay the cost of this additional compositing. But rendering a single texture on a single triangle is effectively free on any hardware from the past 20 years. Triangles are measured in the millions, textures in the thousands.

Furthermore, because WebGPU is lower-level than OpenGL it means greater control over hardware which means greater opportunity for performance. Which is why the end result is up to 2x faster than before; from 0.9 ms/frame to 0.4 ms/frame in the Manikin scene.


Pixel Perfect Shadows

Traditional shadows render a 2D texture from the perspective of each light source and then cross-references the pixels of those rendered from the main camera to determine whether an object is visible from that light (in light) or not (in shadow).

This is fast and effective. It has been and continues to be the main method with which to render shadows in real-time to this day - virtually every game uses this technique, with a tweak or two to hide some of its warts.

One of those warts is called "shadow acne" and is due to a lack of resolution in the texture generated from that light source.

To compensate for this, we can offset the shadow slightly, until eventually all shadow acne is gone.

Source

But now the opposite wart appears, called "peter panning". As the name suggests is when a shadow appears slightly disconnected from the contact point.

So now you are stuck between a rock and a hard place. There is no one true value, as it depends on not only the resolution you choose - more resolution = greater precision = less performance - but also the angle of the light. A greater angle means a greater need for bias.

Basically, it sucks.

Offline renders like we do for film doesn't bother with this, because it can just raytrace the shadows directly, like real light would. No 2D approximation, no hacks. But raytracing is slow. Especially compared to these "rasterised" shadows.

Unless you optimise and optimise and optimise. Which is what we did for the first early access release of Ragdoll.

But, although we get the benefits of raytracing like soft shadows, we are still left with either shadow acne or peter panning. No good!

Until today.

Shadows are now infinitely accurate, regardless of light direction or camera distance.


Color Compensation

Maya 2024+

This feature depends on functionality first introduced in Maya 2024.

Ragdoll now accounts for your Maya Color Management setting.

  • Use RAGDOLL_NO_CM_COMPENSATION to disable compensation
  • Use RAGDOLL_CM_COMPENSATE_3D to compensate the Ragdoll 3D render too
  • Use RAGDOLL_CM_DEBUG to print helpful messages in the terminal to debug any issues

Before

Notice how Maya applies color management to everything.

After

And now it doesn't. Magic.

Custom LUT

If you are a studio with custom LUTs, this should still work! The compensation is a bruteforce render and reversal of your LUT, rather than something analytical or based off of pre-defined profiles of OCIO.

If not, please do let us know and we'll patch that up.

Technical Details

Because this was an interesting challenge, for those of you interested here's what happens:

Ragdoll is rendered using MPxDrawOverride, just like any other node in your Outliner. The override is designed to draw 3D elements that participates in your scene, and we're using it to draw both 3D and 2D elements for UI.

UI is simply drawn very close to the camera, such that it appears "on top". But nonetheless, they are 3D triangles and Maya treats everything in the scene as something in need of color management.

When you then activate color management, Ragdoll renders a version that is the inverse of the graded output, such that when Maya goes ahead and grades it it effectively re-reverses (un-reverses?) our reverse grade, meaning we end up with our original pixels.

But it couldn't do it blindly, because we still want the actual 3D elements affected by color management, which is fine because we already composite 3D and 2D in two separate passes and only the 2D pass gets the reverse-tonemap and presto. You get exactly what you expect to get.


Fanless Background Activity

The Manipulator no longer consumes CPU and GPU cycles when the window is in the background. Less noise, less power draw. What's not to like.

image.png


Smooth Manipulator

Previously locked at 60 fps, typically trimmed to 30 fps, Ragdoll now renders at the capacity of your hardware for a much smoother experience.


Tooltips

Hover over any element and get a description and video of what it is.

  1. Hover for 2 seconds, get a "quick" tip
  2. Keep hovering for 5 seconds, get a "detailed" tip
  3. Hold Ctrl while hovering, get a "rich" tip, with video


Infinite Scroll

Pose for however long you want and retain fine-grained control over your simulation timeline.


Default Material

Colors are great, but sometimes all you want is gray gray gray.


New Gizmos

There are two new gizmos to play around with in Pose Mode.

  • Placement
  • Attach


Transfer on Release

Automatic Snap to Simulation while posing, to replace your typical Maya posing.

Things to note.

  1. The Transfer on Release setting calls Snap to Simulation each time you release your cursor
  2. The Pause button is what synchronises Ragdoll to your animation, until you start posing

This way, you can use Ragdoll to tweak your existing poses, which in turn keyframes your rig, without having to actually interact with your rig.


Placement Gizmo

Position your character, or parts of the character without physics.

Control the axis and plane to translate on.


Attachment Gizmo

Keep two Markers attached temporarily while you pose.


Next Up

We're doing private betas of Ragdoll Web as we speak.

It will be with you shortly. 😊