It works like this: It finds the full frame closest to the current time, takes the position on that frame and interpolates the position of the particle based on the velocity on that frame.
The drawback is that the velocity vector is linear, so if the next full frame position is on a curved path relative to the previous frame, the velocity from the previous frame will not be pointing straight at the next frame’s position and thus there will be a jump in the direction in the middle of the interpolation when the current time comes closer to the next frame than the previous one. You won’t see your particles doing a smooth curved interpolation between the two full frames because that would require reading two files in order to know both positions and velocities which would be much slower.
In short, for particles that are moving mostly linearly without significant change in velocity direction between two full frames stored to PRT, you won’t notice a big jump, but if the velocities are very different, you will see a linear interpolation for half of the subframes after the one previous full frame and then another linear segment after the half.
The following sequence shows sub-frame sampling of a PFlow particle (yellow) blown by a constant wind vs. PRT Loader interpolation (green) on the same sub-frames.
The images were taken on ticks 0,79,80,140,160,239,240, 300 and 320 at 30 FPS. So one frame is 160 ticks, 79 is the tick before the following frame kicks in.
Thus, on frames 0 to 79, the PRT Loader interpolates based on frame 0 and moves linearly along X without any Y influence, while the PFlow is already blown by the wind and moves down.
On tick 80, the PRT Loader starts using frame 1 and places the particle half a frame backwards along the velocity stored in frame 1, so it jumps down.
On tick 140, it is coming close to the correct position and orientation which it then reaches on tick 160 where the PFlow and PRT Loader are coincident.
The same repeats for the next set of images - on tick 239, the PRT Loader interpolates half a frame forward based on the position and velocity from tick 160.
On tick 240, the PRT Loader switches to reading from tick 320’s position and velocity and interpolates backwards half a frame. It then comes closer to the correct position and velocity on tick 300 and coincides with the PFlow on tick 320.