As far as I understand:
_process is executed once per frame.
_fixed_process is executed once per physic tick, which sometimes is not always the same as the framerate (but has to remain constant due to physics engine constraints). Some games even lower it to 30 fps to reduce CPU usage (then they interpolate movement in visuals).
_process framerate is ideally constant, 60 fps most of the time. But it can fluctuate for several reasons:
- Maybe your PC is very busy and can't maintain a stable framerate
- Maybe something in your game takes more than 1 frame to complete, so it causes a delay which makes FPS drop (after 1/60 seconds, Godot is still busy and has to drop the frame)
- Maybe the player changed options such as V-sync, which decides wether or not Godot will wait for the screen to finish drawing the frame before running the next
Reasons above can affect at which interval of time your
_process is called, and will also affect the value of
delta, which will be higher if framerate drops (because more time elapses).
_fixed_process, on the other hand, is always called with the same
delta. You can visualize its time interval in the Profiler:
As you can see, the blue curve shows how long the frametime is, including the time Godot waits before drawing the next frame at 60 fps. It fluctuates a lot (because the OS is not precise enough to always sleep at 1/60 second), but as long as its below 1/60 seconds, the game will run smoothly. The screenshot was taken in debug mode so performance is poor and you can see a lot of bumps. The red line however, shows the fixed frametime, and it's constant. It always takes the same time, and if it can't, just drops the frame (you can see it doesn't run at the big spike).
Note: "fixed frame time" is the actual time limit for frames. If you want to visualize how long
fixed_process takes to finish, you have to tick "fixed time". "idle time" is how long Godot waits before drawing the next frame, I guess. I don't know exactly how these values are computed, but I understand why they look like this on the graph.