Hi, I am currently building, as a hobby project, a little game which has its own physics system. I do the physics myself because I think it's fun and great learning experience. It is 3D and I started off by doing an implementation of GJK and then put EPA on top of it to get the penetration depth. Then the trouble started. I wanted contact points, and EPA only gives a single contact point (using projection and barycentric coordinates), so one has to build up a "persistent cache" of points, but this gives noticeable artifacts from having too few contact points the first few frames. So instead I wanted to do the "one-shot" contact point building, which gives you ~4 contact points in one frame. But this seems very hard to do when you've gone down the GJK/EPA route. I have understood that it is possible to instead use SAT and plane clipping to get the one-shot points. But I want to make this work for arbitrary mesh colliders, which would probably be slow with SAT. Unless I'm mistaken, GJK really shines in the complex-mesh-collider case.
I have been thinking about this a lot. Is it possible to go down the GJK route, but with the GJK output somehow do a "quick SAT", which only considers a few of the SAT cases, and from the SAT output do the plane clipping and get the one-shot contact points? The alternative I am considering is simply going down the pure SAT route and try to use simpler colliders, and write all the OBBvsOBB, CircleVsCapsule etc etc tests, and get the one-shot points from plane clipping. And then perhaps add support for meshes, where I use GJK+EPA and a persistent contact cache. I.e. I get no visual artifacts except when I really really need mesh colliders.
I feel like I am trying to eat the cake and yet keep it.
About me, so you know how to reply: I have a background as a game engine developer, but I have never touched 3D game physics. However, I have a bachelor's degree in physics, but I still find myself lost in this algorithm jungle.