Skip to content

2022.07.20

image

Highlight for this release is Meshes meshes meshes!

Leave any comments and report any issues here.


Showcase

We've launched a Ragdoll Challenge since the last release, here are some highlights!

Crabomotion

From the ongoing competition by Kaehwai.

Hands

By V4NDL0 on the forums.

Jason

Some clips from Jason's LinkedIn feed over the past 2 weeks.


Raggraph

In August, we're heading to Siggraph 2022 in Vancouver! 😊

image

We'll be over here, at booth 442.

image

Running a handful of demos of how Locomotion works under the hood (hint: robotics tech!) along with the basics of Ragdoll.

Our booth will look something like this.

siggraphbooth

We'll be wearing t-shirts that look like this.

image

And have some nice banners that look like this.

image

Preliminary schedule looks like this.

  • Aug 9th:
    • 11:00 Intro with manikin
    • 13:00 Dragon rig setup
    • 14:00 Dneg
    • 15:00 Requests
    • 18:00 End
  • Aug 10th:
    • 10:00 Hands and fingers
    • 11:00 Self-walking rhino
    • 14:00 Dneg
    • 15:00 Requests
    • 18:00 End
  • Aug 11th:
    • 10:00 Locomotion
    • 11:00 Dneg
    • 13:00 Best of/Requests
    • 16:00 End


Translate Rotate Stiffness

The most important and complex aspect of Ragdoll are the Pose parameters.

  • Pose Stiffness
  • Pose Damping
  • Pose Space

image

In an effort to simplify these attributes, you'll now find an alternative - experimental - set of attributes.

  • Translate Stiffness
  • Translate Damping
  • Rotate Stiffness
  • Rotate Damping

image

A Translate Stiffness = -1 means "infinite" or "locked". It's the equivalent of Translate Motion = Locked.

Use the new option in the Assign option box to enable these.

image


Mesh Export Import

Any replaced mesh is now included in the exported .rag file, enabling you to import meshes onto characters that are missing the originally replaced mesh.

This should help keep both scene files and rag files clean and self-contained!

To the programmers out there, the .rag file now features this section.

"ConvexMeshComponents": {
    "members": {
        "indices": {
            "type": "UintArray",
            "values": [
                0,
                1,
                2,
            ]
        },
        "vertices": {
            "type": "PointArray",
            "values": [
                1.8463890552520752,
                -0.5881761908531189,
                -0.28559789061546326,
            ]
        }
    },
    "type": "ConvexMeshComponents"
},

These are unique vertex positions of one or more meshes. Ragdoll separates them into individual convex hulls by looking towards their connectivity, as per the indices array.

As a side-effect, you are now also able to delete the mesh you used with Replace Mesh. Keeping your scene a little more clean.


Convex Decomposition 2.0

The automated convex hull mechanic has been updated and is now both faster and easier to work with.

Before

image

After

image

Furthermore, you now have the option of baking the automatically computed convex hull so as to avoid recomputing it each time you open the Maya scene file.

For example, here we've got a decomposited human mesh.

And here you can see how we get to keep the collider, but lose both the connection and the automatic decomposition. File-open times are now optimised, as well as file size. As we only store the bare essential vertices for the convex hulls!


Convert to Mesh

You can now convert any Marker geometry - including convex hulls - into Maya geometry!


Attach Constraint

The Pin Constraint has been expanded and can now pin one marker to another.

Under the hood

This is exactly the same as calling Reparent to parent one marker to another. Except a marker can be attached to many other markers, and their relationship can be animated!

Here's how it works.

  1. Select child
  2. Select parent
  3. Attach

Let's take a closer look.

Here we've got two independent markers. No parent and child relationship. Now let's attach the box to the torus.

As you'd expect, the box is now a child of the torus. You can use the handle to reposition exactly where this box is attached onto the torus.

The position and orientation can be animated too. It's a rather complex little constraint, but very powerful!


Quality of Life

Next up, let's have a look at some of the minor improvements made to put a smile on your face.


Closed Loop Recording

If you parent the tip to the root, you'll get a closed loop. Something Maya natively cannot do, but Ragdoll can. And for good reason, since you can do things like this!

image

However, it wasn't able to record it. 😅 Until now. :)

Why make this an option?

Yes, if it's able to do more than why not just leave this as default and remove the option?

Well, as it happens, there are times when closed loop recording performs worse than regular recording. Keep an eye out for what happens between frames, your rotation channels might be under stress, and let us know in the forums how it got that way. It's something I'd like to sort out.


Pin Constraint Axes

You can now control individual axes of a pin constraint, just like you can with Pose Space = World on normal markers.

image

For example, here's what happens if we pin it along X and Z, but ignore the Y axis.

Likewise, here we only pin the Z axis. Notice how it's only allowed to move along the Z plane, staying at wherever the pin is in Z.

And similarly for X.

The rotation works the same, except Twist represents the X axis and Swing is both Y and Z.


Predictable Enabled State

Every Ragdoll node has an Enabled attribute for you to temporarily and non-destructively enable and disable the node without physically removing it from the scene. It acts indentically to physically deleting that node, but is safe to do even on a referenced node.

However, in the previous release you could find yourself..

  1. Setting Enabled = Off
  2. Setting Enabled = On

Only to then not actually having it enabled. What's up with that? 🤔 When you..

  1. Setting Enabled = On a second time

It works. That isn't particularly intuitive, and has now been fixed!


Infinite Terrain

If you provide Locomotion with a terrain, it will generate a heightmap from it. Where there wasn't geometry, such as outside the borders of the geometry or inside of holes, it would struggle to figure out what to do.

This release now extends your terrain in every direction, such that you get more what you'd expect.

Notice how he's able to start outside of the terrain, and step on missing parts of the terrain!


Simplified Density

Fewer options for working with density, now it's just a single number.

As it turns out, the presets were really limiting and was rarely a good fit for anything. And they didn't make intuitive sense either. "Uranium"? I don't know how heavy that is, when should I use it?

So instead, a single Density value with a default value of 1 remains. This is the previous Density Custom attribute with a shorter name, so if you were already using this attribute then you already know what to expect.

With a special density of 0 you'll be greeted by the Mass attribute to disable automatically computing mass from the size and volume of your shape.


Ignore Mass

You can now choose to work with Stiffness values without worrying about the weight of markers.

This can help get a better understanding of what a value of 1 means, as it would no longer depend on the mass of a marker, which is automatically computed per default. The marker would retain its mass, such that if a heavy marker fell on a light marker it would still act accordingly. But the stiffness values would act as though they weighed the same.

Should this be enabled per default? 🤔 What are the consequences of this option? Let's find out!


Frameskip Default

When a frame is skipped, Ragdoll would normally pause simulation and wait for you to return to the last successfully simulated frame. This ensures that the simulation always produces the same result each time you play. But also means it is unable to solve if Maya skips a frame, as can happen when a rig is especially heavy or when playing back with Audio.

This mode is called Pause and the alternative is a mode called Ignore which will continue solving even though it isn't given each and every frame.

image

Ignore is now the new default, to avoid surprises especially for beginners who might not know why simulation suddenly stops for no apparent reason. You are still advised to stick with Pause especially towards the end of fine-tuning your work. That's the only mode in which Ragdoll can guarantee that each and every playthrough is identical unless you have actually changed something in your animation.

The two lines towards the bottom tell you two things.

  1. Which frames were successfully read from Maya
  2. Which frames were simulated

Ideally, for the most accurate and consistent results, these two should be identical. And when they are, they are hidden. They can be explicitly enabled via the Solver Display settings, called Draw Buffer.

image


Output Geometry

In addition to the Convert to Mesh menu option, advanced users can now also experiment with the new rMarker.outputGeometry attribute which provides access to the computed convex hull!

This is a live attribute, regenerating the mesh whenever anything affects the convex hull generated for collisions.


Cache HUD

You'll now find buttons in the viewport for manipulating the solver cache.


Record Stuck at 0%

Some users experienced recording getting stuck before it even began.

This should solve that!

Behind the scenes

For you programmers and riggers out there; as it turns out, calling OpenMayaAnim.MAnimControl.setCurrentTime is not safe. When Maya wants to compute one or more things in parallel, this call could cause a deadlock. The simple solution, and the one employed here, was to instead use cmds.currentTime. It was the strangest thing.

The alternative solution was to use Serial or DG evaluation modes.


Import Solver Attributes

A bug was found whereby the attributes from your solver would get exported properly, but not imported! This has now been fixed.


Use Selection for Record

The previous release broke the Use Selection option for Record Simulation and Snap to Simulation commands. This has now been fixed!


Fields Crash

A bug was found (thanks Andrei!) whereby having fields on your scene could cause a crash. This was related to the field trying to also affect the "world" rather than just the markers. This has now been fixed.


Solver Bounding Box

Minor nitpick, if you had 2 or more solvers, unselected, and tried to "Fit all" (the F or A-key), it may not have actually fit all of the solvers. This has now been fixed.

The problem was that each solver was taking every marker into account, even those that did not belong to it.


Locomotion On Linux

We spent a lot of effort getting Locomotion running on Linux, only to trip over our own feet for release and include a spelling error in the Maya .mod file causing Ragdoll to not find the Locomotion executable!

This has now been fixed, Linux users unite!


Viewport Refresh

Disabling and enabling a marker could sometimes leave it behind in the viewport, until the solver was hidden and unhidden, or the scene reloaded.

This has now been fixed.


Locomotion Crash

Ragdoll could sometimes bring Maya down when opening a scene containing a plan, for locomotion. This happened due to some really intricate memory and threading issues that you would not be interested in knowing more about. 😊 Rest assured, this has now been fixed!