2023.10.03 - Maya
Highlight for this release is Universal Transfer!
- ADDED Unlimited Simulation Simulate without a licence
- ADDED Update Physics Presets, finally!
- ADDED Universal Transfer Now works with any Maya rig!
- ADDED Snap to Simulation Reliable, like Live Mode
- ADDED Ghosting Visualise past, present and future
- ADDED Live Mode Precision More confident posing
- ADDED Additive Recording For jiggle and secondary motion
- ADDED Scene Scale Reliable and visual scale
- ADDED Mass Units Kilograms!
- ADDED Influence Animatable, one-way attach constraints
- ADDED Resizable UIs You can horizontally resize these
- ADDED Root Stiffness Stiffness and damping on the root!
- ADDED Quality of Life Life, but better
- UPDATED API Changes For you hackers and slashers out there
- UPDATED Deprecated A few things less to worry about
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.
- Trial licences can be used for simulation and learning forever, yay!
- 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://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:
- For every control in your rig..
- Try and match the corresponding Marker..
- 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!
- Select Marker
- Select one or more meshes
- 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 therdSolver
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!