Timewarp

From Virtual Reality, Augmented Reality Wiki
Revision as of 14:52, 26 April 2016 by Shadowdawn (talk | contribs)

Jump to: navigation, search

General Information

Timewarp / Time warping also known as Reprojection is a technique in VR that warps the rendered image before sending it to the display to correct for the head movement occurred after the rendering.[1] Timewarp can reduce latency and increase or maintain frame rate. Additionally, it can reduce judder caused missed frames (when frames take too long to render).[2] This process takes the already rendered image, modify it with freshly collected positional information from your HMD's sensors, then display it to your screen. Utilizing depth maps (Z Buffers) already present in the engine, Timewarp requires very little computation.

Timewarp is a feature of Oculus SDK. It was initially released in the version 0.3.1 of the SDK. Positional Timewarp was introduced in Oculus PC SDK 0.6.0[3].

Asynchronous Timewarp (ATW)

Asynchronous Timewarp or ATW is when timewarp occurs on another thread in parallel (asynchronously) with rendering. Before every vsync, the ATW thread generates a new timewarped frame from the latest frame completed by the rendering thread.[1] ATW fills in the missed frames and reduces judder.[4]

How Timewarp Reduces Latency

Without Timewarp, your HMD would capture the data about the position of your head, render the image based on this data (correct angel etc.), then display the image when the next scene is due to be on screen. In a 60 fps game, a new scene is displayed once every 16.7 milliseconds. With this process, each image you see is based on the head-tracking data from almost 17 milliseconds ago.

With Timewarp, the first 2 parts of the process is the same. your HMD would capture the data about the position of your head and render the image based on the data. Before this image is displayed, your HMD captures the position of your head again. Using this information, the rendered image is modified with a mathematical calculation to fit the latest data. Finally the modified image is displayed on screen. The resulting image is more recent and more accurately depict the position of your head at the time of display than the image initially rendered. Timewarp only works in very short distances and time intervals or the resulting image will look unrealistic or out of place.

How Timewarp Increases Frame Rate

Timewarp allows engines to increase or maintain frame rate when they are otherwise unable to do. It does this by artificially filling in dropped frames.

In a game engine limited to 50 frames per second, a new frame is displayed once every 20 milliseconds. To increase the game's frame rate to 60, you need to display a new frame once every 16.7 milliseconds. To increase the fps through timewarp, the last completely rendered frame, not the one that is currently rendering, is updated with the latest data about the position of your head. The modified frame is displayed before your eyes.[2] Theoretically, this method could increase frame rate from 1 to 60. Realistically, timewarp only works in very short distances and time intervals. Long distances or time intervals will make the image appear unrealistic or out of place.

Limitations of Timewarp

Timewarp works well in a rotational only tracking system. When positional / translational tracking is introduced, it does not work as well and presents a few problems.[1] When timewarp is used with positional tracking, only the rotational change is reflected in the resulting image. The positional change is ignore, causing judder. This is solved through the introduction of Positional Timewarp.

Moving objects such as an animated character can also cause judder. The notice-bility of the judder depends on the size, number and speed of the moving object.[1] Large and fast moving objects can cause very noticeable judder.

Positional Timewarp

See also: Positional Timewarp

Positional Timewarp solves positional judder caused by translational movements.

It is accomplished by ???

References

  1. 1.0 1.1 1.2 1.3 https://www.oculus.com/blog/asynchronous-timewarp/
  2. 2.0 2.1 https://www.youtube.com/watch?v=WvtEXMlQQtI
  3. https://twitter.com/volgaksoy/status/599251845156995072
  4. https://developer.oculus.com/blog/asynchronous-timewarp-on-oculus-rift/