RBD on Wire
11128 3 1- aliax
- Member
- 58 posts
- Joined:
- Offline
- johner
- Staff
- 823 posts
- Joined: July 2006
- Offline
This is a more complicated version of the question asked over at odForce here. [forums.odforce.net] Basically you've set up a one-way constraint between the end of the wire object and the box that's hanging from it. Because it's one-way, the box cannot affect the motion of the wire at all. If you disable the hanging box completely you'll see that the wire motion is exactly the same with the box or without it. It's also why you've gotten away using the defaults for the elasticity of the wire: if the box were actually exerting a force on the wire, you would need a much stronger Linear Spring Constant in the wire to keep the wire from stretching.
So, the bottom point of the wire is dictating the movement of the box, but the box cannot change the path of the wire as it hits obstacles. The result is that the box is forced to drag through collisions like you're seeing.
Unfortunately the solution is a little tricky. The most obvious solution would be to check the “Mirror Constraint” box on the WireGlueConstraint that constrains the box to the wire, making it a two-way constraint. In my opinion that should work, but unfortunately it doesn't. I believe it would work if the wire and box were using the same solver, but they're not, obviously. When you set that parameter, neither the end of the wire nor the box move at all anymore. I think what is happening is the wire solver runs, constraining the wire to the current location of the box, then the RBD solver runs, constraining the box to the current location of the end of the wire, and the end result is neither of them move at all.
A workaround is to switch from the Hard Constraint used in the WireGlueConstraint to the SpringConstraint used in the SBDSpringConstraint. Because it's a soft constraint it seems like both constrained objects are able to build up a little momentum and affect each other while still moving.
To get the rest of the sim to work you'll have to tweak a bunch of stuff: the strength and damping of the wire and the spring constraint, the friction on the RBD objects, the density of the RBD objects, etc. Also, probably substep the entire Dop Network (on the Simulation tab). Attached is a version that sort of works, but you'll need to tweak it more.
So, the bottom point of the wire is dictating the movement of the box, but the box cannot change the path of the wire as it hits obstacles. The result is that the box is forced to drag through collisions like you're seeing.
Unfortunately the solution is a little tricky. The most obvious solution would be to check the “Mirror Constraint” box on the WireGlueConstraint that constrains the box to the wire, making it a two-way constraint. In my opinion that should work, but unfortunately it doesn't. I believe it would work if the wire and box were using the same solver, but they're not, obviously. When you set that parameter, neither the end of the wire nor the box move at all anymore. I think what is happening is the wire solver runs, constraining the wire to the current location of the box, then the RBD solver runs, constraining the box to the current location of the end of the wire, and the end result is neither of them move at all.
A workaround is to switch from the Hard Constraint used in the WireGlueConstraint to the SpringConstraint used in the SBDSpringConstraint. Because it's a soft constraint it seems like both constrained objects are able to build up a little momentum and affect each other while still moving.
To get the rest of the sim to work you'll have to tweak a bunch of stuff: the strength and damping of the wire and the spring constraint, the friction on the RBD objects, the density of the RBD objects, etc. Also, probably substep the entire Dop Network (on the Simulation tab). Attached is a version that sort of works, but you'll need to tweak it more.
- Vladislav Tushevskiy
- Member
- 38 posts
- Joined: Oct. 2008
- Offline
- aliax
- Member
- 58 posts
- Joined:
- Offline
-
- Quick Links