No steamvr tracking without hmd?

I have steamvr setup for requireHmd false to remove the HMD requirement. I’ve verified steamvr is tracking without the HMD. Unreal Engine is not tracking the motion controller or the Vive tracker. Does anyone have tracking working in Unreal without a headset attached?

I’m trying another route Run SteamVR without HMD? :: SteamVR Developer Hardware General Discussions

Basically don’t use requirehmd false, and setup this null driver which looks like a headset without one being plugged in. This might get unreal to continue tracking other devices.

From what I read it’s not possible to track without the headset.
You’d need the dongles the Vive tracker is using or wire the controllers to your machine.

The issue here is the data transfer from the controllers to your application won’t work.
The Vive has an integrated bluetooth transmitter that gathers the optical sensor and gyro info, without it you have no means to get the data that is being produced. I’m not sure if it’s possible to connect the controllers to a regular bluetooth dongle, but I doubt there’s an easy solution.

Further references

Sorry if I wasn’t clear, I do have the dongle, the tracker is tracking in steamvr. I’ve verified tracking by opening steamvr and looking at the developer room overview setup. The issue is unreal engine additionally requiring the headset to be attached. If there is no headset attached unreal engine does not update the controllers/tracker position, even though the data is there in steamvr.

SteamVR probably works fine but Unreal won’t start a vr context unless you have a headset plugged in (at least this was the case before). I solve this by manually starting steamvr, like so:

#include "openvr.h"
...
vr::EVRInitError peError;
vrSystem = vr::VR_Init(&peError, vr::EVRApplicationType::VRApplication_Other);

Would be really nice if this worked. Have anyone successfully tracked anything while the null driver is enabled? I have a feeling the null driver will disable all tracking but perhaps it’s possible with some “activateMultipleDrivers=true” shenanigans

I can track controllers (with dongles) and the null driver, as well as the Vive Tracker and dongle. Although in Unreal Engine I have to flash the tracker as a controller to get the button functionality working. The problem is the null driver is not performant and I get very choppy playback/tracking.

This is interesting, does it have to be a c++ project? I’m currently using blueprints.

openvr.h is mostly just accessible through c++, but it’s straightforward to work with if you have got someone with some ue-c++ experience. Once you successfully run the “VR_Init” above, the “MotionControllerComponent” will work in blueprints just as normal SteamVR (iirc…). And if you want to be more clever there’s function calls directly into openvr.h

However, the reason I found this thread is that with newer SteamVR drivers I have noticed that running hmd-less (without the null driver) does not seem to be supported in practice anymore. I can start SteamVR (vrmonitor.exe) but that automatically starts the “vrcompositor” which errors out if there’s no hmd (even with the “requireHmd: false” flag). That would be okay, since we don’t need the compositor if we have no hmd, but vrcompositor has retry logic which seems to break stuff until vrserver itself crashes after ~5min. So, to sum up, I’m very interested if the null driver is a solution to this :slight_smile:

got it to work with good performance (null driver, no hmd, 2 vive trackers connected with dongles), using vrserver v1507941678 and the following settings in “C:\Program Files (x86)\Steam\config\steamvr.vrsettings”:

{
   "jsonid" : "vrsettings",
   "power" : {
      "pauseCompositorOnStandby" : false
   },
   "userinterface" : {
      "StatusAlwaysOnTop" : true
   },
   "steamvr" : {
      "directModeEdidPid" : 43521,
      "directModeEdidVid" : 53794,
      "enableHomeApp" : false,
      "mirrorViewGeometry" : "0 0 1080 600",
      "forcedDriver": "null",
      "requireHmd": true,
      "activateMultipleDrivers" : true
    },
   "driver_lighthouse": {
      "disableimu": false,
      "usedisambiguation": "tdm",
      "disambiguationdebug": 0,
      "primarybasestation": 0,
      "lighthousename": "",
      "maxincidenceangledegrees": 60.0,
      "uselighthousedirect": true,
      "dbhistory": false
   },
   "driver_null" : {
   	  "enable": true,
      "id": "Null Driver",
      "serialNumber": "Null 4711",
      "modelNumber": "Null Model Number",
      "windowX": 100,
      "windowY": 100,
      "windowWidth": 512,
      "windowHeight": 512,
      "renderWidth": 512,
      "renderHeight": 512,
      "secondsFromVsyncToPhotons": 0.1,
      "displayFrequency": 150
   }
}

Nice, I’ll try these VR settings in place of my own and check back in.

What is the summary here?
Is there a possible for UE that no longer requires the HMD, but still allows tracking?
I am just using the Blueprints, and they do not return any tracking data without HMD.

This null driver does it need to be compiled from scratch?
Or is there another solution maybe by modifying UE?
Thanks.

Null driver is just steamvr settings, see the example above. After null is setup unreal believes an hmd is attached and provides tracking for controllers and trackers.

Thanks. Is it working for you now? Just drop the STEAMVR controllers into Blueprint or is anything else is needed?
Do you have a full setting file that works?
I tried to modify the settings, but it’s not working.
Here’s what I have currently:

{
“steamvr”: {
“requireHmd”: true,
“forcedDriver”: “null”,
“forcedHmd”: “”,
“displayDebug”: false,
“debugProcessPipe”: “”,
“enableDistortion”: true,
“displayDebugX”: 0,
“displayDebugY”: 0,
“displayAllowLockedMode”: false,
“sendSystemButtonToAllApps”: false,
“loglevel”: 3,
“ipd”: 0.063,
“ipdOffset”: 0.0,
“background”: “”,
“backgroundUseDomeProjection”: false,
“backgroundCameraHeight”: 1.6,
“backgroundDomeRadius”: 0.0,
“debugInput”: false,
“environment”: “”,
“gridColor”: “”,
“playAreaColor”: “”,
“showStage”: false,
“activateMultipleDrivers”: true,
“directMode”: true,
“usingSpeakers”: false,
“speakersForwardYawOffsetDegrees”: 0.0,
“basestationPowerManagement”: false,
“neverKillProcesses”: false,
“renderTargetMultiplier”: 1.0,
“supersampleScale”: 1.0,
“allowSupersampleFiltering”: true,
“allowAsyncReprojection”: true,
“allowInterleavedReprojection”: true,
“forceReprojection”: false,
“forceFadeOnBadTracking”: true,
“defaultMirrorView”: 0,
“showMirrorView”: false,
“startMonitorFromAppLaunch”: true,
“startCompositorFromAppLaunch”: true,
“startDashboardFromAppLaunch”: true,
“startOverlayAppsFromDashboard”: true,
“enableHomeApp”: false,
“setInitialDefaultHomeApp”: false,
“CycleBackgroundImageTimeSec”: -1,
“retailDemo”: false,
“panelMask”: true,
“panelMaskVignette”: true,
“panelMaskVignetteWidth” : 2.0,
“inputBindingUI” : false,
“legacyInputRebinding” : false,
“directModeEdidPid” : 43521,
“directModeEdidVid” : 53794,
“mirrorViewGeometry” : “0 0 108 600”
},
“userinterface” : {
“StatusAlwaysOnTop” : true,
“screenshots” : true,
“screenshotType” : 2
},
“driver_lighthouse”: {
“disableimu”: false,
“usedisambiguation”: “tdm”,
“disambiguationdebug”: 0,
“primarybasestation”: 0,
“lighthousename”: “”,
“maxincidenceangledegrees”: 60.0,
“uselighthousedirect”: true,
“dbhistory”: false
},
“driver_null” : {
“enable”: true,
“id”: “Null Driver”,
“serialNumber”: “Null 4711”,
“modelNumber”: “Null Model Number”,
“windowX”: 100,
“windowY”: 100,
“windowWidth”: 512,
“windowHeight”: 512,
“renderWidth”: 512,
“renderHeight”: 512,
“secondsFromVsyncToPhotons”: 0.1,
“displayFrequency”: 150
},
“notifications” : {
“DoNotDisturb” : false
},
“keyboard” : {
“TutorialCompletions” : 0,
“ScaleX” : 1.1,
“ScaleY” : 1.1,
“OffsetLeftX” : 0.0,
“OffsetRightX” : 0.0,
“OffsetY” : 0.0,
“Smoothing” : false
},
“perfcheck” : {
“heuristicActive” : true,
“warnInHMD” : false,
“warnOnlyOnce” : false,
“allowTimingStore” : false,
“saveTimingsOnExit” : false,
“perfTestData” : 0.0
},
“collisionBounds” : {
“CollisionBoundsStyle” : 0,
“CollisionBoundsGroundPerimeterOn” : false,
“CollisionBoundsCenterMarkerOn” : false,
“CollisionBoundsPlaySpaceOn” : false,
“CollisionBoundsFadeDistance” : 0.7,
“CollisionBoundsColorGammaR” : 0,
“CollisionBoundsColorGammaG” : 255,
“CollisionBoundsColorGammaB” : 255,
“CollisionBoundsColorGammaA” : 153
},
“camera” : {
“enableCamera” : false,
“enableCameraInDashboard” : false,
“enableCameraForCollisionBounds” : false,
“enableCameraForRoomView” : false,
“cameraBoundsColorGammaR” : 0,
“cameraBoundsColorGammaG” : 255,
“cameraBoundsColorGammaB” : 255,
“cameraBoundsColorGammaA” : 153,
“cameraBoundsStrength” : 78
},
“audio” : {
“onPlaybackDevice” : “”,
“onRecordDevice” : “”,
“onPlaybackMirrorDevice” : “”,
“offPlaybackDevice” : “”,
“offRecordDevice” : “”,
“viveHDMIGain” : true
},
“power” : {
“pauseCompositorOnStandby” : false,
“powerOffOnExit” : true,
“turnOffScreensTimeout” : 5.0,
“turnOffControllersTimeout” : 300.0,
“returnToWatchdogTimeout”: 0.0,
“pauseCompositorOnStandby” : true,
“autoLaunchSteamVROnButtonPress” : true
},
“modelskins” : {
},
“dashboard” : {
“enableDashboard” : true,
“arcadeMode” : false,
“webUI” : false
},
“WebInterface” : {
“WebPort” : “127.0.0.1:8998”
},
“version” : “1”,
“jsonid” : “vrsettings”
}

Also with the settings that j_zeitler lists above, there is an error Headset not found when starting SteamVR, and no status is shown of the trackers or base stations in STEAMVR anymore.
Is that right?
In UE, we cannot get any tracking information. Which ID would a single tracker have?
Thanks in advance for any help!

You should complete all steps here to enable the null driver. Run SteamVR without HMD? :: SteamVR Developer Hardware General Discussions

Steamvr shouldnt have an error if its setup correctly.

Thanks. Got it to work.
The settings mentioned above should go into
“C:\Program Files (x86)\Steam\config\steamvr.vrsettings”
not into the default.vrsettings (easy to mix those two files up).
Is there a way to run room setup with just a tracker?

I’m not sure, but you could always just do the quick room setup small/medium/large in the steamvr dev settings just to get things going.