In short, Yes!
It is useful for certain types of apps to present content directly in front of the user, regardless of the direction their head is pointed. Indeed, some applications may be designed for use on fixed holder arms, like the one pictured below.
There are also cases where the headset is mounted on someone's head, but the content should be kept directly in front of the user, regardless of any head motion.
So let's take a look at how to handle these situations.
Hardware
The FOVE 0 supports 3-DOF ("orientation tracking", via an internal IMU with Gyros and an accelerometer) motion internally, and using the included position tracking camera, this is brought up to 6-DOF ("position tracking").
The 3-DOF tracking is always running when the headset is running (as of the time of this writing, April, 2021), but the 6-DOF tracking can be disabled by simply by not plugging in the position tracking camera.
Furthermore, the USB 2.0 connector coming out of the headset can be unplugged, or even removed if needed (note that only the USB 3.0 and HDMI cables are coming out of the headset pictured above). The USB 2.0 port is used only for powering the external infrared LEDs on the headset, which are captured by the position tracking camera for 6-DOF tracking.
Not running the 6-DOF tracking saves quite a lot of CPU power, because it requires heavy image processing that often can take up a decent chunk of one of your CPU cores.
However, since the 3-DOF orientation tracking is always running, software-level changes are needed as well to disable head tracking entirely.
Software
How you proceed on the software side depends on how you are building apps with FOVE.
FOVE SDK (C/C++/C#/Python)
The FOVE SDK includes a set of capabilities that must be registered by the application to access data.
The FOVE Runtime gathers the set of all capabilities requested by all currently running clients, and enables software and hardware components as needed, the idea being that we run only the components needed at any given time, to reduce resource usage such as power consumption and CPU.
In the case of disabling head tracking, it is recommended that you do not enable the following capabilities:
Fove::ClientCapabilities::OrientationTracking |
Enables headset orientation tracking. |
Fove::ClientCapabilities::PositionTracking |
Enables headset position tracking. |
This will let the FOVE runtime know that you do not need any head tracking capabilities, and thus allow it to disable any extra computations as it sees fit.
Nonetheless, another client may enable these components (as of this writing, the FOVE Compositor is always enabling OrientationTracking), so in your app, you should simply ignore the HMD pose when drawing, and draw content that is at a fixed location on your render buffer.
Furthermore, when creating a compositor layer to submit your render you should disable time warp in the layer options struct. Time warp is a feature where the compositor shifts the image based on the angular velocity of the users head, so as to compensate for difference in the heads orientation from the time where the last orientation measurement was taken, to the time when the frame will be displayed on the screen. This is helpful for 3D virtual spaces, but counterproductive to having content at a fixed location onscreen, hence the option.
FOVE Unity Plugin
Within Unity, you can disable the PositionTracking, OrientationTracking and Timewarp capabilities mentioned above directly from the property grid of the FoveInterface script attached to the camera.
This not only disable the capabilities for the current FOVE client but also stops the HMD <-> Camera pose synchronization performed by the component so that the camera stays fixed even if another client registered the capability.
Comments
0 comments
Please sign in to leave a comment.