Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Settings to make non-stretchy rope?
#1
I like the Obi Rope asset and it shows a lot of promise for my work. However, I am struggling to find the right combination of factors to eliminate or greatly minimize stretch in the ropes (and chain.) I have upped the distance iterations, added tethers, shifted the constraint enforcement order, read through the limited documentation on the website and am still missing the right combination to create realistic, non-elastic rope. I can make very realistic rubber bands... And I have only fatally blown up a model once so far, so that is a good thing.

What are the recommended values to use to create realistic rope and chain with minimal stretch? Are there better tutorials available somewhere other than those on YouTube?

Thanks.
Reply
#2
Hi there!

Apart form the youtube videos, you have the official documentation:

http://obi.virtualmethodstudio.com/tutorials/

However we are aware that it might not be of much help when it comes to certain topics such as this one. (working on it!)

The general rule of thumb with constraints (all of them, not just distance constraints, but these are probably the most important for ropes) is that the more iterations you set in ObiSolver->Whatever Constraint parameters->iterations, the fastest they will reach the set stiffness.

Things to try:
  • Set distance constraint iterations to 20-30 (the more particles in your rope, the higher you'll need to crank this up). 
  • Use tethers (make sure that at least 1 particle in the rope is fixed, or no theters will be generated).
You say you have tried both, and still your rope isn´t rigid enough. If that's the case, try reducing its resolution and re-initializing it (so that the amount of particles in the rope is smaller). This will reduce the need for high distance constraint iterations. If the resulting rope mesh is too coarse once you reduce the amount of particles, you can increase the smoothness parameter. See:

http://obi.virtualmethodstudio.com/tutor...setup.html


[Start of physics rant]

Be aware that Obi is an iterative solver (like PhysX, or Bullet). This means it will only reach absolute, inconditional stiffness with an infinite amount of iterations. When faced with large mass ratios (i.e. extremely heavy crate hanging from extremely light rope), this will only get worse.

There's no general, high-performance algorithm to get stable and perfectly stiff rope/chains, afaik. They only one that gets close is ABA-Featherstone, but it has its own shortcomings: it cannot handle loops of any kind (closed ropes), and the cost of impulse-based collision resolution can be extremely high for long ropes (as each impulse affects all links in the rope, not just the one directly hit).

Another one that's popular is FTL (follow the leader) but unfortunately it's not really an accurate physical model, but more like a hack that resembles actual physics. Also cannot handle general ropes in its basic form, just the case where a rope has only one end attached.

[End of physics rant]
Reply
#3
Jose,

Thanks. I have upped the iteration count and lowered the resolution of the rope object - both of which improved the performance. Increasing the mass of each particle helps as well.

However, when I looked closer at the tether constraints, I saw they actually weren't being generated. I took a few steps back and modeled a simple vertical rope object between two rigid bodies - similar to the pendulum example shown in the Youtube tutorial. Particles at each end of the rope object are pinned to the corresponding rigid body. I had not "fixed" the top particle of the rope, and had only pinned it to the top rigid body - which I had set to Kinematic and moved using a simple script. The elastic behavior was great, but not what I need. Since you reminded me that at least one particle needed to be fixed (which I initially thought was handled by the pin constraint) I went back to the particle editor and fixed the top particle. I then parented the rope object below the top rigid body and generated the tethers. The tethers solved that problem for the simple rope. The rope doesn't stretch much with the tether constraints.

What I am trying to do is approximate a real world example of a crane hook lifting a multiple part rigging sling that in turn lifts another object in a marine environment (which just helps keep everything dynamic...) The lifting "rope" can be fixed to the crane boom and moved as needed, with a "hook" object pinned to the other end. The multi part rigging needs to be pinned to the hook object and to the object to be lifted. Fixing the top particles in the rigging ropes seems to negate the ability of those particles to move only subject to the pin constraint between the hook and the rigging. Instead, the top particles of the rigging ropes are locked in position - although their transforms can be moved by a parent object. If the rigging's fixed particles are unfixed and the tethers are cleared, the whole assembly moves in relation to the top fixed point/pinned constraint fine, except the lower rigging ropes are rubber bands.

Am I missing the correct configuration to have multiple, internally tethered rope objects connected to each other, each with their own fixed particles? Is there a way to generate tethers from a pinned location rather than a fixed location?

I was able work around the fixing behavior with the rigging assembly by changing the mass of the top "fixed" particles back to match the mass of the other particles in the rope after creating the tethers. The initiation of the assembly is a bit wild, which I expect (?) is caused by the tethers acting against the now very light top particles, rather than particles with infinite mass. Is there a way to ease in the effect of the tethers when the ropes are started at runtime?

The tethers also don't work with the Obi Rope Cursor. Any new particles that are added to the rope with the cursor don't come in with tether constraints, and after the rope has been shortened, the existing tethers seem to prevent the rope from lengthening. That is a short description. Is there a method to use tethers with the cursor, or is that beyond its capabilities right now?
Reply
#4
(20-06-2017, 11:19 PM)RP-WMI Wrote: Jose,

Thanks.  I have upped the iteration count and lowered the resolution of the rope object - both of which improved the performance.  Increasing the mass of each particle helps as well.

However, when I looked closer at the tether constraints, I saw they actually weren't being generated.   I took a few steps back and modeled a simple vertical rope object between two rigid bodies - similar to the pendulum example shown in the Youtube tutorial.  Particles at each end of the rope object are pinned to the corresponding rigid body.  I had not "fixed" the top particle of the rope, and had only pinned it to the top rigid body - which I had set to Kinematic and moved using a simple script.  The elastic behavior was great, but not what I need.  Since you reminded me that at least one particle needed to be fixed (which I initially thought was handled by the pin constraint) I went back to the particle editor and fixed the top particle.  I then parented the rope object below the top rigid body and generated the tethers.  The tethers solved that problem for the simple rope.  The rope doesn't stretch much with the tether constraints.

What I am trying to do is approximate a real world example of a crane hook lifting a multiple part rigging sling that in turn lifts another object in a marine environment (which just helps keep everything dynamic...)  The lifting "rope" can be fixed to  the crane boom and moved as needed, with a "hook" object pinned to the other end.  The multi part rigging needs to be pinned to the hook object and to the object to be lifted.  Fixing the top particles in the rigging ropes seems to negate the ability of those particles to move only subject to the pin constraint between the hook and the rigging.  Instead, the top particles of the rigging ropes are locked in position - although their transforms can be moved by a parent object.  If the rigging's fixed particles are unfixed and the tethers are cleared, the whole assembly moves in relation to the top fixed point/pinned constraint fine, except the lower rigging ropes are rubber bands.

Am I missing the correct configuration to have multiple, internally tethered rope objects connected to each other, each with their own fixed particles?    Is there a way to generate tethers from a pinned location rather than a fixed location?

I was able work around the fixing behavior with the rigging assembly by changing the mass of the top "fixed" particles back to match the mass of the other particles in the rope after creating the tethers.  The initiation of the assembly is a bit wild, which I expect (?) is caused by the tethers acting against the now very light top particles, rather than particles with infinite mass.  Is there a way to ease in the effect of the tethers when the ropes are started at runtime?

The tethers also don't  work with the Obi Rope Cursor.  Any new particles that are added to the rope with the cursor don't come in with tether constraints, and after the rope has been shortened, the existing tethers seem to prevent the rope from lengthening.  That is a short description.  Is there a method to use tethers with the cursor, or is that beyond its capabilities right now?

Hi!

Tethers work by directly attaching all free particles to the nearest 2 fixed particles. If there are no particles fixed (pinned particles aren't technically fixed, as they are fully simulated), then no thethers can be generated.

However, there's a somewhat hacky way to get tethers for pinned particles (or any particles for that matter): Fix the particles, generate tethers, unfix the particles, add pin constraints. Since tethers are kept even after you unfix particles, you can use this procedure to trick the tether generator into creating any tether setup you need, and just unfix everything after it's done. In a future version we do want to add an option to consider pinned particles too, so this approach won´t be necessary anymore.

You can ease the effect of tethers in two ways: either increase tether scale slightly (they will allow for some stretching before taking action), or decrease their stiffness a liiiitle bit.

Tethers don´t play nice with rope resizing, as you´ve found out. Tether generation is a quite involved process that can take seconds on large rope setups, so unfortunately we cannot generate them on the fly. This is unlikely to change in the future, but we are looking into it.
Reply