Disable Position / Orientation Tracking



  • Official comment

    Hi Benedikt,

    The only way to do this is to edit the FOVE plugin slightly. If you take a look at FoveHMD.cpp you will find these lines:

                // Initialize headset
                // FIXME: We need a system whereby content can choose the capabilities it wants
                Headset->Initialise(Fove::EFVR_ClientCapabilities::Position | Fove::EFVR_ClientCapabilities::Orientation | Fove::EFVR_ClientCapabilities::Gaze);

    If you remove Position and Orientation there and just pass Fove::EFVR_ClientCapabilities::Gaze, your game will no longer cause the service to enable position/orientation tracking.

    The fixme in there indicates that we want to add a better way to do this (ideally without editing source) in the Unreal plugin, but haven't gotten to it yet. For now, it's perfectly fine to edit the source to achieve this.

    The FOVE service gathers the capabilities of all the clients, so even if you don't specify position/orientation, another client could still trigger the service to continue processing them. The FOVE Debug Tool currently requests these, so make sure to have that off when running.

    Orientation tracking itself requires very little CPU, so must likely the CPU usage issue comes from position tracking. This typically happens when the software is first trying to locate the headset in the infrared camera image. Once the headset is located, CPU consumption goes down because position tracking can use the previous location to much more quickly predict the current location. That said, things like too much background IR in the position camera image (which can be seen in the Debug  Tool), can cause position tracking to loose the headset frequently or never find it.

    In any case, it should not matter if you disable position tracking. Let me know if this solves the issue for you.

    Edit: You'll also need to disable time warp on the compositor layer if you are not doing orientation tracking. Otherwise you will get a looking at a fixed monitor effect (as you described below).

    To do so the line that creates the compositor layer needs to be edited from:

            Fove::SFVR_CompositorLayer Layer;
            Compositor->CreateLayer(Fove::SFVR_CompositorLayerCreateInfo(), &Layer);


            Fove::SFVR_CompositorLayer Layer;
            Fove::SFVR_CompositorLayerCreateInfo LayerCreateInfo;
            LayerCreateInfo.disableTimeWarp = true;
            Compositor->CreateLayer(LayerCreateInfo, &Layer);

    This will ensure that the rendered image from Unreal remains fixed to the HMD screen.

    Comment actions Permalink
  • Avatar
    Benedikt Tutzer

    Oh I am using unreal, so I cannot disable it in the prefab. I do not see any Option to disable it in the Unreal Plugin.

    Comment actions Permalink
  • Avatar
    Benedikt Tutzer

    Hi Jeff,

    unfortunately this does not help. Disabling Orientation and Position tracking results in weird behaviour for me. If I turn around my head, the Screen seems to remain static in the world. It Looks like I was sitting in front of a Monitor where my game is running, and if I turn my Head I look at the wall besides the Monitor. This is obviousely not what I wanted.

    Currently I have changed

        FTransform ToUnreal(const Fove::SFVR_Pose& pose, const float scale)

    to return FTransform(FQuat::Identity, vec). This stops the effects of the Position and orientation tracking, but they are still computed and consume CPU time.

    Since I am not using the Position tracking, I have the infrared camera disconnected. Could this result in higher CPU usage than usual?

    Comment actions Permalink
  • Avatar

    Apologies, I forgot about time warp in my original answer. The monitor effect you see is due to time warp, which is intended to compensate for the time in-between when the pose is fetched and when the image goes out to the HMD screen.

    I edited my response above to show how to disable that. Once you disable time warp, you should have the Unreal image completely fixed to the screen at all times.

    That said, disabling time warp will not affect the CPU much. Considering your game already has orientation/position disabled, and your camera is unplugged anyway, you should not be seeing high CPU usage.

    I'm curious to see what's triggering the high CPU usage. Can you try these cases out and let me know how much CPU is used by the FOVE Runtime Service (via task manager):

    1. Only the service is running (compositor auto-launch can be disabled from the tray tool).

    2. The service and the compositor is running

    3. The service and the compositor and Unreal editor is running.

    4. All of the above and the game is running in editor.

    5. All of the above and the FOVE Debug Tool.

    Furthermore, if you can paste or email me (jeff dot bland at fove hyphen inc dot com) the Fove Log after doing these tests, that would help a lot. (Replace dot/at/hyphen and remove spaces).

    C:\ProgramData\Fove\Logs\FoveLog.log (or via Data Directory from the Debug Tool's Open menu)

    Comment actions Permalink

Please sign in to leave a comment.