Asynchronous Timewarp

A rapid-fire-tech-talk by Spencer Carver
December 16, 2016

The Problem we're trying to solve:

  • Judder - a television screen artifact that occurs when content recorded on film is shown on a television with a 60Hz refresh rate. (a.k.a Soap Opera Effect)

This is (mostly) fine for television, but not for Virtual Reality.

  • 1080x1200 screen resolution per eye
  • 90 Frames-per-second (FPS)
  • Needs to match user's expectation of movement

The 3 VR Platform Approaches

Oculus Rift

HTC Vive

Playstation VR

Lock Hardware to 45 FPS




Interpolate to 90 FPS

Lock Hardware to 60 FPS




Interpolate to 120 FPS

Allow Hardware to render as many 'game frames' as possible

ATW to 90 FPS

Some Math

90 Frames

1 Second

11 ms per frame

However, this is the time that we need the frame to be done by, NOT how much time ATW has to operate.

ATW is running on a separate thread and needs to know if there is another 'game-frame' coming before the deadline.

If there isn't it needs to preempt the GPU's current animation and put in the filler frame. This means we need to poll.

ATW Experimentation

By experimentation, Oculus determined that polling the GPU every 2ms to determine when a new frame is being processed gives enough time for the asynchronous thread to render the filler frame, and also appropriately preempt.

This is only possible on Windows 8+ at the moment, as it was the first major OS to support preemption at a fine enough granularity for single frames.

Limitations

  • While ATW allows less powerful computers to run medium-quality VR programs, the baseline is still quite high
     
  • Filler frames often have artifacting done from the interpolation algorithm, though these are difficult to notice as they're only shown for 11ms (if at all)
     
  • GPU preemption is architecture specific, meaning there are MANY driver dependancies that need to be released by other companies to utilize this feature

And the biggest limitation of all....

Asynchronous Timewarp Only applies to rotational movement in VR. Any positional / translational movement, will cause the filler to fail, introducing judder such as below:

Source: Oculus

To eliminate this judder, you need another process running an algorithm Oculus has dubbed:

Asynchronous Spacewarp

A rapid-fire-tech-talk by Spencer Carver
December 16, 2016

(This one is really just black magic)

Source: Oculus

An example

Source: Oculus

An example (side-by-side)

Another Example

Source: Oculus

Sources

Made with Slides.com