Once and for all - is PhysX 3.3.2 deterministic when using a fixed time step on the same machine?

Hi folks!
So I have a question that seems to have come up a lot but I keep finding different or vague answers…

Is PhysX 3.3.2 deterministic?? When I use a completely fixed time step, as described by this article [url]Fix Your Timestep! | Gaffer On Games for example, and feed in identical input, on the same machine, will PhysX give me exactly (bit for bit) the same result between 2 separate runs of the application??

I’ve found many conflicting answers to this on various threads but these seemed the most official…and yet still conflicted…

This thread: [url]https://devtalk.nvidia.com/default/topic/543510/run-physics-simulate-several-times-get-different-results-why-/[/url] which states there’s some determinism. I’ve also had a quick go at fixing the time step in Unreal 4.7 and that seemed to give deterministic results, which is what I’m after, although I didn’t check at a byte level…

But then this article seemed a pretty definitive answer to the contrary [url]http://www.nvidia.com/object/physx_knowledge_base.html[/url] They say the following: “the PhysX SDK is not deterministic. Especially when running different hardware setups, bus latencies can vary between runs, or on different machines. Even without hardware in the machine, we do not guarantee any type of determinism.

So now I’m wondering if my test was a fluke, or whatever version of PhysX Unreal had at the time just happened to be deterministic at that point for that use case.

So does anyone know what the answer is?? Is all/some/none of PhysX 3.3.2 deterministic??

Thanks very much in advance for any insights :)

Hi there.
Got the same question, it seems for our tests that the answer clearly is “no” when there are a high enough count of interactions (collisions and/or joints)…

Even with physX running in single thread, we could not get a simulation to be exactly the same (we have automatic tests that compare the same frame over different simulations)…

Now what I’m wondering is: is there anything else that can be done apart from the thread count to achieve determinism with physX ?

oK, I got an answer form Nvidia:

“PhysX is deterministic, regardless of how many threads you use.”

You just have to make sure the scene is re-created (not just re-used) between each run.