Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Bug / Crash  Surface Based Collision - Stutter/Jitter issue
#1
Hi,

I have tried to mimic obi rope videos below to test behaviour of Surface Based Collision enabled ropes.

It has stutter/jitter issues. I am sharing the test video and also the test unity project itself.

Test Video link:
https://drive.google.com/file/d/182J5P_P...sp=sharing

Test Project link:
https://drive.google.com/file/d/1lnPNylN...sp=sharing

Reference Obi Rope SBC videos:
https://www.youtube.com/watch?v=6qP7FX23_x4
https://www.youtube.com/watch?v=9LXeIem4gvM&t=3s

Have a nice day!
Reply
#2
Hi Elmundo,

Just downloaded your project. It works absolutely fine for me, just like in the reference videos. No jittering whatsoever:



I guess you're overstretching the rope, which will of course blow up the simulation as its is physically impossible for the rope to meet all constraints you're imposing at once: it cannot keep the length you're forcing it into and still collide with the objects around it. This will force the rope to alternate or jitter between two states: one that meets the distance constraints (ignoring collisions) and one that meets the collision constraints (ignoring its maximum length). Note this will happen regardless of using surface collisions or not.

If you want to be able to tighten ropes around objects/other ropes, you must allow the rope to "pull back" once it's too stretched by using forces to move the objects that the rope is attached to. This way the rope can prevent the user from further stretching it once it's already tense.

kind regards,
Reply
#3
Hi josemendez,

It works because you have tested the ropes whose Surface-based collision is not enabled Sonrisa Please check rope's Surface-based collision property if it is enabled or not and then try again.

I am so sure not overstretching it. 

Best regards.
Reply
#4
(16-08-2021, 03:11 PM)Elmundo Wrote: It works because you have tested the ropes whose Surface-based collision is not enabled Sonrisa

Nope, I enabled surface-based collisions on all of them. This is clearly visible in the two ropes that collide against the cylinder. If they had no surface collisions enabled, they'd pass right trough it since the gaps in-between particles are very large.



Here's another video showing that. It also shows the overstretching issue at the end. The rope is perfectly still and stable until I overstretch it, jittering appears because the rope can't both keep its length and still collide with the rope it's tangled around. Either constraint must be violated, so it alternates between both. The solution as I mentioned is using forces to move the end rigidbodies, instead of forcing their position. A real-world rope would simply break/snap in that situation.

Also, using some friction for collisions (right now you're using no collision materials) will help with unwanted contact sliding. With no friction, there's no virtually no energy loss upon contact and the ropes will slide around for a very long time. This is specially noticeable when wrapping the two weighted ropes around the cylinder, right they slide side to side very easily as if the cylinder was made of ice.

Another parameter you can tweak is surface collision iterations. Increasing the amount iterations will improve surface collision convergence, if that's what you're after. This setting is global for the entire solver, you can find it in the ObiSolver component: http://obi.virtualmethodstudio.com/manua...olver.html
Reply
#5
Here's a video comparing no friction (dynamic friction 0, the rope at the left) with mild friction (dynamic friction 0.15, the rope at the right):



As you can see the left rope slides side to side and up/down for a very long time since Obi has little numerical dissipation (which is a good thing), while the one on the right loses energy much faster and comes to rest easily. Neither exhibit any jittering.
Reply