Latency – the sine qua non of AR and VR
blogs.valvesoftware.com
blogs.valvesoftware.com
You could render a 'latency' buffer past the edges of the panel's physically viewable viewport and then the panel could expose that zone along with head movement while the rendering continues to work on catching up with the actual shift. When the head comes to a stop for even a handful of milliseconds the display can recenter while the scene is rendered to "time current" position.
+------------------------------+
| <<< "over scan area" >>> |
| +----------------------+ |
| | viewable by user | |
| | | |
| | | |
| | | |
| | | |
| +----------------------+ |
| <<< "over scan area" >>> |
+------------------------------+
This might leave enough "headroom" too keep up with potential movements at very low latencies.I had to go to the mirror and try the little experiment described in the intro.
Not totally convinced yet, gotta try with someone as witness. ;)
[1] https://en.wikipedia.org/wiki/Blindsight_(Watts_novel)
[2] http://www.rifters.com/real/shorts/PeterWatts_Blindsight.pdf page 236
“He frequently begins a technical discussion with an anecdote that draws parallels between a real-life experience he has had, and the article's subject matter. His prose encourages readers to think outside the box and to approach solving technical problems in an innovative way.”
> But that means that rather than doing rendering work once every 16.6 ms, you have to do it once per block. Suppose the screen is split into 16 blocks; then one block has to be rendered per millisecond. While the same number of pixels still need to be rendered overall, some data structure – possibly the whole scene database, or maybe just a display list, if results are good enough without stepping the internal simulation to the time of each block – still has to be traversed once per block to determine what to draw.
You could do a pretty simple hack though, that might be good enough: Render the frame onto a buffer, as usual, but instead of displaying it, re-render it using beam-racing with the proper rotation around the viewer to counter the latency of the rendering and transfer time.
This would be a bit like how Google Streetview interpolates the panoramas when you move, but very much simplified, since you only correct for rotation.
Edit: Fixed the "ream-racing" typo.
Once the demand existed for VR headsets for these applications, perhaps hardware vendors would/could start producing low-latency displays as a way to compete in this market.
Then, real VR applications could be made to take advantage of the newly available VR headsets.
Instead of tracking the head, the fake-VR could define slight translations and slight rotations corresponding to WSAD etc a bit like the Wii works with Red Steel.
I think that, without full VR, would already be an improvement for folks who want to play shooters today but get thwarted by the controls.