22-10-2018, 10:58 AM
(19-10-2018, 09:35 PM)josemendez Wrote: WaitForAllTasks() is being called 6 times per frame. This means physics is being executed a lot of times each frame, no wonder it takes a lot of time. All contacts in the scene are being copied between C++ and C# multiple times, so you're paying the cost of struct marshaling, x6. (Also, make sure that you absolutely need to use contact callbacks, you might not need to pay even x1).
Make sure you're not running into death spiralling. If you are, reduce Unity's "max physics timestep" parameter. See:
https://www.youtube.com/watch?v=sUVqa-72-Ms
Also remember than deep profiling adds a 60-70% overhead, so things will be much much faster with profiling disabled.
Thanks for help.
I am currently using handler for Solver.OnCollision
and each frame I call Oni.GetParticleVelocities to find out that all particles are in the sleep state to detect that simulation is done.
This probably triggers marshaling, is it? Is there a way to detect that all particles are in sleep without using marshaling? Maybe do it in C++ side.