Physics Bugs #9
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
bhop_toc jump at end fall through floorDUPLICATE OF BUG 7walk into wall without moving mouse, walk target is not refreshed at end of wallFIXED in55ff199269
very small mv value fall through ground xDFIXED in05dfb3920b
bhop_arcane_v2 tetris stage accelerators are too strongFIXED inc7263df4ae
,cbf8a1ccfb
Bug 2 identified as physics mesh faces consisting of vertices which don't lie precisely on the face. To fix: generate mesh vertices with half precision and limit the number of vertices per face to 3. Use bnum [u8;N] update to make this great.
WIP branches are
max-area-triangulation
andphysics-bug2
TODO: split concavities into multiple submeshes
Bug 9 is suspected by the Quaternion to be a brush mesh which is misinterpreted by the physics mesh conversion because of identical Face hashes.
Edit:
I don't think identical Face hashes is a problem because distinct SubmeshFaceIds are still generated for each polygon regardless if it points to the same MeshFaceId.
I've been looking into the early collision end bug (not sure which one this counts under - it's where you fall off a platform too early when walking depending on how you landed on it) - so far the only substantial difference between landing on a part going towards or away from an edge is a SubmeshVertId chosen throughout the collision. If it should be different and why it causes weird collision end, no idea yet
This is bug 1, the physics is failing to transfer the point of contact across the edge boundary to another flush minkowski face.
Bug 1 has a fix in the
minkowksi-transfer
branch but it accentuates the effects of deeper bugs with the minkowski MeshQuery implementation. I desperately need a face crawler state visualizer to shake out the MeshQuery bugs.Bug 10 is fixed. It was a combination of leaky acceleration state from a previous physics state (
c7263df4ae
), and rbx_loader interpreting Accelerator as also being boosters (cbf8a1ccfb
). Note that acceleration should probably not be persistent state since it should never persist to the next state, it should always be freshly calculated.Bug 7 is fixed. Bug 5 is a duplicate of bug 7. Predicted intersection times could exceed the maximum / minimum representable Time(i64) values, which were being used like they were implicitly infinity. Refactored face crawler to use explicit Bounds to be able to represent unbounded time limits in
81c9e3470b
. Added a unit testtest_collision_small_mv
in2ecaeb1615
to prove that it is fixed and prevent regressions in the future.An interesting note: Bug 8 (aka surfs in general) seem to behave differently depending on the direction you go - if you're turning into either the negative X or negative Z, the surf behaves reasonably well, whereas you'll basically never be able to surf if you're going positive X or positive Z
I've attached the map (with .txt on the end so it attaches, thanks gitzaname) so you can test it yourself - red indicates negative, green indicates positive (Note: pressing r to reset just kinda breaks so avoid pressing it and rely on the triggers below)
Falling through surfs happens when you move the mouse, which activates
set_velocity_cull
, which mistakenly culls the surf from the contacts.set_velocity_cull
should not really exist in the first place, I believe that a proper fix would involve redesigning when and how contacts are culled.I bet this would be a great bugfix for learning Rust, and would genuinely help the project