You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Last days I've been taking a look at how Bullet implement simulation islands, since I am implementing a similar scheme in my engine. I saw that bullet runs a broad phase with AABBs and then collect the islands based on it (the AABBs are increased a bit to account for 'contact thresholds'). The interesting thing is that if the simulation islands change from one frame to another, Bullet does not do any special handling. Therefore, there are two scenarios that came to my attention:
1 - If you have a sleeping stack of objects and you programmatically remove the bottom-most object of the stack, the other objects will remain floating. This is because their activating state are ISLAND_SLEEPING and the fact that the bottom object is gone is ignored/not tracked by the engine.
2 - If you have a sleeping stack of objects and you artificially add a big tangential linear velocity to the bottom-most object of the stack, if your velocity is big enough, the other objects will remain floating. The reasons are the same here... your velocity just needs to be big enough that the broad phase will miss the collision in the very next frame.
Of course, both issues can be circumvented by programmatically activating the other objects.
Nevertheless, I think that this problem could be solved if Bullet would keep track of the simulation islands created in the last frame and simply check if all objects are the same. If the objects contained in an islands are different, that island goes back to active state.
I wonder why this scheme (or something like that) is not implemented in Bullet. Performance reasons maybe?
Thank you in advance.
(I posted in pybullet forum as well, but realized that this forum is more active)
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
Hello everyone!
Last days I've been taking a look at how Bullet implement simulation islands, since I am implementing a similar scheme in my engine. I saw that bullet runs a broad phase with AABBs and then collect the islands based on it (the AABBs are increased a bit to account for 'contact thresholds'). The interesting thing is that if the simulation islands change from one frame to another, Bullet does not do any special handling. Therefore, there are two scenarios that came to my attention:
1 - If you have a sleeping stack of objects and you programmatically remove the bottom-most object of the stack, the other objects will remain floating. This is because their activating state are ISLAND_SLEEPING and the fact that the bottom object is gone is ignored/not tracked by the engine.
2 - If you have a sleeping stack of objects and you artificially add a big tangential linear velocity to the bottom-most object of the stack, if your velocity is big enough, the other objects will remain floating. The reasons are the same here... your velocity just needs to be big enough that the broad phase will miss the collision in the very next frame.
Of course, both issues can be circumvented by programmatically activating the other objects.
Nevertheless, I think that this problem could be solved if Bullet would keep track of the simulation islands created in the last frame and simply check if all objects are the same. If the objects contained in an islands are different, that island goes back to active state.
I wonder why this scheme (or something like that) is not implemented in Bullet. Performance reasons maybe?
Thank you in advance.
(I posted in pybullet forum as well, but realized that this forum is more active)
Beta Was this translation helpful? Give feedback.
All reactions