Skip to content

2023.10.03 - Maya

Highlight for this release is Universal Transfer!


Overview

These release notes are the Maya-specific notes from the overall notes here.

For minor patch notes, e.g. 2023.10.06 see the announcement thread.


Showcase

Let's start with the good stuff!

Jasons Spider

Jason's Monkey

Skeletons

Excellent work by Hirokazu-san!

Davy Jones

Enother excellent piece by Nithin_Piano on our forums.

Retro

Finished work by Erns-Jan on our forums.


Unlimited Simulation

Ragdoll will now happily simulate without requiring a licence.

This has 2 main implications.

  1. Trial licences can be used for simulation and learning forever, yay!
  2. Floating licences no longer occupy a seat when simulating, only when recording

Licences now only become relevant when getting simulation out of Ragdoll, primarily to record your simulation. This way, you can learn and experiment with simulation to your hearts content and only pay for a licence and seat when you are happy with the result. How great is that?


Universal Transfer

Live Mode now works with native Maya rigs!

Rig from https://agora.community/content/stormtrooper-may

Rig from https://www.cgspectrum.com/resources/tiger-animation-rig

IK too

Notice how all controllers, including IK, is transferred. This was not possible before!


Distraction Free Posing

Use Live Mode as a substitute for your normal animation controls, by SHIFT clicking on the transfer button. This overlays Ragdoll over your character and automatically transfers upon releasing the mouse cursor.

At this point, we can go distraction-free and hide all NURBS control to work entirely with Live Mode.


Background

So, wasn't this the case already?

Live Mode was released with Ragdoll 2022.11.29 as a means of experimenting and gaining intuition of limits and contacts. With it came the ability to transfer the live poses back onto the Maya character. However, it only supported characters loaded natively with Ragdoll, or at best very simplistic native Maya rigs. Those that consisted of a plain FK hierarchy, such as a joint hierarchy.

At the time, it seemed this mechanic would not be possible with native Maya rigs, since Ragdoll relies on this hierarchy to figure out the final position and orientation of each body part. For example, to know where the hand is, Ragdoll first needs to know where the arm is, which needs to know where the torso is and where the hip is and so on. The hand depend on those positions.

Native Maya rigs don't work like that; they rarely form a linear hierarchy like this, with IK and space switching constraints and stretchy limbs all complicating the transformation path from hip to hand.


Tuning

The universal transfer is an "iterative" solver. Here's how it works:

  1. For every control in your rig..
  2. Try and match the corresponding Marker..
  3. Repeat, until each control is a close match

The challenge is that some control cause other controls to move. For example, after Ragdoll has matched the foot, matching the upper leg would move the foot again. And so the process needs to be repeated until each cyclic dependency is resolved.

Per default, Ragdoll will iterate up to 4 times, and stop as soon as controls get "close enough". The distance Ragdoll considers "close enough" is called "tolerance" and the number of times it attempts to reach that position is called "iterations".

Here's the normal circumstances.

And here's what happens when you tune iterations.

Notice how that with just 1 iteration, it isn't enough to transfer once. You'll have to keep pressing the transfer button until your character is close enough. That's that's exactly what iterations do; they keep pressing the button until it's close enough.


Iterations

Here's one more visual to help you understand the effect of iterations.

Here, iterations are set to 1, meaning that each time we click we run exactly 1 iteration.

Pro Tip

You can manually type in an iteration count, such as 8 or 16, in case 4 is not enough. Generally, it depends on the number of cycles in your rig that contradicts the hierarchy. For example, if the upper leg is affected by the foot, then that's a cycle. This is also the most common cycle for IK-based rigs, where the upper leg is affected by the pole vector which is typically affected by the foot.


Minimum Iterations

Sometimes, Ragdoll thinks it finds a close match, but you as a human know better. That's when you can force Ragdoll to keep trying to find a match for X number of times. This number is the minimum number of iterations.


Limitations

Some rigs are still out of bounds for Ragdoll, no matter how many iterations. Here are a few things you can potentially expect depending on the complexity of your rigs.

Notice how the arm sometimes doesn't match, until you hit the transfer button a few more times.

Help

If you find a pattern, something small that consistently fails, let us know. We'd like to solve this!


Update Physics

Work faster and in parallel with your peers using this new feature.

Rag files can now be used presets and save-states for your characters, enabling updates to your character as you animate.


Options

Everything is updated per default, minus any attribute that is already keyframed or otherwise locked. For more control, see the options provided in the UI.

Option Description
Include Materials Friction, restitution and collide attributes
Include Shapes Extents, radius and shape type
Include Limits On/off state, angles, frames
Include Springs Stiffness and damping
Include Solvers Whether to include solver attributes at all
Include Markers Whether to include any Marker attributes at all
Include Constraints Whether to include pin constraints et. al.
Include Groups Whether to include groups
Include Targets If Markers have been retargeted, include the new target


Update API

Since this is suitable for pipeline automation, here's what you tech gurus can do.

from ragdoll import api
api.update_physics(fname, opts)

Where fname is the full path to a .rag file, such as c:\assets\storm1.rag and opts is an optional dictionary with the same options as for import_physics.

Options

You'll generally want to match these with whatever options you used to originally import your .rag file.

opts = {
    "roots": [],
    "matchBy": constants.MatchByHierarchy,
    "searchAndReplace": ["", ""],
    "namespace": None,
    "preserveAttributes": True,
    "retarget": True,

    "overrideSolver": "",
    "createMissingTransforms": False,

    "includeSprings": True,
    "includeLimits": True,
    "includeShapes": True,
    "includeMarkers": True,
    "includeGroups": True,
    "includeSolvers": True,
    "includeConstraints": True,
    "includeMaterials": True,
    "includeTargets": True,
}


Snap to Simulation

This button has seen an upgrade too, and now works like the Live Mode transfer!


Ghosting

Gain greater control over your animation by visualising past and present.


Caching

Cache your simulation to see the future too, this can be helpful when making tweaks without changing time to see the effects of your tweaks with very high precision.


Past & Future

Tune the number of frames to look ahead or into the past.


Increment

Choose how many frames in between each frame to skip.


Colors

Finally, tune the colors of your ghosts to fit your preference. 😊


Live Mode Precision

You'll now find greater precision when posing your character in Live Mode, along with an improved IK behaviour.

IK will now lock the grandparent of anything you drag, just like traditional IK, in addition to keeping the Marker you drag from rotating.

Pro Tip

Hold the SHIFT key for a "full-body IK" type behaviour.


Additive Recording

You can now record physics onto an additive layer, meaning layers can be combine, blended and kept active even when changing the underlying animation.


Scene Scale

There is now an interactive widget to configure Ragdoll to fit your character.

When creating your first scene, Ragdoll will automatically try and detect your scene scale based on your first assignments.

See this option in the UI for how to control this.


Mass Units

Units now make physical sense.

Kilograms all around

Notice how values are in kg

This not only enables you to get a clear sense of what scale simulation happens at, but also provides accurate values of mass, in kilograms. A typical human weighs 60-100 kg and Ragdoll's forces depend on this being an accurate measure. Previously, mass was rather fixed at 6-10 kg as Ragdoll assumed your characters were roughly 18 cm tall, as is the norm in visual effects and animation (strangely enough!).

You'll also see the effect of making your character a giant, via the new Scene Scale manipulator.

With this release, characters of any scale will produce identical results.

Pro Tip

Because a giant weighs more, it also has an effect on any forces that act upon it. Like trying to push a car versus pushing a planet; the same amount of push will affect the object differently.


Rotation Mass

You'll also notice a new member to the property panel; Rotate Mass. This can help you understand how easily an object starts to spin and how strongly it is affected by Rotate Stiffness in which axis.

An axis with little mass will move more quickly and with less force; it will also affect other objects less. Just like Mass, except for rotations!

Pro Tip

This is also called Moment of Inertia and Angular Momentum, if you would like to Google it.


Influence

The Attach Constraint has a new attribute called Influence that lets you control the amount of influence the child has over its parent.

Value Meaning
0.0 Child has no influence, pulls child towards itself
0.5 Parent and child hinfluence, pulls parent towards itself have equal influence, this is the default
1.0 Child has all influence


Usecases

You can use it when you want one Marker to reach another, without the other being influenced by it. Notice here for example how the monkey limbs reach for the limb, without the limb being affected (until eventually reaching, at which point the influence is animated back to 0.5).

  • Punching a punch bag and always landing exactly where you intend … even when the bag is in motion
  • Catching a ball where you have it only follow Z and X so the hand adjusts to catch
  • For the legs pulling towards the branch, rather then both pulling to each other
  • An action hero jumping to grab a rope, can get the hand to pull or go to where it needs to be then lock it in for the swing


How it works

And yes, you can animate this attribute!


Resizable UIs

Sometimes names of things gets too long, and the UI is unable to fully show it to you. Until now, when you can (finally) resize the UI horizontally!


Root Stiffness

The first controller in your character hierarchy can now make use of Rotate and Translate Stiffness, just like any of its children. The difference is, the parent of the root is the world; so it will behave just like it was Pin Constrained.


Quality of Life

A number of smaller things have been addressed, take a look!


Multi-select Replace Mesh

Sometimes, you need more than just a single mesh for your Marker. That's when you can combine your meshes and use the resulting combined mesh to replace with. We've saved you the extra clicks in this release, making it possible to do this!

  1. Select Marker
  2. Select one or more meshes
  3. Replace Mesh

Each mesh will be combined into a single Marker mesh.


Prevent Duplicate Markers

Sometimes, you accidentally assign


Attach Constraint Parent

You can now unparent an attach constraint, leaving it at the root of your Outliner. There's also a new option called "Parent" in the UI you can use to set the default.


Record Translation & Rotation

When Markers were first added to Ragdoll, they came with two attributes called:

  • Record Translation
  • Record Rotation

The idea being that you can choose whether controls should receive translation keyframes, rotation keyframes or both. It didn't work; because the way we recorded was somewhat limited.

This changes today, and you are now able to use these attribute to selectively skip or include channels that would otherwise receive keyframes.


API Changes

There is now an alias for reinterpret_physics, which has already had a bit of a difficult name. The word "import" has special meaning in Python, hence it was mostly avoided. But alongside _physics it is now available as:

from ragdoll import api
api.import_physics(fname, opts)


Deprecated

Less attributes to worry about in this release; if you use them you are adviced to transition away from these.

  • Mass Ratio on the rdSolver node has been deprecated
  • The Drive Per Substep attribute on the Solver node turned out to be a success and is now always-on!
  • The Frameskip Method attribute on the Solver node has been removed, turns out Pausing the simulation is never really that useful!