I shoot. It takes 15 ms to show up on my screen.
My shot then takes 50 ms to make it to a server, which then takes another 50 ms to be sent to an opponent. What the opponent sees and what I see are off by 100 ms.
If all inputs were handled by the server then everyone would agree on what they see, but delayed by their latency to the server. Interpolation is exactly that. It has significant error and is a serious threat to low time-to-kill competitive games.
> If all inputs were handled by the server then everyone would agree on what they see
You can already have that; no need for streaming. For example, original Quake handles all input on the server and movement feels kinda like skating on ice with the latency. You can feel the latency when you shoot; your gun doesn't actually fire until the server acknowledges it. I've played Quake online somewhat recently, and I absolutely hate how it feels. I can't imagine anyone wanting to play like that. There's a damn good reason why newer engines added client side prediction, even if it makes different players' view of the game inconsistent.
Unreal Tournament, up to UT2004, (maybe later -- I'm not familiar enough with newer ones) are similar. I think they added prediction for player's movement at some point, and that alone makes it feel much better, but jump pads (and such) are still unpredicted, shooting still has latency (I can't recall the details; it's possible that your firing animation/sound is instant but actual projectile only appears on your screen once the server acknowledges it).
It's great when you're playing with <20ms ping but it absolutely sucks to have little to no prediction with higher ping. I much prefer unlagged Quake 3 engine games, where hitscan weapons hit what you see on your screen (they're latency compensated on the server). Otoh some people argue for Unreal because everything's synchronized and you don't see the ugly side effects of prediction, like getting shot right after you leap into safety behind a corner.
Notice that interpolation and prediction are two different things! Interpolation actually increases latency; I turn it low or off in Quake 3. The result is that everyone's movement is jerky (they update when the server sends an update; higher packet rate is better). If you enable interpolation, then their location is going to be interpolated between two most recent updates.
I'm somewhat sure they had movement prediction and client-side replication in the original UT. I base it on the following:
- Vague recollection of the "I hit you with a rocket salvo and saw it explode, and you didn't die, and my rockets suddenly reappeared" moments from when I played it as a kid;
- Memories of reading the papers on network architecture in UT back around 2004-2006, which I'm convinced were describing the pre-2004 version.
- Memories of digging deep into UnrealScript around ~2001, and struggling with understanding what's up with all that "proxy" keyword and "replication" stuff.
Why not both? The data you receive from a server is discontinuous. You interpolate (and potentially extrapolate) to fill in missing data to eliminate discontinuity.