Chaos definitely does not have these two features we’re using. I’ve just checked through the UE5_earlyaccess source code. I’m sure this also isn’t an exhaustive list of features that PhysX has that Chaos currently doesn’t, these are just the ones I myself am aware of because we’ve required them.
FContactModifyCallback is in fact very explicitly not implemented by Chaos, which can be seen by looking at some of the comments in PhysCommandHandler.cpp:
#if !WITH_CHAOS // Chaos doesn't implement these callbacks
Without this you essentially lose all control over the specific collision resolution between two rigid bodies. This is a problem because physical materials and collision channels etc. do not always give you enough low-level control, and as far as I can tell there is no alternative way to achieve this degree of control in Chaos right now.
Another issue is the lack of advanced scene query features. I’m glad to see that Pre/Post filters are still available, but there is no support for several features that PhysX provides. PhysX for example provides the following flags for query data:
// These options are all missing!
Whereas Chaos as far as I can tell only provides the following query options, via EHitFlags
So there is no option to return multiple hits against the same rigid actor, no option to query and return backface collision hits, etc etc.
Currently in UE4, these advanced features are also very frustrating to use because the abstraction layer of the engine does not expose them. These additional flags and query options should ideally be exposed as part of FCollisionQueryParams.
Currently the abstraction layer means you have to write custom code to talk to the PxScene directly, and also copy-paste a lot of the engines’ translation code between PhysX and UE types because this stuff is locked away in .cpp files and inaccessible outside of the engines Physics module…
As some example use-cases:
We use FContactModifyCallback to nuke the mass and friction of very light actors (such as grenades) vs very heavy objects such as tanks. We can’t achieve that control using the primarily exposed features.
We use multi-mesh and backface queries for our bullet penetration system. We use sub-stepped line-traces for our projectiles, and each line-trace segment returns all blocking hits along it’s length including backface hits. This is very powerful information, though using default UE-exposed features, you can only get one blocking hit from a raycast.