Identify what model of HMD is attached to SteamVR

Hi all!

I’m developing a game which will run into the SteamVR platform. I need to detect what model of HMD is the user using (Rift, VIVE, Windows MR device), so that I can change for example the Motion Controller models, and even their behavior depending on it.
I can see that there is a method ‘GEngine->XRSystem->GetSystemName()’ which returns the platform I’m running on (SteamVR), but I can’t see any way for obtaining the underlying HMD model or even the underlying motion controller types.

Does anyone know how I can solve this?

Thanks in advance,

Inaki.

“Get HMDDevice Name” node should do it.

Hi BladeMaster!

Thanks for the response. I thought the same thing, but unfortunately after observing unexpected behavior, I searched for the implementation of that node and I saw the following:

So internally it ends up returning the ‘VR system name’ which, when using steamVR plugin, always returns the “SteamVR” string regardless the HMD you are using.

Any other ideas?

It should return the HMD name even if you are using SteamVR. I published a VR game on Steam which had different settings for Vive and Rift. I was using switch on the Node output and it was working without any issues.

I also get “SteamVR” regardless of the HMD type from IXRSystemIdentifier::GetSytemName();

I found a work around that’s adequate for my situation, maybe it’ll help someone else. It’s not ideal, but the IHeadMountedDisplay::MonitorInfo struct has a property for the MonitorName and you can switch or parse that name to determine which device you’re running. I tried it on a few Vives, a Vive Pro, and a Samsung Odyssey. I get a name starting with “LHR-” for the Vives and “WindowsHolographic” for the Samsung.

IHeadMountedDisplay::MonitorInfo YourMonitorInfo;
GEngine->XRSystem->GetHMDDevice()->GetHMDMonitorInfo(YourMonitorInfo);

Hi,
Did you ever find a solution ?
Thx.

The Get HMD Device Name node will return the name of the VR system currently used. If you’ve enabled both Steam VR and Oculus plugins in your build, the engine will use the Oculus plugin if it detects an Oculus and Steam VR if it detects Vive. So in that case it will properly differentiate between Oculus and Vive. However, if the Oculus plugin is not enabled it will always return Steam VR.

There is a VR Expansion plugin available that has a function that returns the HMD manufacturer regardless of which plugin is running. If I’m not mistaken, it can also return strings for manufacturer and model if you want to have different settings for Vive and Vive pro for example.

This should be the correct answer.

Can you expand on this? VR Expansion plugin also uses GEngine->XRSystem->GetSystemName() which returns “SteamVR”

Had the same issue and found the solution here:

VR Expansion Plugin (specifically Open VRExpansion Function Library)

Function: GetOpenVRHMDType

Even when strictly using SteamVR, it successfully identified my Oculus headset.