It's moving along! I got a little quagmired in microoptimizations there for a while, but as of now the
prototype has:
1) multithreaded solver with work scheduling that seems to do well on the NUMA-ish processors that are becoming more popular (Ryzen/Threadripper/Ep
yc, dual ring bus intel processors),
2) incremental memory layout optimization to scoot bodies and constraints around in an attempt to minimize cache misses and to lower the number of multithreaded sync points,
3) body pose integration,
4) a bunch of supporting infrastructure,
5) and as of this week, the beginnings of a new demos renderer and framework. The scale of the simulations involved are a bit too big for the ancient v1 renderer.
Unfortunately, even ignoring the fact that the renderer isn't done, it's a little hard to play with at the moment. The projects currently reference specific nightly build versions of .NET Core 2.0, and there are also some bugs with post build event macros in .NET Core projects that resulted in some hardcoded file paths. I'll address those once newer versions become available.
There's still quite a bit left to do, in no particular order:
1) pulling in the tree I wrote earlier for use as the broad phase,
2) building the new narrow/midphase (involving some new continuous collision detection work),
3) building the new deactivation system,
4) a new character controller that doesn't have gross teleportation-related quirks,
5) filling out the set of available constraints (so far, I've only implemented a ContactManifold4Constraint and BallSocket for testing the surrounding systems),
6) ... and I might feel compelled to rewrite the broadphase again to take advantage of some more recent things I figured out. It would be nice if virtually the entire engine execution time was spent in code capable of taking advantage of AVX512.
I'm hoping to get the basics of the collision detection pipeline in by the end of june. Ideally, that would include box, sphere, cylinder, capsule, cone, and triangle special cases. I'm putting a bit more effort into primitive-primitive special cases in v2 since they have the potential to be much, much faster. More general shapes like convex hulls, meshes, and compounds would follow afterward, but I can't improve them quite as much.
The performance situation is looking
interesting, but I don't really want to get super specific with benchmark numbers until I have a bit more time to confirm realistic test cases- a full pipeline, rather than just a few bits and pieces- to make sure that I'm not just observing weird corner cases that won't generalize. But if what I'm seeing now
is realistic and does generalize, well, it's a significant improvement