Highlight for this release is Markers part 4 of 4!
- Part 1 - Animation Capture
- Part 2 - Performance
- Part 3 - Linking and Caching
- Part 4 - See below 😇
- ADDED Ragdoll for MacOS You heard it right, it's here!
- ADDED Robust Rendering Consistent across all platforms and GPUs
- ADDED Robust Recording More resilient to locked controls and custom rotation axes
- ADDED Robust Caching I dare you to try and break it 😙
- ADDED Snap to Simulation Single-frame recording, for quick posing
- ADDED Extract Simulation Get the raw data as a baked joint hierarchy, super fast!
- ADDED Frameskip Method Now accessible per-solver, as an attribute
- ADDED Trial Renewal Ready to give it another go? Now you can
- ADDED Replace Mesh An old friend has returned, for Markers
- ADDED Auto Limit Transfer locked Maya channels into physics
- FIXED Scale Mastery Negative, non-uniform, you name it
- FIXED Unloading Ragdoll on Linux Guaranteed to crash, but no more!
PATHand Windows If you don't know what this is, you don't have to worry about it
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.
Let's start off with some eye candy. 😇
Courtesy of Jason Snyman, a.k.a. the wizard.
Thought it was fun to see how the simulation would look with the previous simulation as input!
Courtesy of Peter Crowther, for their client
Design company. Art direction Matt Walpole.
And another from Jason!
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.
|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.|
A few things found a more representative name in this release.
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)
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.
Ragdoll for MacOS
There is now an option to download Ragdoll for MacOS! 🍎
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.
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!
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.
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
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.
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!
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!
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..
- or contact form
..if you have any issues with this, and a fix will be crafted in a hot minute.
I mentioned a 200% increase in performance, didn't I? Let's have a quick look (pun!).
A solid 49 fps.
135 fps. The numbers speak for themselves.
At the end of the day, the main bottlenecks are out of Ragdoll's hands:
- Running the simulation
- Evaluating the rig
- Twice (!)
- 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.
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.
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.
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?
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.
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. 😁
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.
The default. It's safe, predictable, but requires
Play Every Frame to work.
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.
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.
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.
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.
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!
You can now replace the original geometry assigned to your marker, just like you could with Rigids.
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.
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
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.
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
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:
- Ragdoll module is loaded, appends v1.0 of LimeLM to
- Other Plug-in module is loaded, appends v0.5beta of LimeLM to
- Ragdoll plug-in is loaded, picks up
- Other Plug-in plug-in is loaded, picks up
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.