Fix contact generation with backface collision disabled #55073
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Replaced the previous implementation for backface collision handling (in test_axis function from SAT algorithm) with much simpler logic in the collision generation phase with face shapes, in order to get rid of wrong contacts when backface collision is disabled.
Now it just ignores the generated collision if the contact normal is against the face normal, with a threshold to keep edge contacts.
Added a special case for soft bodies to invert the collision instead of ignoring it, because for now it's the best solution to avoid soft bodies to go through concave shapes (they use small spheres for collision detection). This might be replaced with a better algorithm for soft bodies later (maybe CCD).
Fixes #54208
Additional tests on the following projects:
-MRP from #50218
Previous issue with wrong contacts with backface collision disabled still fixed.
-Test shapes from godotengine/godot-demo-projects#638
No regression spotted.
-Test with soft bodies to make sure they don't go through the ground more easily than before
soft-body-4.0.zip
No regression spotted.
-Backface collision test with multiple shape types
backface-collision-4.0.zip
Bodies go through the top plane (backface disabled) and collide with the bottom plane (backface enabled).