So, physics speed and “preciseness” (for the lack of a better word) are definitely related concepts. To see this, imagine you’re running a simulation of a ball rolling down a hill, and the speed of that ball is 10 units per frame. And let’s say you have a small obstacle, like, 2 units in size, as example:
If you run the simulation once per frame, then on frame f=0, the ball is there at the top of the hill, but what happens at frame f=1? Well, it’s going to have moved by 10 units, so its new position is here:
At that position, there is no collision with the obstacle, so even if to our eyes it’s obvious that the ball should have hit the obstacle, there’s no way to for the physics system to have known it.
There are two solutions to this problem: one is, as you’ve already tried it, reducing the speed. However, that might not be desirable in some cases, so another solution is increasing the amount of times you run the physics calculations for a frame. To see that this works, you can imagine the same situation if we ran the calculations twice each frame. So, on the first calculation, it’s as like we were on frame f=1/2 for purposes of calculation, and the ball’s position would be this:
In this case, the physics system can detect a colision ocurred, and it will behave as we expect!
To increase the amount of times the calculation is ran, you can use the
setTimeStep function: Using A Physics Engine | Babylon.js Documentation (babylonjs.com). By reducing the time step, i.e, the interval between computations, you increase the amount of times this is computated.