Select Hand Engine

Starting from v0.9.4, Vive Hand Tracking SDK added experimental support for multiple backend engines for hand detection. By default, 3 implementations are provided in the SDK:

  1. VHTEngine is the original SDK implementation, using binaries in the SDK. This is supported on all devices listed in Supported Hardware section, except Vive Focus 3.
  2. WVREngine is the engine that calls WaveVR Hand API.
  3. PIEEngine is a simulation engine that can be used in Unreal Editor without real HMD. This allows developer to simulate hand skeleton and gestures using Unreal UMG panel.

See later sections for differences between engines.

Change Engine List

In Project Settigs -> Plugins -> ViveHandTracking tab, you can set a list of candidate engines, all engines are checked from top to bottom. The first engine, that supports current platform and starts successfully, is used for detection.

../_images/engine1.png

After made changes to the list, you need to press Set as Defaults button to save the config. Make sure to select Yes if prompted to make the configuration file writable.

../_images/config_writable.png

Note

When SteamVR has error, PIEEngine may still be selected even if you list VHTEngine before PIEEngine and play in VRPreview mode. If you want to enable VHTEngine, please make sure SteamVR is working well. If you do want PIEEngine, just play in Selected Viewport or New Editor Window.

../_images/playmode.png

WaveVR Engine

WVREngine calls WaveVR Hand API (new in WaveVR 3.2.0) to get raw hand results. This provides easier integration for cross-platform VR development, and has little effort for existing users of Vive Hand Tracking API. Developers can also benifit from utility scripts provided in Vive Hand Tracking SDK while using native hand API from WaveVR SDK.

Hand tracking feature in WaveVR are implemented by device vendor, and not all WaveVR devices support this feature. HTC Vive Focus/Focus Plus/Focus 3 supports this feature. Devices from other vendors may also support WaveVR Hand API.

Note

WaveVR Hand API has breaking changes in WaveVR 4.0. So WaveVR SDK and device ROM must be same version (both 3.2.0 or both 4.x) to use WaveVR Hand API. See WaveVR Compatibility for details.

WaveVR Engine vs Vive Hand Tracking Engine

Tip

Order of VHTEngine and WVREngine only matters on Vive Focus/Focus Plus. On other WaveVR devices with WaveVRHandEngine support (e.g. HTC Vive Focus 3), ViveHandTrackingEngine is not supported.

Comparison WaveVR Engine Vive Hand Tracking Engine
Architecture Always arm64 Same as VR app
Performance Base on ROM version Base on SDK version
Pre-defined gesture classification All gestures but Victory All gestures

Benefit of listing VHTEngine before WVREngine:

  • Get consistent hand tracking performance for all supported ROM versions.
  • You can update SDK to get performance improvement.
  • Get new features early.

Benefit of listing WVREngine before VHTEngine:

  • Enjoy smaller latency if your apk does not support arm64 architecture.
  • Hand Tracking performance gets improved by ROM update while apk is not changed.

Using Editor Engine

Tip

It’s recommended to always put PIEEngine as last engine, since simulation cannot represent actual performance with real devices.

When play in editor ( except VR Preview ), PIEEngine would be enabled, and then an User Widget called BP_HandSimulatorWidget would also be spawned and added to screen for modifying status of both hand.

../_images/editor_simulator.png
  • Hand Base Position: Change this position moves both hands together.
  • Left/Right Hand Position: Change position of either hand.
  • Left/Right Hand Rotation: Change roataion of either hand.
  • Left/Right Hand Confidence: Change confidence of either hand.
  • Left/Right Hand State: Change gesture and finger close/open state of either hand.
    • Preset: Change gesture to one of preset: invsible, pre-defined gestures or pinch.
    • Thumb State: Change thumb state to close, open or pinch.
    • Index State: Change index state to close, open, relax or pinch.
    • Middle/Ring/Pinky State: Change finger state to close, open or relax.