64 Commits

Author SHA1 Message Date
a27a5ccde6 Reimplement tyre model to use separate longitudinal/lateral formulas, also use pacejka94 2025-04-27 21:24:25 +04:00
b0fb81d88c Increase lowest rpm to fix no torque when starting to go uphill 2025-04-27 17:29:01 +04:00
3bab8ac88e Proper raycasts against other rigid bodies instead of a fake plane 2025-04-27 17:06:04 +04:00
fe71efcafd Fix suspension, adjust car collision 2025-04-27 13:37:58 +04:00
5c797145ae Fixed power delivery from engine, now 0-100 time seems to be in the right ballpark 2025-04-27 12:40:46 +04:00
cbe0dd20e5 Gears and engine->wheel power transfer. Not working well yet, it's losing a lot of power somewhere. Maybe it needs to be a position constraint 2025-04-27 00:02:23 +04:00
c3945a80e5 Use proper real world scale for the car 2025-04-26 21:28:06 +04:00
78ab4eeae9 Start implementing engine simulation 2025-04-26 20:29:58 +04:00
91cd60b155 Add hood cam, tweak tyre params, split split angle and split ratio params 2025-03-23 22:53:50 +04:00
77242a9989 Tweak tyres and breaking force some more 2025-03-20 00:55:40 +04:00
22c2224dea Tweak tyres, fix asymmetry in pacejka formula 2025-03-20 00:46:50 +04:00
b6866f53f3 Tweak pacejka params a bit 2025-03-18 03:28:40 +04:00
31cb9879cc Pacejka 96 for tyre friction, combined friction using the Beckman method 2025-03-18 03:12:43 +04:00
8caf47003e Proper brake force using friction 2025-03-16 15:49:10 +04:00
bf7b7e6ae3 Implement wheel rotation and friction 2025-03-16 14:53:13 +04:00
2410ed9b4b Add static and dynamic friction 2025-03-16 00:22:20 +04:00
fb1643e6e6 Fix mem leak, change number of stacks 2025-03-16 00:17:00 +04:00
60522ea836 Reimplement suspension, now with correct friction using PGS 2025-03-16 00:00:48 +04:00
50d0401479 Implement friction in PGS 2025-03-15 20:53:45 +04:00
d1feaa0602 More progress on PGS 2025-03-09 22:54:40 +04:00
a2ad9e490a Refactor collision detection to support persistent contacts across frames 2025-03-09 15:04:13 +04:00
cb24365933 Start implementing a different solver 2025-03-08 23:46:14 +04:00
ccd987aeae Start implementing optimized substepping (collision detection only once per frame) 2025-03-08 14:50:39 +04:00
c3ac6c2db1 Change iteration counts, fix extra snapshots when no steps were taken 2025-03-02 21:30:37 +04:00
860f9f59b6 Optimize edge separation test, use SOA structs in more places 2025-03-02 21:14:12 +04:00
a1e8d0f231 Disable edge separation tests for now and make a stress test 2025-03-01 20:54:26 +04:00
0f60cdda13 Use BVH to find potential collision pairs before simulation steps 2025-03-01 20:12:54 +04:00
503d6170c2 Fix restitution and start implementing BVH acceleration for collision 2025-03-01 19:04:01 +04:00
c91018fec8 Remove unnecessary rl dependency in physics engine 2025-03-01 13:30:25 +04:00
c2b831a4d6 Implement simulation rewind 2025-02-09 19:54:44 +04:00
aa1dab6079 Update shape from immediate_body 2025-02-09 19:33:19 +04:00
d816e96c3e Refactor convex shape handling
This will allow me to implement rewind easily
2025-02-09 19:15:56 +04:00
bf995882e6 Double buffer physics state to allow easy debugging and interpolation
Fix a bug in restitution
2025-02-09 02:21:34 +04:00
66f42c3cee Implement restitution, better hack for static friction 2025-02-04 01:51:54 +04:00
9f6d57b5ea Fix dynamic friction (mistake in paper actually), improve friction 2025-02-02 21:45:25 +04:00
ef51a9ee30 Fix convex mesh to remove coplanar faces, fix contact debug visualizer 2025-02-02 03:01:28 +04:00
25ff57168b Collisions for the convex shape 2025-02-02 02:41:24 +04:00
999a7a4631 Calculate inertia tensor for the convex hull, convert simulation to use full inertia tensor matrix
I couldn't figure out how to diagonalize the inertia tensor matrix so I will go the simle route and just use the full 3x3 matrix
2025-02-02 01:17:35 +04:00
660a535a7c Experiment with different com calculations 2025-02-01 01:07:18 +04:00
76f3b9ef75 Calculate center of mass for convex meshes 2025-02-01 00:13:55 +04:00
8cefc48049 Load convex from obj 2025-01-31 02:35:02 +04:00
196bafb401 Static and dynamic friction working, it's starting to look pretty convincing
Still got a bug when colliding with edges at some specific rotations. Probably fucked relative position conversion somewhere and using a local pos instead
2025-01-26 22:43:23 +04:00
1a74039ad8 Static friction and refactor constraint params 2025-01-26 21:53:53 +04:00
aca890bcb7 Super stable collision resolution
- Store collision manifold points as local to body before applying them, this way penetration can be calculated exactly for each contact point
- Fix implementation error in closest_point_between_segments
- Calculate separation for each contact point separately
2025-01-26 17:31:28 +04:00
19a1398068 Try to fix edge collision issues, more debug stuff 2025-01-23 04:06:11 +04:00
f2f23ee2e0 Proper stable collisions
Turns out when you get a collision pair YOU SHOULD HANDLE CONTACT RESPONSE FOR BOTH BODIES, NOT JUST ONE OF THEM
Otherwise they move and their next collision (if a->b, b->a are found and resolved separately) they might penetrate badly or worse and everything blows up

This is probably not as important in sequential impulse type solvers because the actual position update is deferred, but in a position based one it's pretty important as it turns out.

It's also better for performance because I don't have to run the collision query for the same two bodies two times
2025-01-23 02:16:12 +04:00
b40dd32b36 Funny boxes flying 2025-01-19 23:46:01 +04:00
4f7a494fff Interesting... collision response 2025-01-19 22:15:22 +04:00
0961b7551a Manifold contact optimization 2025-01-19 21:44:42 +04:00
82470ca3c7 Edge contacts and fix bug with face contacts 2025-01-19 18:16:52 +04:00