Skip to content

2021.11.15

image

Highlight for this release is Markers part 4 of 4!

In with the new, out with the old

The next few releases will slowly but surely replace Rigids with Markers. So if there is anything you find yourself unable to do with Markers, let us know and we'll get that in there as soon as possible.


Showcase

Let's start off with some eye candy. 😇

Spiderman

Courtesy of Jason Snyman, a.k.a. the wizard.

Piggyback Ride

Thought it was fun to see how the simulation would look with the previous simulation as input!

Motion Graphics

Courtesy of Peter Crowther, for their client

Design company. Art direction Matt Walpole.

Halloween

And another from Jason!


Recap

We did it! We're at part 4 out of 4 of the new Markers. Just about. 🥰

This release here was intended to round off the interactive manipulators - so that you didn't have to fiddle around the channel box to edit shapes, constraints and limits - but we ran into a wall with our drawing API (see Robust Rendering below) which led us to throw everything out and start from scratch. 😔

On the upside, we've now got a significantly stronger foundation upon which to build manipulators, you will see these in action in the next release. Part 5 out of 4! 🥰

These are the things scheduled for the next releases.

Next Release Description
Interactive Manipulators Editing shapes is hard, constraints too. And limits.
Export & Import Rigids could be exported and later imported, Markers does not have this ability yet
Forces Next up, native Maya fields for Ragdoll
Mechanical Constraints Like vehicle suspension are nowhere to be seen just yet.

New Terminology

A few things found a more representative name in this release.

Before After
Guide --> Pose, e.g. Pose Space
Input Type --> Behaviour, e.g. Kinematic and Pose Match
Assign Single --> Assign Individual
Assign Group --> Assign Hierarchy

What does it mean?

Still fuzzy on what "assign" means? Refer back to the introductory tutorials from the last release here. (hint: it's motion capture terminology)

image image

Future of Rigids

When Markers was first discovered, it wasn't clear whether they would live alongside Rigids, or replace them. But at this point it's safe to say Markers is applicable to everything rigids can do with far greater performance and usability.

Which is why from this release onwards Rigids are now to be considered deprecated.

Long live Markers!

The following few releases will be about transitioning from Rigids to Markers. Tutorials will be updated, the documentation too and you're encouraged to start using Markers for your everyday animation tasks.

Rigids will live on for the next few releases and eventually end up in a Legacy sub-menu until being completely removed in February 2022.

February 2022 Deadline

If you didn't read the above, remember this date for when Active Rigid and Active Chain goes bye-bye.

cause-kansas-is-going-bye-bye


Ragdoll for MacOS

There is now an option to download Ragdoll for MacOS! 🍎

Heads Up

If you are a Mac user, please let us know how you get along. The builds were made on Big Sur and should work well with Big Sur, but Autodesk recommends El Capitan.


Robust Rendering

This release has taken quite a while, and not because of MacOS support but because of rendering.

In short, we've had to throw out and rebuild a significant chunk of Ragdoll for this release. Everything related to lines, everything!

image

The reason is that an unlucky few of you have had the following experience with Ragdoll.

Those lines don't look quite right.. 🤔

In short, the reason for this is that the Maya API for drawing lines ends up looking different across various graphics cards and versions of Maya. Maya 2019 was especially egregious.

But let's dig deeper.


Digging Deeper

Animator?

This next part is mostly for techies, feel free to skip ahead.

Whenever Ragdoll drew shapes, like capsules and convex hulls, it used part of Maya's drawing API called MRenderItem. Lines on the other hand - like those for limits and guides - were drawn using a simplified API called MUIDrawManager.

drawManager->circle(point, radius);
drawManager->line(pointA, pointB, thickness);
// And so on..

Which is a fantastic, well-designed API that has worked great for the past year. Until it didn't. As it happens, this API is broken.. Reports were coming in from all across the globe about lines looking like.. Well, like this.

Some if it I could replicate, this here is Maya 2019 in which the behavior is erratic. But the same could be said for some hardware and driver combinations; most of which I have never been able to replicate here.

This version throws all of that out the window, and reimplements it from scratch. It's a pity, because the API was very easy to work with and a great way to get started rendering in Maya.

That said, our new API is not only much faster but also much more powerful. You can expect to see a lot of new 2D rendering, including fully interactive UI elements in 3D space.

Until then, if you've been having issues with Ragdoll and lines, you can now breathe easy.

Caveat

This is great and all, but it no longer supports DirectX.

In the previous release, we already started moving away from DirectX, and if you've been using it you would have gotten some warnings about it. If not, then you've got nothing to worry about for this release.

OpenGL is where the action is at, and is supported equally on each platform; including MacOS!


Robust Recording

Recording now automatically ends up on an Animation Layer per default, with only the simulated controls associated with it. It is also at least 2x faster and less sensitive to quirks in a rig or skeletal hierarchy.

Here are the things it didn't take into account before, but does now.

  • Uniform Scale
  • Non-uniform Scale
  • Negative Uniform Scale
  • Negative Non-uniform Scale
  • Rotate Pivot
  • Scale Pivot
  • Rotate Axis
  • Joint Orient
  • Locked Channels

And that should cover it!

Important

Recording is the most important aspect of Markers; if you can't get the simulation out then it's all for nothing. So do reach out via the..

..if you have any issues with this, and a fix will be crafted in a hot minute.

Performance

I mentioned a 200% increase in performance, didn't I? Let's have a quick look (pun!).

Before

A solid 49 fps.

After

135 fps. The numbers speak for themselves.

At the end of the day, the main bottlenecks are out of Ragdoll's hands:

  1. Running the simulation
  2. Evaluating the rig
  3. Twice (!)
  4. Overhead from the recording

Sometimes, the simulation is really fast; it will usually be the fastest of the four. Other times, evaluating the rig is fast; such as if there are no keyframes and no fancy processing like follicles or spline IK. But the overhead from recording should approach zero as time goes on.

About (3), Ragdoll must evaluate your rig twice. Once to provide the simulation with your animation, and a second time to bake the resulting simulation back onto your controls.

image

Why so slow?

Interestingly, this is what made Active Rigid and Active Chain so slow. It was doing recording every frame, whether you wanted to or not. It was how the simulation was made visible to you; by continuously recording it.

With Markers, we delay the recording until you hit Record Simulation, which is the primary way in which they enable us to reap this crazy amount of performance out of Maya.


Robust Caching

Several improvements were made to Caching, introduced in the last version.

  • More intuitive visual aid
  • Caching from the Start Frame
  • Continuing cache after visiting the Start Frame

Caching whilst standing on the start frame could cause hiccups on occasion, this release fixes that.

Before

There was also a minor issue whereby if you cached half-way, revisited the start frame and then went back to resume caching, it would resume from the wrong spot and thus break the cache.

In either of these cases, one could disable and re-enable the cache to "fix" it, but now you don't have to!

Notice how it doesn't update the cache when standing on the start frame?

After

And, like before, you can enable caching via the solver. The only difference is that the menu item automatically plays through the entire timeline for you.


Snap to Simulation

Yet another way to work with physics, by transferring individual poses from the solver into your animation. You can use it to pose or layout a scene.

Coming Up

An upcoming release will enable you to advance time in the simulation, without affecting time in Maya. Such that you can "relax" a pose, for example. 😁


Frameskip Method

Ragdoll needs a consistent progression of time to provide reliable results. So per default, if it notices a frame being skipped, it kindly pauses and waits until you revisit the last simulated frame.

Alternatively, you can let it look the other way and pretend time has progressed linearly, like nCloth and countless other solvers do.

Pause

The default. It's safe, predictable, but requires Play Every Frame to work.

Ignore

The nCloth and nHair default, of trying its best to simulate even though it wasn't given the frames inbetween. Unpredictable, unreliable but may handle playing along with sound.

Aside from not giving you the same result each time you play, if too many frames are skipped your simulation can completely explode. You can semi-work around this by increasing the number of substeps, forcing more simulation frames to fill for the missing frames.

Non-deterministic

Bear in mind that the Ignore method cannot give you the same results each playthrough. The Pause method is guaranteed to give you the same results, and are identical to what you get when you Record Simulation too.


Extract Simulation

Get data out of the solver and into a baked joint hierarchy.

You can use this to build a library of animations, or to handle the retargeting from simulation to animation manually by just constraining to the resulting joint hierarchy.

Performance

Notice how fast this is!


A Debugging Companion

It can also be used for situations where Record Simulation doesn't do what you need it to. The extracted skeleton will be a plain joint hierarchy, with no scale, and guaranteed to match the simulation exactly. So you can extract it, and constrain your rig to it.


Trial Renewal

You've already given Ragdoll a go many moons ago, but really like where things have gone since? Well you're in luck. You can now request a re-trial!


Replace Mesh

You can now replace the original geometry assigned to your marker, just like you could with Rigids.


Auto Limits

Markers are now able to infer which axes to lock in the simulation, based on the locked channels of your control or joint.

Notice in this example how some of the channels are locked. With the Auto Limit option checked, the corresponding limit axes will be locked too, such as to prevent the simulation from rotating around those axes.

If you forget or want to detect locked axes on an existing marker, you can use the Utility option too.


Scale Mastery

Simplified and more robust, scale now handles well for all manner of shapes.


Unloading on Linux

Linux users were not able to unload and later reload Ragdoll, without experiencing a fatal crash. This was a problem related to the dynamic licensing library not letting go of its TCP handle and forcing the plug-in to remain loaded, even though you kindly asked it to unload.

This has now been fixed, and the plug-in can safely be unloaded and reloaded and unloaded and reloaded over and over and over again. Enjoy!


PATH and Windows

For TDs

The following is meant for administrators and TDs

With the introduction of Mac support a change was made to the way LimeLM - the licencing software used by Ragdoll - is distributed. Rather than being statically linked on Linux and dynamically linked but programatically located on Windows, it is now dynamically linked and automatically located on all platforms.

Windows Only

This only applies to Windows. Linux and Mac references the libraries relative the plug-in location. In short, you don't have to worry about it.

You don't have to care about this, unless you are on Windows and care about what's on your PATH to which this happens.

# Windows
os.environ["PATH"] += ";\\Ragdoll\\shared\\windows"

The change is coming from the Ragdoll.mod file.

Why am I telling you this?

In the wildly unlikely chance that there is another plug-in using a different version of LimeLM in your arsenal, there may be a conflict whereby:

  1. Ragdoll module is loaded, appends v1.0 of LimeLM to PATH
  2. Other Plug-in module is loaded, appends v0.5beta of LimeLM to PATH
  3. Ragdoll plug-in is loaded, picks up v0.5beta
  4. Other Plug-in plug-in is loaded, picks up v0.5beta

This will be resolved in a later version of Ragdoll, but until then, in the unlikely event there is a conflict, here's what you can do.

import os
before = os.environ["PATH"]
os.environ["PATH"] = "/path/to/Ragdoll/shared:%s" % before
cmds.loadPlugin("ragdoll")
os.environ["PATH"] = before

Namely, rather than loading Ragdoll from your plug-in manager, load it using this wrapper script. It will ensure Ragdoll's path is picked up ahead of any third-party plug-in, without negatively affecting anything around it.