Comment on Why don't we have motion smoothing on current consoles?
Boomkop3@reddthat.com 3 days agoIt’s worse
30fps
- render frame 1 - 33ms
- show frame 1
- render frame 2 - 33ms
- show frame 2
- render frame 3 -33ms
- show frame 3
latency: 33ms
30fps interpolated
- render frame 1 - 33ms
- render frame 2 -33ms
- interpolate frame 1|2
- show frame 1
- start rendering frame 3…
- wait 16ms
- show frame 1|2
- wait 16 ms
- show frame 2
- interpolate frame 2|3
- start working on frame 4…
- wait 16ms
- show frame 2|3
- wait 16 ms
- show frame 3 -> this is a whole 33ms late!
- …
And that’s while ignoring the extra processing time of the interpolation and asynchronous workload. That’s so slow, that if you wiggle your joystick 15 times per second the image on the screen will be moving in the opposite direction
jarfil@beehaw.org 2 days ago
Hm… good point… but… let’s see, assuming full parallel processing:
So…
Effectively, an input-to-render equivalent of between a blurry 15fps, and an abysmal 8.6fps.
Boomkop3@reddthat.com 2 days ago
You’ve just invented time travel.
The basic flow is
[user input -> render 33ms -> frame available]
It is impossible to have a latency lower than this, a newer frame simply does not exist yet.
But with interpolation you also need consistent time between frames. You can’t just present a new frame and the interpolated frame instantly after each other. First you present the interpolated frame, then you want half a frame and present the new frame it was interpolated to.
So your minimum possible latency is 1.5 frames, or 33+16=59ms (which is horrible)
One thing I wonder tho… could you use the motion vectors from the game engine that are available before a frame even exists?
jarfil@beehaw.org 2 days ago
Oops, you’re right. Got carried away 😅
Hm… you mean like what video compression algorithms do? I don’t know of any game doing that, but it could be interesting to explore.
Boomkop3@reddthat.com 2 days ago
No, modern game engines produce a whole lot more than the necessary information to generate a frame. Like a depth map and such. One of those is a map of where everything is going and how fast.
It wouldn’t include movement produced by shaders, but it should include all polygons on screen. which would allow you to just warp the previous frame, no next frame required