TLDR:
- Use delta ONLY in _process, DO NOT use it in _physics_process.
- There are exceptions, especially if you change the Physics Ticks per Second or do a lot of operations in the _physics_process.
- Some built-in functions (like move_and_collide, move_and_slide) already factor in time delta and will misbehave if delta is factored in.
There was another question about this subject, opened by user paxer, which was sadly closed a bit too prematurely and the answer remains a incomplete. Sadly, due to the complexity of the topic there is no simple rule on whether or not to use delta that’s always correct.
Here’s how things actually go about in Godot. ALL value iterations (like movement processing) done in both _physics_process and _process functions are framerate dependent. The more frames per second, the more often that calculation will take place in a given length of time.
The _physics_process function is run on a separate thread on the CPU, apart from the other game code. This ensures that slow operations, like loading large amounts of assets, do not interfere with physics calculations. This separate process is run at a capped framerate which is set in the projects physics settings (Physics → Common → Physics Ticks per Second), at 60 FPS by default.
This means that in most use cases running code in the _physics_process will ensure execution at a constant rate.
However, there are some important caveats to this. For one, the execution is not guaranteed to be at a constant rate - if too many operations take place in a single physics step it will slow down, just like the regular _process function. Additionally, if for some reason the user changes the Physics Ticks per Second, for example to increase precision at high speeds by raising it, calculations that don’t factor in the time delta will be executed more often resulting in different results over time. Some built-in functions like move_and_collide(), move_and_slide() do already factor in time delta to alleviate this issue.
Factoring in (multiplying by) the time delta in both the _process and _physics_process functions will thus ensure constant rates of change over time, and is generally good practice. However, it is important to know that while this is technically also true in the _physics_process function, in most use cases factoring in delta is not necessary here and may, in fact, result in unexpected behavior when used in conjunction with some built in functions. Thus it is usually better not to use delta time in the _physics_process function.