Saturday, February 28, 2015

GDC, OSVR and the Power of the Network

I'll be at the Game Developers Conference next week to talk OSVR with anyone interested in the open-source virtual reality movement. You are likely to find me at the Razer OSVR exhibit (booth 602, South Hall) but you can also contact me to set up a meeting.

Towards the end of the week we will open up the OSVR software source code to everyone on Github on the /osvr organization. We can't wait to help the VR community - a community of innovators, of dreamers, of artists and artisans - dive into OSVR and, together, make it even better.

The power of OSVR is the power of the network. If only two people in the world had an email address, email would be pretty useless. Now that "everyone" has an email address, it is invaluable. The more companies that connect their hardware into the OSVR software framework, the more compelling it will be for game developers to create games on top of OSVR. The more games are created, the more valuable it is to add hardware to it. The value of the framework grows exponentially with the number of products that connect to it.

That's why we are working to make plugging into OSVR software framework as easy as possible. We do this through example programs, through developer assistance, through white papers that show how to convert a VR Unity into Unity over OSVR.

We announced OSVR in January. As I write this, there are about a dozen companies making HMDs that are supporting OSVR. In our experience, it takes between a few hours to a few days to fully integrate an HMD into OSVR. Once integrated, all software that is correctly written with the OSVR framework works on such HMD. If it's that easy, why wait?

BTW, it seems that there will be new HMDs announced at GDC, and we look forward to supporting them as well. Our goal is that OSVR application developers can truly use their code with pretty much any hardware on the market.

We see multiple eye tracking vendors, multiple 3D audio vendors, multiple hand and finger tracking solutions, all coming into the OSVR network. We've added about 50 partners this year. The more, the merrier, because we want to give consumers the choice of selecting the best hardware and software combination for their experience. There are numerous Android devices out there - different screen sizes, wide range of cameras, wide range of CPUs, an endless selection of unique features. Why should VR be different? Why would you want a 'one size fits all' solution?

Of course if your type of device has not been integrated into OSVR yet, it's going to be a bit more work as we would need to work together to define the interface and define it in such a way that it is not unique to your device but rather covers a wide range of similar devices. If you made the first printer that integrated into Windows, you had to work a little harder, but once a print layer services was defined for Windows, it was easy to connect other printers. The OSVR team wants to help in defining the interface and doing everything we can from the OSVR side to make such integration straightforward.

Have a new device or software package that you want to integrate into OSVR? Come talk to us.

The power of OSVR is the power of the community. How many people would we need to hire if we wanted to do OSVR completely in-house and get all the features that are truly desired by the community? 10 people? 100 people? 1000 people? Even if we had 1000 employees working on this, would we have features out quickly enough to satisfy everyone's different set of priorities? Probably not.

That's why OSVR is open. Want to connect to a custom sensor development board that OSVR does not support at the moment? Download the example on how to write a tracker plug-in and do it yourself. Want to support a game engine that is not currently supported? Follow the example of a community member that connected OSVR to a new game engine. Think you have a good 'time warp' rendering algorithm or a new SLAM algorithm or can improve system performance? Show us (and the world) how good you are!

We'll be putting up a Wiki page with some suggestions for new features and improvements, but let's drive the platform forward together.

There is power in being open. Aside from open-sourcing the OSVR hardware and software, we are building upon other open-source projects so that OSVR advances as they advance:

  • OSVR builds upon some aspects of VRPN (see the list of supported devices on the main VRPN page), so that we can leverage many of the existing device drivers. As an aside, OSVR adds a descriptor file to each device so that the capabilities of the device are well-understood by the OSVR application, something that was missing from the original VRPN implementation.
  • The OSVR imager class builds upon OpenCV which provides an incredible amount of computer vision and image processing algorithms, some highly optimized for particular GPUs.
  • Other libraries such as Eigen and Boost, so that we don't have to reinvent the wheel

See you at GDC. Come see our demos, but more importantly, come talk to us about how we can work together. See you in San Francisco!



The post "GDC, OSVR and the Power of the Network" first appeared on the VRguy's blog at www.vrguy.net 







Sunday, February 22, 2015

Connecting a Smartphone to your VR Headset: How and Why?

If you have the right combination of a smartphone, an adapter and a VR headset, you can use the smartphone to drive the headset. Let's look at how it's done and why you might want to do it.

How?

Many phones the ability to output a copy of their screen to an external monitor. Two prevalent standards to do so are MHL (Mobile High-definition Link) and SlimPort. Both provide a copy of the phone display to an external HDMI connector. For this purpose of driving a VR headset, both should be fine, and the choice depends on which method your phone supports. For example, for an LG G3 phone, this SlimPort adapter worked well for us.

Now that you have this in HDMI format, typically at 1920x1080, you'll want a VR headset that supports this resolution. This is a bit more tricky than it sounds because several 1080p headsets expect 1080x1920 portrait mode video format and thus are incompatible with the smartphone output. However, headsets such as the OSVR HDK and the professional Sensics dSight and zSight 1920 can accept standard 1080p landscape-mode video and display the phone output right away.

This approach is not limited to phones. Tablet such as the Google Nexus 7 also features a SlimPort output.

Why?

Obviously, phones or tablets have access to content that would be interesting to watch using a VR headset. For instance, www.youtube.com/3d has plenty of side-by-side movies that are suitable for a VR headset.

Headsets that accept standard 1920x1080 video typically have on-board video processing. This can also be used to turn a regular image into a side-by-side image by replicating it across both sides of the display. This can be very useful to experience non-3D content or standard applications.

One could also imagine a game being run on the phone and the headset being used as a display device. A Bluetooth motion tracker could be installed on the headset and communicate with the phone, or if you have the appropriate software installed on the phone (such as the OSVR software framework), you could communicate with the headset's USB tracker.

The alternative, of course, is to wear the phone on your head with the appropriate adapter - whether the Samsung Gear VR, Google Cardboard, Zeiss VR One and so forth.

What are the advantages of wearing the phone on your head?
  • No cables required.
  • No need to purchase SlimPort or MHL adapter.
  • Can use phone camera within application.
What are advantages of using the MHL or SlimPort method?
  • Can be used with any compatible phone or tablet
  • Reduces weight - no need to wear the battery, the phone case or other unnecessary components on the head. This is especially valuable with a tablet.
  • Allows using the phone's touch screen.
  • With the right headset, can also experience non-3D content or regular applications.
  • Can quickly connect and disconnect if required.
It's worth a try, in my opinion

Saturday, February 7, 2015

Building Wireless VR Goggles

Wireless is good. Most people prefer cordless or mobile phones over corded ones; a wireless network connection over a wired one; wireless game controllers; wireless speakers; wireless charging. You get the point.

Would a wireless goggle - one that does not require cables to connect to a PC - be desirable? I certainly think so. With a wireless goggle, you could:
  • Use the goggle in the living room even if the computer is on your desk
  • Have multiple people use multiple goggles in the same space - such as an arcade - without tripping over each other's wires
  • Avoid the risk of wrapping the goggle's umbilical cord around you as you turn
  • Have greater freedom of movement

While wireless solutions already exist for professional-grade goggles (see this 2012 video of the Sensics zSight to the right), let's examine what it would take to do this for a consumer-grade product such as the OSVR HDK (Hacker Developer Kit)

For a wireless solution, one would need to consider three key components: video transmission (how you get the video to the goggles), wireless tracking (how the PC gets information about where the user is) and power.

Video Transmission

Not all wireless video solutions are created the same, because not all aim to solve the same problem. Here is what's important to look for:
  • Low latency. Streaming a movie or a sports event to your TV does not require tight control over latency. If the movie is shown with a 1-second delay, that is perfectly acceptable. Streaming a game to a goggle with a 1-second delay is completely unacceptable. Sometimes, the need to control latency also dictates whether compression can be used. Compressed video saves on bandwidth but takes time to compress at the transmitter and decompress at the receiver.
  • No line-of-sight requirement. Some wireless video solutions require there the transmitter can "see" the receiver, which is typically called 'line of sight'. Those solutions typically don't work for VR goggles because the whole premise of wireless goggles is to allow the user to move around as well as turn. Such turning will inadvertently result in breaking the line of sight from transmitter to receiver and thus dropping the connection. Other use cases, such as having the PC in one room and using the goggles in another probably don't even have line of sight to begin with. This requirement that the wireless signal can go through objects or walls also influences the wireless transmission frequency. Higher frequency transmission (e.g. 60 GHz) results in shorter wavelength which in turn results in greater difficulty in going through walls or humans. Lower frequency bands such as 5 GHz does a better job in penetrating through obstacles and is thus more suitable for wireless goggles.
  • Support the right resolution. Wireless video solutions were originally designed with home entertainment in mind, and thus focus on supporting standard home video resolutions of 1080p (1920x1080) or 720p (1280x720). However, many consumer goggles use smartphone displays that have a native resolution of 1080x1920 - portrait mode - as opposed to the traditional 1920x1080 landscape mode. Many wireless video links do not support 1080x1920. One solution, that is now available as an option with the OSVR HDK is to use on-goggle FPGA to perform the video rotation, so that the wireless link still carries the standard 1920x1080 resolution but it is rotated in real-time to 1080x1920. This enables using wireless video links with such products (note: see the 'no free lunch' section below)
  • Ability to support multiple independent video links. While this is not required if there is just one video link from the PC to the goggles, it might be required if 1) there are multiple goggles in the same space, and they each want to operate independently; 2) there is a need to carry video, such as from a video camera, from the goggles back to the PC (see this wireless camera) or 3) if the goggles require multiple HD1080p signals such as those goggles that have dual screens

Tracking

Goggles are interactive and thus very often require head orientation and sometimes head position tracking to be sent back to the controlling application. Thus, cutting the video cable is not enough and one needs to find a solution for wireless tracking.

Some wireless transmission technologies - such as WHDI - support an in-band downstream data link. If the transmission of video is considered 'upstream' - from video transmitter to video receiver - a downstream data downlink is sending information from the video receiver (where the goggles are) to the video transmitter (where the PC is). These data downlinks can often carry USB HID (Human Interface Device) messages such as those coming from game controllers and provide a reasonable bandwidth of about 100 kbps. If on-board orientation tracking is formatted into a compatible message, head tracking can be carried to the PC on the same link as the video. This is how tracking is performed in the 2012 zSight video above. The downside of this approach is the update rate. Assuming 60 FPS video, WHDI transmits the downstream data during the blanking periods inbetween frames. Thus, USB HID transmission is also provided at 60 Hz, which is sometimes not interactive enough.

Another method is to use or embed a wireless tracker such as the YEI 3-space sensor. Adding an out-of-band data link ((not on the same link as the video transmission) to a tracker can provide high-rate tracking information without needing a cable.

Other methods are to use trackers that have some kind of base station, such as the Sixense STEM. In this case, the tracker base is connected to the PC. An advantage of this approach is that beyond the head, other parts of the body can also be tracked, as is also the case with the PrioVR suit.

Power

Cutting the cord means also providing local power to the goggles as well as other local consumers of energy - wireless receiver, wireless tracker, on-board camera where applicable and so forth. Including the goggle and wireless receiver, one could expect a power draw of 5-10 Watts (1-2 Amps on +5V). This can typically be satisfied with a 1 or 2 high-current battery such as those being marketed to charge phones and tablets. These batteries are rated in mAh (milliampere-hour) or Ah (ampere-hour). An Ampere-hour means that the battery can theoretically provide 1 ampere of current for an hour. For instance, a 10000 mAh battery that outputs +5V can theoretically provide 10 Watts (2 Amps x 5V) for 5 hours. A typical AA battery provides 2-3Ah. A typical external battery for smartphones can provide 10Ah and a typical car battery can provide about 50Ah (though it would be quite heavy). However, because of many factors - such as the drop in voltage when the battery drains - these figures are a someone optimistic. However, one can often plan for 1-2 hours between charges on an external smartphone battery.

There's no free lunch

What are the downsides of a wireless VR solution?
  • It costs more. One would need to factor in the price of the wireless video link, a potential price increase in the tracking costs, and the costs of a battery
  • There may be a price to pay in video latency. If you use an on-board FPGA to rotate the image from 1920x1080 to 1080x1920, you add 1 frame's worth of latency, or 16mSec. This is because you have the store the entire image in memory before you can start outputting the rotated image.
  • You are often limited to 60 FPS video. Because most wireless video solutions were designed for home entertainment, they provide 1080p @ 60 FPS. Newer solutions that aim to provide higher resolutions might be able to address this issue.
  • You have to carry the battery and the receiver. This is can be done in a beltpack or small backpack.
  • You have to recharge or change the battery from time to time.

What about using a phone for your HMD?

One way to completely overcome this issue is not use a PC. Phone-based HMDs such as Google Cardboard perform all the processing and display on the local phone, thus eliminating the need for wireless video transmission. However, one could probably safely assume that a powerful PC would always have more computing power, more graphics power and access to a wider range of peripherals than a phone, and thus some PC-based experiences could not be replicated on a phone.

Should you do it?

Having discussed the advantages and disadvantages, should you use a wireless HMD? At the very least, you will want to experience it. Having no cables can be quite liberating and is certainly worth a try. Let me know what you think!


The post "Building Wireless VR Goggles" first appeared on the VRguy's blog at www.vrguy.net 



Monday, January 26, 2015

The OSVR Software Stack at CES

When Razer and Sensics announced OSVR at this month's Consumer Electronics Show, most of the attention was focused on the OSVR HDK - the $200 open-source goggle. However, OSVR open-source software platform is at least as important as the HDK. In this post, we'll explore some of the inner working of the OSVR software platform in the context of the CES demos.

OSVR Architecture
By way of introduction, the OSVR software platform provides an easy and standardized way to discover, configure and operate hundreds of devices: VR goggles, position trackers, depth cameras, game controllers and more. OSVR supports multiple operating systems, plugs into leading game engines and is freely available under a permissive Apache 2.0 license

The full OSVR architecture is shown in the figure to the right and is described in greater detail in this technical white paper

Of course not all of these blocks were required for the CES demos. The demos used the OSVR HDK (Hacker Developer Kit - the open-source goggles), and some combination of the Razer Hydra, the Leap Motion Controller and the Nod Ring. Some of the OSVR HDKs were equipped with its built-in tracker (Bosch BNO070) and others were equipped with the YEI 3-Space Sensor. Various software demos were written, some using Unity and some using the Unreal Engine.



CES demo architecture
The block diagram of some of the CES demos is shown on the right. Similar diagrams could show the usage of the Leap Motion or Nod device. All demos were running on a Windows platform though Linux and Android ports of OSVR also exist.

OSVR has a client/server architecture. The server connects to the hardware devices and performs the analysis if required. The client uses this information. In the diagram to the right, the Unity and Unreal engines are clients, through an OSVR Unity plugin and an OSVR Unreal plugin. Everything else is the OSVR server.

Often, the client and the server would reside on the same machine, but there are also some additional possibilities including:

  • Client on one machine, server on another. For instance, you might have the client running on a mobile phone while the server would be a PC that has more processing power and better connectivity to the various peripherals
  • Multiple clients connecting to one server on the same machine. For instance, OSVR includes a graphical utility called "Tracker Viewer" that show the orientation and position of the various tracked devices and has proven to be a useful debug tool. TrackerViewer is an OSVR client and it can run concurrently with other applications such as the demos, connecting to the OSVR server.
  • One machine running client and server, a second machine running a client. This can create a 'shadow' experience on a remote machine.
  • One client connecting to multiple servers. This is useful in some high-end situations where OSVR applications wish to connect to devices (such as ART SmartTrack) that embed a server.
The 'device plugins' layer of OSVR connected in the demos to the various hardware devices and provided an abstract interface to the higher layers, so that the application does not care - for instance - whether the Bosch or YEI trackers are used. This proved to be useful during the show as our booth had a sofa used for demos and one of the trackers did not like the metal rails of the sofa. Swapping in the other tracker was extremely simple. More importantly, the same application can work across multiple trackers without change. OSVR supports for the Oculus DK2 orientation and position trackers which is helpful for those that wish to write cross-platform applications or for those that wish to debug their OSVR code using an HMD they already own.

An interesting software component on the OSVR stack at CES was the "1 euro filter" that is part of the analysis layer. The analysis layer serves to perform post-processing or high-level analysis on data that comes from the lower layer. In this case, the 1 euro filter is a low-pass filter that can be used to smooth and improve data coming from the Razer Hydra positional information.

One feature of OSVR that allows this to happen is the "path tree". Similar to a URL or file system path, the path tree is how all the sensing and rendering data is made available. Aliases are configured in the server to essentially redirect from a semantic path (a path with a meaningful name) all the way back to the system-specific hardware details. For instance:
  • Position of the left hand: /me/hands/left/position
  • Orientation of the left hand: /me/hands/left/orientation
  • All resources associated with the left hand: /me/hands/left
  • Position of the “0” controller of the Hydra: /razer/hydra/position/0
  • Output of the first smoothing filter: /analysis/smooth_filter/0
OSVR subsequently allows defining the connection between the various components. In our specific example, /razer/hydra/pos/0 feeds into /analysis/smooth_filter/0 (1 euro filter) which feeds into /hands/left .

This allows to re-route information or insert or remove software components as necessary. For instance, if the 1-euro filter is not desired, simply map /razer/hydra/pos/0 into /hands/left. If a new filter is available, insert it back.

With each of the above software components, comes a JSON file, which is a human- and machine-readable descriptor file. The JSON file could provide device-specific information (for instance, for an HMD it would indicate what is the resolution, field of view and distortion correction coefficients). For a software component, it could define the semantic path of the inputs and outputs which can help in determining available information routes or facilitate auto-routing. Over time, the JSON descriptor could grow to include other parameters such as device-specific calibration data and so forth.

The CES demos used only a small portion of the OSVR components, but even so, the architecture proved to be useful for both development and ongoing operation. The OSVR community led by Sensics and Razer, continues to add and demonstrate components to OSVR. Whether it's a "locomotion device" (to support products from Virtuix and Cyberith), "eye tracking" or others, the capabilities of OSVR continue to grow very nicely.

The post "The OSVR Software Stack at CES" first appeared on the VRguy's blog:www.vrguy.net

Saturday, January 17, 2015

How Things Work: the Dual-Element Optics of the OSVR HDK

When the OSVR HDK was unveiled last week, one aspect that received a lot of positive reviews was the quality of the optics - clear to the edges, no pre-distortion required. Since the Open-Source Virtual Reality project is indeed open-source, and its Hacker Development Kit will have the full production file available to download in a couple of weeks, I can talk openly about how Sensics designed it for those that are interested.

What's all the fuss about? Take a look at this comparison photo:
Test pattern photographed using an iPhone 4 camera through a dual-element design (left) and single-element design (right)

I took these photos a few months ago when we received the first batch of HDK optics. I found a test pattern on the Internet and displayed it on a 5.5" display, much like the one inside the HDK. I then used an iPhone 4 camera to take both photos. The left photo shows the test image through the HDK dual-element optics. The right photo shows the same test image through a popular single-element eyepiece. I was trying to get the best image in both cases, Is this a scientifically precise comparison? Probably not, but it's quite telling as is.

As you can see, the test pattern is in nice focus at the center of both the left and right photos. However, as you look towards the edges of the photo, the image remains in focus on the dual-element photo but is blurry in the single-element photo. Compare the "gmail" header on the left, quite readable, with the "gmail" header on the right, quite blurry.

You can also see that colors also break up on the right image. You start seeing the separation between red, green and blue. The colors stay intact on the left image. Last, if you look at the three bands of test pattern (right half of left image), you can see that they remain pretty much straight, whereas the same bands on the right image appear curvy.

In short, we are seeing a blurry image, chromatic aberration and geometrical distortion in the single-element design and not so much on the dual-element one.

Is the dual-element design in the HDK perfect? The best Sensics has ever done? The design to beat all designs from here on? Of course not! It's just a good design and solid engineering. Let's look at what makes it better in some aspects than the single-element design.

When we start an optical design project, we look at the requirements. How much field of view are we looking for? What is the screen size we are trying to image? What are the materials we are allowed to use (e.g. plastic? glass?) How much is it allowed to weigh? What are our cost constraints? How much eye relief (distance from cornea to first optical element) do we want? What is the desired eye box (how much the eye can move from the optimal location without significantly losing image quality)? Are we allowing aspheric optics? How wide or deep do we allow the optics to be? and so on...

All of these are constraints and every design has them. But the constraints are different from design to design, much like some cars are built for gas mileage and others are built for super-quick acceleration. That's why there is no single design that is good for every optical problem.

Usually, optics for HMDs have lots of constraints. You typically don't want to make them from glass because glass is heavier than plastic. You have limits on the lens diameter and size because you want to use them in a binocular setting. You don't want them to cost too much because you are aiming at some price target. When you give these constraints to the designer - after he or she finishes pulling their hair out - the design starts.

An optical lens has two sides. The exact curvature of each side can be different. If you have two lenses, you have four surfaces to work with. If you have 5 lenses, you have 10 surfaces to work with. More surfaces mean more degrees of freedom and more degrees of freedom mean that you can meet more of the constraints. So, having more optical elements usually means you can product a better image. In our case better meant less distortion, more focus, less color aberration.

It's almost like curve fitting: trying to fit a polynomial (e.g. y= a + b*x + c*x^2 + d*x^3 + ...) to set of (x,y) points. The more parameters you are allowed to use, the better your fit will be. If your curve is only "y = a", you'd often be in trouble. If you can use "y= a + b*x", you'll have a better fit and if you can use "y= a + b*x + c*x^2" you'll do even better.

So, we decided that a single-element design did not give us a good-enough answer to our constraints and decided to add a second element and give our designers additional degrees of freedom.

Here is what the design looks like


The screen is on the right side. The eye pupil is on the left side. The two lenses are in between: a 32-mm diameter lens closer to the eye and a 43mm diameter lens close to the screen. Note the interesting left-side surface of the bigger lens. It is made this way to optimize the image quality.

Here is what this looks in 3D:


Both lenses are made from optical-grade plastic. The smaller lens is from a material called Zeonex F52R and the larger one is from Polystyrene . There are hundreds of types of optical-grade glass but just a handful of plastics, but plastics are lighter and sometimes cheaper to use. One more constraint to worry about.

Why doesn't everyone use dual-element design? Because others might be focused on different constraints. For instance, dual elements roughly cost twice as much to make as a single element. Dual elements are heavier than a single element. Dual element eyepieces do a better job of controlling color and geometric distortion, but one could correct for color and geometric distortion with the GPU (though I don't know how one can correct for blurriness with the GPU). So, when we designed the OSVR HDK we were focused on some constraints and that's why we chose two elements.

Why not three or four or even five elements? Same story. We don't want it to cost too much. We don't want the optical path to be longer. We want to keep the weight down. Is someone going to soon write a blog post on their 7-element design? Maybe so. I can't wait to read it!


The post "How Things Work: the Dual-Element Optics of the OSVR HDK" first appeared on the VRguy's blog: www.vrguy.net

For additional VR tutorials on this blog, click here
Expert interviews and tutorials can also be found on the Sensics Insight page here

Monday, January 12, 2015

Open-Source Virtual Reality - a week after CES 2015

It's been a week since Sensics and Razer announced OSVR, the open-source virtual reality initiative at CES 2015 (see press release and supporting companies here). I thought it would be good to share some more details on what it is and what we have heard at the show and since then.

OSVR has two independent parts, an open-source software, a powerful software platform built for virtual reality devices and an open-source HDK (Hacker Development Kit), a lightweight, high-resolution HMD that will be shipping by June 2015 for $199.


The OSVR software platform is designed to encourage innovation and make it easier, simpler and safer to write virtual reality applications. Today, authors of VR applications have to decide what hardware they plan to support and then write to the specific API of these vendors. For instance, if you write to the Facebook/Oculus HMD, you need to use their API; if you want to use an Tobii eye tracker, you need to use their API; and so on. This approach carries a couple of challenges:

  • Choosing to support specific hardware limits the number of users that can use the application
  • If the API changes, you need to upgrade the application
  • If new hardware, such as a new HMD, is released in the future, you will likely need to modify the application to support it
Is this a good approach? Probably not. Take a look at this Wordperfect Printer Driver page for a trip down memory lane. Years ago, you had to download a printer driver for your new printer to work with your older application. Today, do you upgrade your word processor when you get a new printer? Of course not. When you plug a new printer into your computer, the operating system typically recognizes it, fetches the appropriate driver and makes this printer available for all applications

OSVR solves a similar problem for VR. OSVR provides software plugins (think device drivers) for hardware that abstracts each type of hardware - such as head orientation trackers, position trackers, eye trackers - and makes the interface the same for the higher-level application. While the performance of different position trackers may be different, the interface to the application is basically the same. While some eye trackers are better then others, the application usually just needs to know gaze direction, blink detection and perhaps pupil size. By abstracting each type of hardware, the application does not need to change when new hardware becomes available. All it needs is a new plugin, the equivalent of a printer driver.

Because the OSVR software is completely free and open-source, one does not have to wait for Razer or Sensics to provide new plugins. Often, the hardware vendor will provide these plugins, but someone from the community can also write such driver and make it available to others. Just look at how many drivers were written for VRPN, a popular open source package focused on trackers. 

Even at CES, we were demonstrating the OSVR HDK with two different trackers. We could disconnect a unit and connect another one with a different type of tracker and the application would not care. We had VR demos running on top of Unity Pro and on top of Unreal Engine. We had OSVR running underneath Unity and Unreal and we had various plugins powering OSVR.

Of course, OSVR plugins are not limited to hardware plugins. We also have a class of plugins that we call 'analysis plugins' which turn data into better information. For instance, at CES we had units with the Razer Hydra controller. Information from the Hydra was then fed into an "analysis plugin" which implemented the "1-euro filter", a data smoothing algorithm. This could be added or removed at will. If you have a better smoothing filter, you can plug in instead of the 1-euro filter. 

Similarly, you could think about plugins that do gesture analysis, face recognition, eye tracking and much more. Not only that, but you might have multiple gesture engines or multiple trackers or multiple eye tracking algorithms. Select the best for your application, just like you select the best email application or photo enhancement app on the Google Play Store.

OSVR software runs on Windows, Linux and Android and I am sure it will be ported to additional environments as well as improved and enhanced.

The OSVR HDK (Hacker Development Kit) is also open-source. In a few weeks, you can go to osvr.com and download the schematics, bill of material, all the source code, the production files for the optics and so forth. You are allows to make these goggles, change them or incorporate elements in your own design. You think the goggles are cool but you have a better screen? Integrate it. Are you an optical expert and can make better optics than our dual-element, low-distortion eyepiece? Go for it! Want to change the front panel? Revise the head strap? Knock yourself out.

Of course, you can also buy a complete assembled unit from Razer ($199, shipping by June) and hack it from there. It is designed for hacking. We put USB3 ports on it, a powerful FPGA that allows changing the video processing and many features that encourage experimentation and improvement.

Why are people excited about this?

OSVR has received several 'best of CES' awards (thank you Popular Science, Tom's Hardware and others) but even more important, our inbox has been flooded with partnership requests whether from industry or academia. People love this concept. They love the freedom to choose. They love the freedom to innovate.

With OSVR, you can showcase your particular VR expertise without having the build a complete HMD to show it. With OSVR, you have a bigger market:
  • If you develop an application (e.g. a game) on OSVR, you have access to a wide range of hardware
  • If you are a hardware developer, by creating an OSVR plugin you can access all OSVR application. You don't have to go directly to the application developer to ask to support your hardware, just like a printer manufacturer does not have to ask Adobe to support a new printer in Photoshop.
  • If you have a unique algorithm, you can test and showcase it with OSVR
At the end of the day, I love that we are tapping into the power of the community Think about it - if you were creating an encyclopedia today, would you prefer the curated model of Encyclopedia Britannica or the community model of Wikipedia where everyone can contribute their own expertise?

Is OSVR perfect? Of course not. Are there many plugins that still need to be written? Naturally, But the open-source approach allows this to happen quickly and reflect the preferences of the community.




Monday, November 10, 2014

How Eye Tracking can impact Head Tracking

I'll be visiting the Society for Neuroscience meeting this weekend in Washington, DC and will surely see some of the latest advancements in eye tracking.

Many times, people ask why is eye tracking useful beyond the obvious applications of facilitating research and providing user interface for people with disabilities.

One interesting application is in using eye tracking to minimize head tracking latency. Consider the following graph:

The graph shows the position of an eye (black line) and the position of the head (red line), provided in degrees over time. Let's look at some areas of this graph:

  • From about 6.5 seconds to 6.7 seconds, we see rapid eye movement from about -5 to +25 degrees. During this period, the head did not move.
  • From 6.7 to about 7 seconds, we see the head moving and, in the same time, the eye moving in the opposite direction. Notice that the sum of the head position and eye position is approximately constant throughout this period.
  • From 7 to 8 seconds, both the eye and the head are stationary
  • From 8 to about 8.2 seconds, the eye moves in the opposite direction
  • From 8.2 to about 8.5 seconds, the head follows and the eye reverses direction
What is happening? It turns out that eye movements precede head movements. When the body wants to look in a certain direction, the eye jumps ahead (to a direction over +20 or under -20 relative to the 'straight ahead' position). Then, the head starts to follow while the eye compensates with a movement to the other direction so that the gaze direction (head orientation + eye orientation) stays the same. During the head movement, the eye remains locked on the same target.

Why is this useful? It is useful because significant eye movements signal the intent to move the head. If we wish to minimize the latency of sensing head movements, it might be very useful to use the hints provided by the eye. It shows us that a large movement is coming, and we can use this information in anticipating head movement, and thus reduce latency.