[Maya] Automatic Ground Collision?




I watched a Dreamwork’s rigger demonstrate a ground collission with their peacock character from Kung Fu Panda (around 26 mins).

You can check the snippet here:

Is there a way to do this in Maya? So far, the only ground collision I know is using dynamics (i.e nCloth/nucleus).

Nucleus system is fine but its not really real time and responsive to the animation.

Is there some sort of other rigging voodoo that does ground collision?

I was thinking of limiting the controllers (i.e. do not go past -Y coordinate) but that would be counter productive since
(1) it limits the axis orientation
(2) what happens if the character jumps where it needs a follow through (i.e. going past -Y coordinate)

Is there a way around this?


what you can take a look at is the keepout nodes in the maya muscle system, they do require a geometry object to keep out from and a vector to push out to.

basic information can be found here:


There is also a collision deformer that’s part of the cMuscle toolset. Keep out works with joints, but if you want to maintain a certain shape, you’ll want to use the vertex collision.


cMuscle nodes are great for most cases, but for a hero effect like this, especially in pure animation, I would go for a matrix collision system. Basically, you have your collider plane (or more complex geometry) and colliding point - you keep track of the vector between the colliding point and the closest point on the geometry, and the normal on the geometry at that point. When the dot product of the two flips, you know your point has collided.

While this is more complex than a cMuscle system, it is much more controllable. It gives you an indication of how close your point is to colliding, which allows you to feather in the contact, or even establish a dynamic hierarchy of points from furthest to closest, allowing you to achieve multipoint collision as well (in theory, I’ve never actually implemented that).

The crazy part of the KP2 system is that it apparently preserves length while colliding - I would imagine you would need to project a vector along the collision surface somehow. On instinct, I think it would be easier to achieve this with a more open system as opposed to a single node.

EDIT: The above is focused only on point collision, so if you want to keep a character’s feet above the ground plane, etc. Curve collision in the example is absolutely crazy and inspirational, thanks for showing it