Files
Plugin/README.md
T

251 lines
17 KiB
Markdown
Raw Normal View History

2022-11-04 15:23:56 +01:00
# The SenseGlove Unreal Engine Plugin
2022-11-02 22:43:14 +01:00
2022-11-02 23:41:35 +01:00
## How to Download
This repository relies on Git LFS for storing binary blobs (e.g. third-party libraries). Sadly, there is a known issue with Microsoft Azure public LFS repositories that requires credential for LFS checkouts on https (LFS ssh checkouts are not supported at all). Unless, you are part of SenseGlove organization on Microsoft Azure there is no easy way to fully clone this repository using Git. Thus, the best way to download this repository is to use the 'kebab' (three vertical dots) menu next to the clone button, in order to download the whole repository including LFS objects as a unified zip file.
2022-11-02 22:43:14 +01:00
## Platform Support Matrix
| | **Windows (MSVC 2017)** | **Windows (MSVC 2019)** | **Windows (MSVC 2022)** | **Linux x86-64 (Native Toolchain)** | **Linux AArch64 (Native Toolchain)** | **Android (NDK)** | **UE Marketplace Version** | **Azure DevOps Version** |
|----------|:-----------------------:|:-----------------------:|:-----------------------:|:-----------------------------------:|:------------------------------------:|:-----------------:|:--------------------------:|:------------------------:|
| **5.4** | ❌ | ❌ | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x (r25b) | ✅ v2.0.2 | ✅ v2.0.2 |
| **5.3** | ❌ | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x (r25b) | ✅ v2.0.2 | ✅ v2.0.2 |
| **5.2** | ❌ | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x | ✅ v2.0.x (r25b) | ✅ v2.0.2 | ✅ v2.0.2 |
2024-05-15 03:57:15 +02:00
| **5.1** | ❌ | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x (r25b) | ⚠️ v2.0.1 | ⚠️ v2.0.2 |
| **5.0** | ❌ | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x | ⚠️ v1.6.x (r21e) | ⚠️ v1.6.1 | ⚠️ v1.6.1 |
| **4.27** | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x | ⚠️ v1.4.x (r21e) | ⚠️ v1.3.1 | ⚠️ v1.4.3 |
| **4.26** | ⚠️ v1.0.x | ⚠️ v1.0.x | ❌ | ⚠️ v1.0.x | ❌ | ❌ | ❌ | ⚠️ v1.0.4 |
| **4.25** | ⚠️ v1.0.x | ⚠️ v1.0.x | ❌ | ⚠️ v1.0.x | ❌ | ❌ | ❌ | ⚠️ v1.0.4 |
| **4.24** | ⚠️ v1.0.x | ⚠️ v1.0.x | ❌ | ⚠️ v1.0.x | ❌ | ❌ | ❌ | ⚠️ v1.0.4 |
| **4.23** | ⚠️ v1.0.x | ⚠️ v1.0.x | ❌ | ⚠️ v1.0.x | ❌ | ❌ | ❌ | ⚠️ v1.0.4 |
| **4.22** | ⚠️ v1.0.x | ⚠️ v1.0.x | ❌ | ⚠️ v1.0.x | ❌ | ❌ | ❌ | ⚠️ v1.0.4 |
2022-11-02 22:43:14 +01:00
* <code>✅</code> Supported
* <code>⚠️</code> Not supported by the latest release and might be lacking features
* <code>❌</code> Not supported at all
* <code>❓</code> Unknown or untested
2022-11-02 22:43:14 +01:00
Remarks:
* Per [Epic's Marketplace Guidelines](https://www.unrealengine.com/en-US/marketplace-guidelines) in regards to Code Plugins (sections 2.6.3.d and 3.1.b), we are only able to distribute or update the SenseGlove plugin for the last 3 stable versions of Unreal Engine. As a result, we won't be able to publish updates or bug fixes for the older versions of the Engine except on rare occasions and only through our official repository on Microsoft Azure DevOps.
2022-11-02 22:43:14 +01:00
* All third-party libraries on Windows built against Windows SDK 10.0.
* Oculus and VIVE support is only provided through the recommended Android NDK versions by Epic Games.
* [wjwwood/serial](https://github.com/wjwwood/serial) requires Android NDK API Level 28+ in order to be built successfully.
2022-11-02 22:43:14 +01:00
* All third-party libraries target Android NDK API Level 29, thus any project relying on the plug-in should be build with the same NDK API Level.
2022-11-14 17:18:54 +01:00
## Changelog
2022-11-02 22:43:14 +01:00
We maintain [a detailed changelog for this project](CHANGELOG.md) as well. Please consult the changelog before upgrading to any newer release.
## Documentation
[The Blueprints documentation is hosted on SenseGlove Docs](https://senseglove.gitlab.io/unreal-blueprint-docs/).
2022-11-02 22:43:14 +01:00
For the C++ documentation, since this plugin builds on top of [SGConnect](https://senseglove.gitlab.io/SenseGloveDocs/native/core-api-intro.html#sgconnect) and [SGCoreCpp](https://senseglove.gitlab.io/SenseGloveDocs/native/core-api-intro.html#sgcorecpp) third-party C++ libraries, please refer to [the upstream documentation](https://senseglove.gitlab.io/SenseGloveDocs/native/cpp-reference.html).
Also, you could refer to the header files in every module for extensive documentation, or the equivalent Blueprints documentation.
The following modules are intended to be used by the C++ users of this plugin:
* SenseGloveConnect module which only uses a very small subset of the Core SGConnect libary.
* SenseGloveCore module which is mostly a one-on-one wrapper call to most of the SGCoreCpp library with slight differences.
Please note that modules postfixed with **Impl** are intended for interal use and are discouraged to be used by the users of the API. The modules postfixed with **Kismet** are exposing the functionality of the equivalent modules to Blueprints. For other modules descriptions, please see [the Directory Structure section](#directory-structure).
## Planned Features Completion Status
### Implemented as of v2.2.0
- [X] Full SenseGlove low-level core API access through Unreal C++.
- [X] Full SenseGlove low-level core API access through Blueprint.
- [X] DK 1 Support.
- [X] Nova 1 Support.
2024-03-22 20:37:08 +01:00
- [X] Nova 2 Support.
- [X] Support for Microsoft Windows as a development platform.
- [X] Support for GNU/Linux as a development platform.
- [X] Support for Microsoft Windows as a deployment platform.
- [X] Support for GNU/Linux x64 as a deployment platform.
- [X] Support for GNU/Linux AArch64 as a deployment platform.
- [X] Support for Android as a deployment platform.
- [X] Support for Oculus Quest 2 and Oculus Quest Pro.
- [X] Support for HTC VIVE Pro and HTC VIVE Focus 3.
- [X] Support for HTC VIVE Trackers and HTC VIVE Wrist Trackers.
- [X] On-device calibration for Android without the need for SenseCom.
- [X] Haptic feedback including force feedback, buzz, and thumper commands.
- [X] A customizable Grab component that could be added to any actor.
- [X] A customizable Touch component that could be added to any actor.
- [X] Ability to grab, release, and throw objects around.
- [X] Separation of the real and virtual hand rendering.
- [X] An out-of-the-box customizable SGPawn with the ability to be extended in C++ and Blueprint.
- [X] Easy wrist/hand tracking debugging using the SenseGlove Debug module.
- [X] A generic Settings module with the ability to override settings.
- [X] C++/Blueprint interaction events such as OnGrabStateUpdated, OnTouchStateUpdated, OnActorGrabbed, OnActorReleased, OnActorBeginTouch, and OnActorEndTouch.
2024-03-22 20:37:08 +01:00
- [X] A default hand mesh rigged with the standard SenseGlove default hand pose.
- [X] A fallback to HMD and wrist tracker hardware auto-detection mechanism when automatic detection of the wrist tracker hardware is desired.
2024-05-03 11:34:40 +02:00
- [X] OpenXR-compatible hand tracking (XR_EXT_hand_tracking) support.
- [X] FXRMotionControllerData compatible hand animation system.
- [X] FXRMotionControllerData compatible wrist tracking system.
- [X] FXRMotionControllerData compatible hand interaction manipulation system.
- [X] Ability to fallback to hand tracking when a glove is not present and use the bare hands for interactions, or a combination of glove and hand tracking if no motion controller input is detected.
2024-05-03 11:34:40 +02:00
### Upcoming features planned for the v2.3.0 release
2024-05-03 11:34:40 +02:00
### Planned features long-term
- [ ] Get tracking input from sources other than a SenseGlove device.
- [ ] Be able to assign behaviors to different objects (meshes) in the scene (e.g. Slider, Hinge, basic Grabables, etc).
- [ ] Make it so developers can define or extend their own behavior(s) to an object through Code / Blueprints (e.g. I want a car door that is like a slider, but follows a path rather than a straight line).
- [ ] Make the hand(s) able to push around physics-driven objects (for as much as their behaviors allow) (in backlog).
- [ ] Be able to grab objects with up to 2 hands (and move them around with both hands at the same time in a way that seems realistic).
- [ ] Ensure that our virtual hands (and the objects they hold) do not phase through other physics objects (e.g. walls and tables).
- [ ] Allow other scripts to force a grab and/or release to occur (for example, when you place it apart at the designated location, it gets removed from your hand and snaps into place).
- [ ] Have some form of weight simulation by making certain objects harder to push, lowering manipulation speed, or making objects only moveable with two hands.
- [ ] (Optional) Make it so the fingers of your virtual hands do not clip inside the meshes you are holding (certain people see this as an indicator of how fast the Force-Feedback activates - but it's basically just rendering).
2022-11-02 22:43:14 +01:00
## Directory Structure
```
2023-04-11 21:04:34 +02:00
/
├── Config
2022-11-02 22:43:14 +01:00
├── Resources
└── Source (various plug-in modules)
2022-11-02 22:43:14 +01:00
├── SenseGlove (the UE-specific high-level API)
2022-11-02 22:43:14 +01:00
├── SenseGloveAndroid (the Android-specific module)
├── SenseGloveBackend (responsible for initialization and deinitialization of the backend libraries)
├── SenseGloveBackendKismet (exposes Blueprints-specific functionality from the SenseGloveBackend module)
2022-11-27 14:13:00 +01:00
├── SenseGloveBuildHacks (uses Exceptions and RTTI, internally used for compiler-specific build hacks)
2022-11-27 14:13:00 +01:00
├── SenseGloveConnect (exposes part of the SGConnect low-level API to C++)
2022-11-27 14:13:00 +01:00
├── SenseGloveConnectImpl (uses Exceptions and RTTI, intended for internal use only)
├── SenseGloveConnectKismet (SGConnect functionality exposed to Blueprints)
2022-11-27 14:13:00 +01:00
├── SenseGloveCore (exposes part of the SGCoreCpp low-level API to C++)
2022-11-27 14:13:00 +01:00
├── SenseGloveCoreImpl (uses Exceptions and RTTI, intended for internal use only)
├── SenseGloveCoreKismet (SGCoreCpp functionality exposed to Blueprints)
2023-04-28 01:49:11 +02:00
├── SenseGloveDebug (a utility debug module)
2024-05-22 17:23:22 +02:00
├── SenseGloveDebugKismet (exposes Blueprints-specific functionality from the SenseGloveDebug module)
├── SenseGloveEditor (the Editor module)
├── SenseGloveInterop (internally used for interoperability between RTTI disabled/enabled modules)
2023-03-03 20:09:14 +01:00
├── SenseGloveKismet (exposes Blueprints-specific functionality from the SenseGlove module)
├── SenseGloveLog (the internal log module)
2023-03-20 23:14:07 +01:00
├── SenseGloveSettings (the plugin's settings manager)
2023-03-21 13:47:11 +01:00
├── SenseGloveSettingsKismet (exposes Blueprints-specific functionality from the SenseGloveSettings module)
├── SenseGloveTracking (provides XR_EXT_hand_tracking support, HMD auto-detection, and SenseGlove device tracking)
├── SenseGloveTrackingKismet (exposes Blueprints-specific functionality from the SenseGloveTracking module)
├── SenseGloveTypes (exposes various enums from the backend libraries and also types from the SenseGlove module)
├── SenseGloveUtils (the internal utility module)
└── ThirdParty (3rd-party dependencies)
├── android (.jar file Java libraries for Android)
2022-11-02 22:43:14 +01:00
├── include (header files)
2022-11-02 22:43:14 +01:00
│ │
│ ├── boost
2022-11-02 22:43:14 +01:00
│ │
│ ├── SenseGlove
2022-11-02 22:43:14 +01:00
│ │ │
│ │ ├── Connect (SGConnect headers)
2022-11-02 22:43:14 +01:00
│ │ │
│ │ └── Core (SGCoreCpp headers)
2022-11-02 22:43:14 +01:00
│ │
│ └── serial
2022-11-02 22:43:14 +01:00
└── lib (platform-specific pre-built binary dependencies)
├── android
│ │
│ └── r25b (Android NDK r25b dependencies for UE 5.1+)
│ │
│ ├── arm64 (64-bit ARM variant of Android)
2023-02-21 17:11:52 +01:00
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ └── x64 (64-bit x86-64 variant of Android)
2023-02-21 17:11:52 +01:00
│ │
│ ├── debug
│ │
│ └── release
2022-11-02 22:43:14 +01:00
├── linux
│ │
│ ├── v21 (UE 5.2 Linux dependencies)
│ │ │
│ │ ├── aarch64 (dependencies targeting AArch64 Linux architecture)
│ │ │ │
│ │ │ ├── debug
│ │ │ │
│ │ │ └── release
│ │ │
│ │ └── x86-64 (dependencies targeting x86-64 Linux architecture)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ └── v22 (UE 5.3 and 5.4 Linux dependencies)
│ │
│ ├── aarch64 (dependencies targeting AArch64 Linux architecture)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ └── x86-64 (dependencies targeting x86-64 Linux architecture)
│ │
│ ├── debug
│ │
│ └── release
└── win64
2022-11-02 22:43:14 +01:00
├── msvc142 (Microsoft Visual Studio 2019 dependencies)
│ │
│ ├── debug
│ │
│ └── release
2022-11-02 22:43:14 +01:00
└── msvc143 (Microsoft Visual Studio 2022 dependencies)
├── debug
└── release
2022-11-02 22:43:14 +01:00
```
## Licenses
### SenseGlove Unreal Engine Plug-in License
The SenseGlove plug-in for Unreal Engine is licensed under the terms of the [MIT License](LICENSE.md).
### Third-Party Licenses
Please note that while the SenseGlove plug-in for Unreal Engine is made available under the [MIT License](LICENSE.md), it utilizes a few third-party libraries with permissive free licenses as well, in order to power various components. For a list of these libraries and their own respective open-source licenses take a look at [LICENSE-THIRD-PARTY.md](LICENSE-THIRD-PARTY.md), please.