Community
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Live Collision Detection in 3ds Max

Live Collision Detection in 3ds Max

So this is sort of the holy grail for 3d animation as far as I'm concerned.  At it's most complex I'm sure it would be extremely hard to implement and grind workstations to a halt.  However a simpler incarnation seems practical given today's hardware.

 

The idea is this: right now when we work in the viewports, we are basically manipulating a bunch of objects that have no mass or physical structure.  It's like pushing air around.  Any one object can intersect any other object freely.  Sometimes that's good.  But often it's not.

 

I'd like to see some live collision detection (as a toggle) where an object will no longer be able to pass through every other object.  I realize this would be extremely taxing if there was loads of complex geometry in the scene. But what if you could just select a few "live" objects?  One might be a point helper and the other a ground plane.  The live collision toggle would make it impossible to push the point helper (pivot) "through" the ground plane.  If you made a sphere or box primitive live along with the ground, then their mesh vertices would not be able to push past the ground layer.  If the meshes were very detailed then max could make simpler proxy objects on the fly (similar to massfx).  

 

Instead of making objects live piece by piece -- you could instead implement a "Limit box" (like the point cloud) or a "sphere of influence" that allows users to adjust the area where collision detection is active.  Object properties could be set to keep some objects always excluded from collision calculations.

 

So at its most basic, this form of collision detection is the ability to make a few objects "active" or "live" and have Max prevent intersections actively.  If not prevent them, then at least Max could detect intersections -- a red glow (or colored vertices) would appear near the intersection or whatever. 

 

 

A step up in complexity would look at interconnectivity between objects (as in hierarchies or rigged systems) and take that into account.... such as when rotating a shoulder bone and the hand bones strike a wall.  

 

The ultimate step up would detect skinned mesh collisions.  Think about animating a character's fingers wrapping around a railing.  Right now that takes a lot of careful adjustments and examining the hand from all angles.  BUT if the skinned mesh's intersection with handrail could be detected/prevented when adjusting finger bones, that would be incredible (but I imagine it would still be slow).  Then add adjustable deformation (based on a softness parameter) as the fingers squash against the solid surface.... but baby steps...

 

Initially if just basic objects could be used, including bones of a skinned mesh, it would mean real progress and we'll start to have some solidity in the viewports. No more pushing air.

 

 

13 Comments

 some steps needs t be done  to this development at least

probedroid
Enthusiast

Have a look at rayfire, maybe.

davision
Advocate

Rayfire is excellent, but it has nothing to do with what I'm requesting here.

probedroid
Enthusiast

You sure? As I understood it you'd like to have live object collision and physics, so you can place and drop things just like in the real world. If that's right rayfire indeed has such functionality. This might at least provide in part what you are looking for.

 

davision
Advocate

It is very interesting, and you're right that it is somewhat "live", but it's not what I'm getting at. 

 

I'm looking for the ability to carefully manipulate objects while other objects in the environment limit their movement.  What Rayfire is doing is literally allowing "drag and drop" -- or "drag and throw".  It would be fine for scattering objects on a surface but not for precisely adjusting rig point helpers or bones.

 

 

probedroid
Enthusiast

Apart from scattering and placing objects I mostly see use for automatic hand and feet contacts for rigs. Motionbuilder has such functionality for floor contacts AFAIK. That shouldn't take too much performance to do.

 

davision
Advocate

Yes, the automatic contacts you are talking about (from Motionbuilder) sounds like the right idea.  And just that, would be very useful.

 

But I also saw this function as being able to handle any type of geometry.  For instance let's say you have a big couch and you want to push it up against the wall.  This collision detection would let you do that easily without having to line it up in an orthographic viewport.

 

 

sebastian___
Advocate

Very useful request. HumanIk had this even in 3ds max 8, and you could have this with lots of characters, even when the system was already busy computing the specialized dynamic inverse kinematics of the plugin. With the old hardware for 3ds max 8. So no, it would not be taxing.

It wouldn't be hard on the resources because a full physics simulation would not be needed for that. Just making sure when you place a chair on the ground, the chair cannot pass through - it would be much simpler to compute than an actual simulation.

And think about how much more easier would be to place tons of things in a house, not having to zoom and check every single item, if it was placed exactly on top of the floor / table / and so on.

 

Hmm, I've checked, the plugin appeared way before 3ds max 8, even for 3ds max 5, so all this was possible with hardware from 2003.

sphelx
Participant

The problem is the number of vertices, with each one having to be individually calculated (assuming no proxy mesh), and the problem becomes exponential if you're talking about skin contact with a realistic character gripping a pole for example, where mesh subdivision in the viewport could be extremely high to ensure accuracy to the final render.

 

But then, that seems like exactly the sort of massively parallel computation that could be achieved by offloading it all onto the GPU with Nvidia FLEX/PhysX or even a direct CUDA solution. Being able to specify individual meshes/elements would enable it to ignore everything considered 'inactive' - For a character gripping a pole, you only want the hand and the pole... Not the feet/clothing/head etc.

 

As per your idea, having interpenetrating vertices indicated (like with viewport xview) could basically be a 'lite' version of this same system, allowing people with insufficient GPU's (or no discrete GPU) to still reap the benefit of interpenetration being detected and made visible, but at the considerably reduced computational cost of NOT having to react and adjust the mesh; only needing to display it.

michael_spaw
Autodesk

+1

 

I love the idea.

 

-Michael

Kelly_Michels
Autodesk
Status changed to: Future Consideration
 
sebastian___
Advocate

Maybe it would be simpler to have a "collision ON" button somewhere instead of designating each model as "active" or "inactive".

 

When pressed, the collision detection engine would be on. So you can easily place your relatively low poly chairs and furniture in a house. 

When dealing with very high poly model, or when you are not doing that type of scene building, you would just stop that feature by pressing the button again.

Or maybe instead of pressing a button, just keep a keyboard key pressed when you need to place a model somewhere.

 

For most objects taking in account just the bounding box would be enough to properly detect a floor type object under.

 

Another optimization would be that engine calculating on the fly a mesh convex hull and using that to detect the collision - and not the high poly actual mesh. The old Reactor could do that I think.

 

elchivatto
Observer

 AUTODESK, PLEASE MAKE THIS REAL!!!!!

 

HeartHeartHeart

Can't find what you're looking for? Ask the community or share your knowledge.

Submit Idea  

Autodesk Design & Make Report