Compare commits

..
1022 Commits
Author SHA1 Message Date
Mamadou Babaei ed906960ae bump the plugin version to v2.6.3 2025-06-27 18:35:01 +02:00
Mamadou Babaei e37fcb4e3e add third-party openxr integration documentation section 2025-06-27 18:35:01 +02:00
Mamadou Babaei fb201fb916 bump the plugin version to v2.6.2 2025-06-10 09:14:28 +02:00
Mamadou Babaei 69013ea9cc add a vr optimization third-party tutorial 2025-06-10 09:14:28 +02:00
Mamadou Babaei c4c94623b3 bump the plugin version to v2.6.1 2025-06-05 13:21:34 +02:00
Mamadou Babaei 8c5d42f826 changelog fixes 2025-06-05 12:40:45 +02:00
Mamadou Babaei 481471a1ae bump senseglove libraries to v2.204.0-3a37b1977 2025-06-05 12:40:43 +02:00
Mamadou Babaei 97dbd6e19c fix a changelog typo 2025-06-05 12:40:36 +02:00
Mamadou Babaei 5dbccfb61c bump the plugin version to v2.6.0 2025-06-04 02:36:20 +02:00
Mamadou Babaei 2e74e67e5a fix a runuat build issue due to a missing header providing engine version macros 2025-06-04 02:36:20 +02:00
Mamadou Babaei ba165fdc36 deprecate ue 5.3 support 2025-06-04 02:36:20 +02:00
Mamadou Babaei d17161b230 reoder changelog's last entry sections 2025-06-04 02:36:20 +02:00
Mamadou Babaei f2588cccec revamp the ubt third-party dependency system 2025-06-04 02:36:20 +02:00
Mamadou Babaei 4112f429fb fix build issue with sgbackend by deleting the impl struct copy constructor and copy assignment operator 2025-06-04 02:36:20 +02:00
Mamadou Babaei bd74607124 fix a closing #endif directive comment 2025-06-04 02:36:20 +02:00
Mamadou Babaei eb312697a9 minor code formatting fix 2025-06-04 02:36:20 +02:00
Mamadou Babaei 126d58d88f thread-safe sgbackend initialization 2025-06-04 02:36:20 +02:00
Mamadou Babaei 597a1766f3 thread-safe sglog initialization 2025-06-04 02:36:20 +02:00
Mamadou Babaei ae601173fc revamp sglog to use unreal's tuniqueptr instead of std::unique_ptr 2025-06-04 02:36:20 +02:00
Mamadou Babaei 15bb6d9f1f fix critical deadlock between render and game threads in UE 5.6 when invoking IHeadMountedDisplay::GetHMDMonitorInfo() 2025-06-04 02:36:20 +02:00
Mamadou Babaei 7a553a0621 fix sglog windows/msvc build issues caused by the recent sglog refactor 2025-06-04 02:36:20 +02:00
Mamadou Babaei 48ffaaaaa3 update the changelog 2025-06-04 02:36:20 +02:00
Mamadou Babaei e48ef8e4d3 add a missing header that causes build issues on linux aarch64 due to incomplete uaniminstance type 2025-06-04 02:36:20 +02:00
Mamadou Babaei 1634e99fbf fix type conversion safety and consistency issues across all sglog formatters 2025-06-04 02:36:20 +02:00
Mamadou Babaei 45d5268be7 fix unreal engine 5.6 string conversion build issues on linux 2025-06-04 02:36:20 +02:00
Mamadou Babaei 796d09d907 Revert "bump embedded winpython distribution to v3.12.10"
This reverts commit 4fe067cf9a.
2025-06-04 02:36:19 +02:00
Mamadou Babaei c5bf8e79c6 Revert "attempt at fixing handbook's broken make pack on windows by upgrading mdbook-pdf-outline"
This reverts commit 1be45f2cba.
2025-06-04 02:36:18 +02:00
Mamadou Babaei 2a13908f64 attempt at fixing handbook's broken make pack on windows by upgrading mdbook-pdf-outline 2025-06-04 02:36:18 +02:00
Mamadou Babaei af863176c9 bump the SenseGlove Unreal Engine Marketplace Packager to v0.6.0-4108c6f 2025-06-04 02:36:18 +02:00
Mamadou Babaei 1869c1e01e bump senseglove libraries to v2.203.0-f3d3e676 which migrates to C++20 2025-06-04 02:36:16 +02:00
Mamadou Babaei f51ed2ed1f bump embedded winpython distribution to v3.12.10 2025-06-04 02:36:15 +02:00
Mamadou Babaei 82cc0dc232 lock the mdbook crate version to v0.49.0 2025-06-04 02:36:13 +02:00
Mamadou Babaei 10fcfc99a9 bump senseglove libraries to v2.202.0-5d54da32 which fixes linux build issues for ue 5.5/5.6 by linking against libc++ instead of libstdc++ 2025-06-04 02:36:13 +02:00
Mamadou Babaei e577bade69 update the outdated directory structure section inside the handbook with the latest changes 2025-06-04 02:36:11 +02:00
Mamadou Babaei 9eceebb2f2 bump the senseglove libraries to libraries to v2.201.0-edef7655 and replace epic native toolchain v24 with v25 2025-06-04 02:36:10 +02:00
Mamadou Babaei d3d08f7923 bump the plugin version to v2.5.0 2025-05-09 16:49:38 +02:00
Mamadou Babaei 3e34b3e2ae fix bad warning emoji character inside the platform support matrix 2025-05-09 16:49:38 +02:00
Mamadou Babaei 8686dacd1d improve the changelog formatting as much as possible 2025-05-09 16:36:12 +02:00
Mamadou Babaei 3f6c2a57f2 mention ue 5.2 and epic native toolchain v21 removal in the changelog 2025-05-09 16:36:12 +02:00
Mamadou Babaei 291658ecf7 minor punctuation fix 2025-05-09 16:36:12 +02:00
Mamadou Babaei fd38bf8cb0 update the planned featured completion status with regards to the latest changes 2025-05-09 16:36:11 +02:00
Mamadou Babaei 2efe9e99da update the changelog 2025-05-09 16:36:11 +02:00
Mamadou Babaei a922a140a0 bump the SenseGlove libraries to the v2.200.0-0cb715d0 release with BLE (Bluetooth Low Energy) support 2025-05-09 16:36:11 +02:00
Mamadou Babaei 03b7893e3e remove ue 5.2 deployment from sgum-packager 2025-05-09 16:36:09 +02:00
Mamadou Babaei be23dbb3dd list the third-party tutorials inside the extra resources section in a categorized manner 2025-05-09 16:36:09 +02:00
Mamadou Babaei ce426c6364 minor handbook fixes 2025-05-09 16:36:09 +02:00
Mamadou Babaei 42b219d9a1 downgrade mdbook-epub crate to cac03b7f4b151f106f7f05b13da4c33fc098dd2c 2025-05-09 16:36:09 +02:00
Mamadou Babaei 24a5e98294 fix a broken handbook url 2025-05-09 16:36:09 +02:00
Mamadou Babaei 414261eb96 revamp the sensecom instructions and divide it into ble and btserial sections 2025-05-09 16:36:09 +02:00
Mamadou Babaei 0da813a3d3 bump mdbook-epub crate to the latest v0.4.x 2025-05-09 16:36:09 +02:00
Mamadou Babaei 24dc0fdb6a fix a critical deadlock issue (UE-212224) in UE 5.5/5.6 during PipelinedFrameState acquisition 2025-05-09 16:36:09 +02:00
Mamadou Babaei 09a9dfc7fd bump the SenseGlove libraries to the v2.199.1-8de3deb9 experimental release with BLE (Bluetooth Low Energy) support 2025-05-09 16:36:09 +02:00
Mamadou Babaei 5ffde6ae47 bump the SenseGlove libraries to the v2.199.0-b35c8158 experimental release with BLE (Bluetooth Low Energy) support 2025-05-09 16:36:08 +02:00
Mamadou Babaei 8e2d094708 mark ue 5.2 as out of support in the platform support matrix 2025-05-09 16:36:06 +02:00
Mamadou Babaei ef65cb6e7e bump the senseglove libraries to the latest experimental ble builds 2025-05-09 16:36:05 +02:00
Mamadou Babaei 571282bb8b add missing changelogs from the previous commit 2025-05-09 16:36:04 +02:00
Mamadou Babaei cbe193e547 revamp android backend initialization error handling and bump the senseglove libraries to the latest experimental ble builds 2025-05-09 16:36:03 +02:00
Mamadou Babaei b6ca5015a9 list the license section inside the overview section as well 2025-05-09 16:36:02 +02:00
Mamadou Babaei c07e36bc89 fix a main menu title missing keyword 2025-05-09 16:36:02 +02:00
Mamadou Babaei 7865724e0a a minor punctuation fix in the changelog 2025-05-09 16:36:01 +02:00
Mamadou Babaei 30300cd265 add sgble and sgblexx rust dependency licenses 2025-05-09 16:36:01 +02:00
Mamadou Babaei f95b70a778 bump the senseglove libraries to a ble-aware version that resolves android build issues 2025-05-09 16:36:00 +02:00
Mamadou Babaei eb234ebaa6 bump sgconnect for android to an experimental unreleased ble-aware implementation 2025-05-09 16:35:59 +02:00
Mamadou Babaei 88960dec55 bump senseglove libraries to a yet to be versioned, experimental release, with ble support 2025-05-09 16:35:58 +02:00
Mamadou Babaei 73ed4e8d16 add initial support for epic native toolchain v24 2025-05-09 16:35:57 +02:00
Mamadou Babaei a56cd8d211 bump the senseglove libraries to v2.106.0-d5361a48 2025-05-09 16:35:56 +02:00
Mamadou Babaei b5ebf59916 bump the plugin version to v2.4.2 2025-02-17 13:29:27 +01:00
Mamadou Babaei 9f7bc80fb9 list the third-party tutorials with a description in their corresponding parent sections 2025-02-17 13:29:27 +01:00
Mamadou Babaei 2127a1959c bump the plugin version to v2.4.1 2025-02-14 15:25:15 +01:00
Mamadou Babaei 2b3d8830d9 fix a bug that breaks the custom styles on the release urls 2025-02-14 15:07:38 +01:00
Mamadou Babaei 7c245ceddb apply a minor handbook makefile fix 2025-02-14 15:07:38 +01:00
Mamadou Babaei 7010a8c057 bump the plugin version to v2.4.0 2025-02-14 12:21:25 +01:00
Mamadou Babaei c283ae3d0c update the list of supported hmds in the planned features completion status 2025-02-14 12:11:26 +01:00
Mamadou Babaei 81d1b90dfe remove meta xr plugin compatibility from the planned features completion status 2025-02-14 12:11:26 +01:00
Mamadou Babaei 2406297806 fix documentation errors and confusions 2025-02-14 12:11:26 +01:00
Mamadou Babaei 2e48b503ad list the vrexpansion plugin demo in the extra resources section 2025-02-14 12:11:26 +01:00
Mamadou Babaei 0b5feb962d Revert "experiment with a hacky approach to make metaxr work"
This reverts commit f3bc6502e4.
2025-02-14 12:11:26 +01:00
Mamadou Babaei f80c6bdab1 Revert "add SetupMetaXRAvailability during the build time to define WITH_METAXR"
This reverts commit e2c50e9c77.
2025-02-14 12:11:26 +01:00
Mamadou Babaei 800522bd04 remove metaxr compatibility from the documentation along with its assets and replace it with a caution incompatibility note 2025-02-14 12:11:26 +01:00
Mamadou Babaei e77728ff0c remove metaxr compatibility notes from the changelog for this release 2025-02-14 12:11:26 +01:00
Mamadou Babaei 1105ffd01b minor changelog fixes 2025-02-14 12:11:26 +01:00
Mamadou Babaei c2fd40d486 minor documentation fixes 2025-02-14 12:11:25 +01:00
Mamadou Babaei 2ed6197879 add notes in regards to pcvr and standlone modes support for vive and meta hmds 2025-02-14 12:11:25 +01:00
Mamadou Babaei 07fc3a6b24 fix the platform support matrix formatting 2025-02-14 12:11:25 +01:00
Mamadou Babaei 18c5bc731b add a deprecation note for ue 5.2 2025-02-14 12:11:25 +01:00
Mamadou Babaei 6b1f5c10f8 mark ue 5.5 meta quest standalone mode as supported 2025-02-14 12:11:25 +01:00
Mamadou Babaei 361cd30740 mark ue 5.5 meta quest standalone mode as supported 2025-02-14 12:11:19 +01:00
Mamadou Babaei 7853dd2ed3 add a few third-party tutorials 2025-02-14 12:11:15 +01:00
Mamadou Babaei b8cf402bb6 minor url fix 2025-02-14 12:11:15 +01:00
Mamadou Babaei 5709de714b experiment with a hacky approach to make metaxr work 2025-02-14 12:11:15 +01:00
Mamadou Babaei 5a26fab5ae add SetupMetaXRAvailability during the build time to define WITH_METAXR 2025-02-14 12:11:15 +01:00
Mamadou Babaei 4a1aec916c fix the changelog's grammatical issues and typos 2025-02-14 12:11:15 +01:00
Mamadou Babaei 7648891cbe add missing headers to solve runuat build issues 2025-02-14 12:11:15 +01:00
Mamadou Babaei b00127554d add htc vive optimal rendering settings 2025-02-14 12:11:14 +01:00
Mamadou Babaei 76c7cbb27f add htc vive specific optimization tips for running in standalone mode 2025-02-14 12:11:14 +01:00
Mamadou Babaei aaadad657b update viveopenxr XR_EXT_hand_tracking and wrist-tracking documentation with more accurate details 2025-02-14 12:11:14 +01:00
Mamadou Babaei 26a38ecfd0 add initial ultimate tracker and OpenXRXrTracker support which is not fully functional 2025-02-14 12:11:14 +01:00
Mamadou Babaei c5ba565568 bring the wrist-tracking hardware setup and XR_EXT_hand_tracking documentation on par with the recent changes 2025-02-14 12:11:14 +01:00
Mamadou Babaei 6427fd7157 clear up debug logs 2025-02-14 12:11:14 +01:00
Mamadou Babaei 079fe14613 add support for htc vive wrist trackers on android 2025-02-14 12:11:14 +01:00
Mamadou Babaei 251dbb4840 fix a comment formatting 2025-02-14 12:11:14 +01:00
Mamadou Babaei cee33aa684 fix a typo 2025-02-14 12:11:14 +01:00
Mamadou Babaei a1ce48e133 add support for htc vive focus vision hmd auto-detection and various htc hmds auto-detection support on android 2025-02-14 12:11:14 +01:00
Mamadou Babaei 5a70218a71 optimize FSGArrayUtils by pre-allocating memory instead of growing by every emplace_back or add 2025-02-14 12:11:14 +01:00
Mamadou Babaei 426f6e8855 fix a comment 2025-02-14 12:11:14 +01:00
Mamadou Babaei 664fdef477 use fixed-width integers 2025-02-14 12:11:14 +01:00
Mamadou Babaei f6df174a68 clarify how to setup the VIVE Wrist Trackers in various configurations 2025-02-14 12:11:14 +01:00
Mamadou Babaei f387b8a54b add ue 5.2 deprectation notes to the changelog 2025-02-14 12:11:14 +01:00
Mamadou Babaei d827399097 minor comment fixes 2025-02-14 12:11:13 +01:00
Mamadou Babaei ec067bdacc remove redundant sgxrtracker code 2025-02-14 12:11:13 +01:00
Mamadou Babaei d8f7f7db59 use engine api to set the tracking motion source 2025-02-14 12:11:13 +01:00
Mamadou Babaei 31e03380c9 fix the non-editor build issues caused by the recent motion sources refactor 2025-02-14 12:11:13 +01:00
Mamadou Babaei 6f9f0c55b6 refactor the way we populate and utilize motion sources for viveopenxr compatibility 2025-02-14 12:11:13 +01:00
Mamadou Babaei 151e0bdee2 remove redundant dependency module 2025-02-14 12:11:13 +01:00
Mamadou Babaei 955f3487a5 add the FSGPluginUtils utility class for other plugins or modules availability detection such as Meta XR and ViveOpenXR 2025-02-14 12:11:13 +01:00
Mamadou Babaei 8f1eff6e22 mention meta xr and viveopenxr plugins compatibility in the planned features completion status 2025-02-14 12:11:13 +01:00
Mamadou Babaei c1b2527513 revamp the Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets and Deploying to Android (Standalone) documentation and the Meta XR-compatibile and ViveOpenXR-compatibile instructions 2025-02-14 12:11:13 +01:00
Mamadou Babaei 3a5c8e1f89 add FSGConnectJNI::Initialize() and FSGCoreJNI::Initialize() return codes to Android logs for detailed debugging purposes through adb logcat 2025-02-14 12:11:13 +01:00
Mamadou Babaei 2237b15e67 add a missing url 2025-02-14 12:11:13 +01:00
Mamadou Babaei f358e0292b apply some minor changelog fixes 2025-02-14 12:11:13 +01:00
Mamadou Babaei aded745d06 update the changelog with the unreleased changes 2025-02-14 12:11:13 +01:00
Mamadou Babaei 09bd8b8955 use ue 5.5 header github links in the fxrmotioncontrollerdata page since its removal is likey in ue 5.6 2025-02-14 12:11:13 +01:00
Mamadou Babaei 90cacff9a9 fixed a few broken URLs caused by bad markdown formatting 2025-02-14 12:11:12 +01:00
Mamadou Babaei 5df61c7085 update the changelog with the unreleased changes 2025-02-14 12:11:12 +01:00
Mamadou Babaei 532e18ea73 bump the SenseGlove Unreal Engine Marketplace Packager v0.5.0-7df1183 2025-02-14 12:11:12 +01:00
Mamadou Babaei 5eb1e0be31 make the handbook scp operations safer by utilizing quotes 2025-02-14 12:11:12 +01:00
Mamadou Babaei ba95e455f5 reintroduce Michael-F-Bryan/mdbook-epub backend for the handbook as its issue #115 have been solved 2025-02-14 12:11:12 +01:00
Mamadou Babaei d05c814c40 make the handbook makefile safer by wrapping files/folder navigations/operations in quotes 2025-02-14 12:11:12 +01:00
Mamadou Babaei bee2f4ff38 remove a redundant copy from the handbook makefile 2025-02-14 12:11:12 +01:00
Mamadou Babaei 0ca91da448 remove redundant steps from the handbook makefile 2025-02-14 12:11:12 +01:00
Mamadou Babaei 70e669e89d remove unused variable SG_DOCUMENTATION_EPUB_DIR from the handbook makefile 2025-02-14 12:11:12 +01:00
Mamadou Babaei 8f4afa1587 migrate the documentation changelogs for the next unreleased version to its own section 2025-02-14 12:11:12 +01:00
Mamadou Babaei a7c9ba2480 bump the mdbook-alerts crate to v0.7.x 2025-02-14 12:11:11 +01:00
Mamadou Babaei 97c134dd19 bump the SenseGlove libraries to v2.105.3-97ea18cb 2025-02-14 12:11:11 +01:00
Mamadou Babaei e5bbf750c5 update the changelog with unreleased changes 2025-02-14 12:11:11 +01:00
Mamadou Babaei 0a8ad801bc bump the SenseGlove Unreal Engine Marketplace Packager v0.4.1-e39a4f4 2025-02-14 12:11:10 +01:00
Mamadou Babaei 0544e3e821 fix the changelog formatting 2025-02-14 12:11:10 +01:00
Mamadou Babaei 18201c1e79 bump the copyright years 2025-02-14 12:11:10 +01:00
Mamadou Babaei 083a54678b clarify htc vive stand-alone support status in the platform support matrix 2025-02-14 12:11:10 +01:00
Mamadou Babaei beafb0df65 bump the plugin version to v2.3.2 2025-01-28 14:55:50 +01:00
Mamadou Babaei a21469e09b fix a critical issue where HandStates->GetTransform(KeyPoint) was incorrectly resolving to (&HandStates[0])->GetTransform(KeyPoint), causing both hands to use the left hand's wrist transform under specific conditions 2025-01-28 14:55:50 +01:00
Mamadou Babaei 11fd74b88c bump the plugin version to v2.3.1 2024-11-27 10:11:50 +01:00
Mamadou Babaei 222cefaedc do an ensure check instead of silently ignoring the non-existent joint 2024-11-27 10:11:50 +01:00
Mamadou Babaei 9687d8c52b calculate the bone ref transforms using the current mesh rather than the reference mesh 2024-11-27 10:11:50 +01:00
Mamadou Babaei 205380cfbf white space and code formatting fixes 2024-11-27 10:11:50 +01:00
Mamadou Babaei bc0f269479 bump the plugin version to v2.3.0 2024-11-14 00:31:28 +01:00
Mamadou Babaei a1938bd151 fix ue 5.5 deprecation warnings inside USGVirtualHandComponent 2024-11-14 00:26:43 +01:00
Mamadou Babaei a1ad2314dd fix rocket build issues by adding missing the headers 2024-11-14 00:26:43 +01:00
Mamadou Babaei fb75ea3db0 list AndroidPermission plugin as a dependency 2024-11-14 00:26:42 +01:00
Mamadou Babaei 6d0b59446c remove comments that probably pasted by mistake 2024-11-14 00:26:42 +01:00
Mamadou Babaei e61e8e7d29 revamp the way the plugin requests permisions on Android by showing a pop-up to the user rather than silently crashing if those permisions were not already given 2024-11-14 00:26:42 +01:00
Mamadou Babaei a9cd37f7bd implement the android permissions singleton responsible for requesting android permissions and checking those 2024-11-14 00:26:42 +01:00
Mamadou Babaei 37f2d7ecdf re-order the required permissions alphabetically inside the android upl file 2024-11-14 00:26:42 +01:00
Mamadou Babaei 62df2be2e6 make the USGBackend constructor private 2024-11-14 00:26:42 +01:00
Mamadou Babaei ff4cc765f3 remove USGBackend class config specifier 2024-11-14 00:26:42 +01:00
Mamadou Babaei 33438f1c01 apply a minor formatting fix to the changelog 2024-11-14 00:26:42 +01:00
Mamadou Babaei ae3ca0f427 bump the plugin version to v2.2.2 2024-11-08 12:24:44 +01:00
Mamadou Babaei 4deb7162b4 fix a chain of glove and hand-tracking bugs that render the hand-tracking state invalid at certain times 2024-11-08 12:24:44 +01:00
Mamadou Babaei c15be7eb69 bump the plugin version to v2.2.1 2024-10-23 14:50:28 +02:00
Mamadou Babaei 588add1523 revise documentation to point to fab instead of ue marketplace 2024-10-23 14:50:28 +02:00
Mamadou Babaei bdbcbe7e39 bump the plugin version to v2.2.0 2024-10-22 06:57:25 +02:00
Mamadou Babaei 58c2d2027f remove ue 5.5+ code that causes build failure and cannot be wrapped inside if/def/end preprocessors due to lack of its support in uht 2024-10-22 06:57:24 +02:00
Mamadou Babaei c4ebfa8e60 list ue 5.5 in the sgum-packager configuration file 2024-10-22 06:57:24 +02:00
Mamadou Babaei 4871ba3012 include Runtime/Launch/Resources/Version.h only where it matters 2024-10-22 06:57:24 +02:00
Mamadou Babaei d62756beb8 add the documentation on consuming the FXRHandTrackingState struct in both Blueprint and C++ 2024-10-22 06:57:24 +02:00
Mamadou Babaei 6af11e125e minor formatting fix 2024-10-22 06:57:24 +02:00
Mamadou Babaei 44fc879037 change SG_BROWSER_BINARY_PATH_LINUX binary path 2024-10-22 06:57:24 +02:00
Mamadou Babaei 64857c7b3a migrate away from the deprecated FXRMotionControllerData in favor of FXRMotionControllerState and FXRHandTrackingState on UE 5.5+ 2024-10-22 06:57:18 +02:00
Mamadou Babaei 72e742e508 bump the plugin version to v2.1.4 2024-10-22 05:30:16 +02:00
Mamadou Babaei 2535b9c4fb add the missing release title to the v2.1.3 changelog entry 2024-10-22 05:30:16 +02:00
Mamadou Babaei be1823c16f update the documentation on consuming the FXRMotionControllerData struct 2024-10-22 05:30:16 +02:00
Mamadou Babaei 1bf32dc10f bump the plugin version to v2.1.3 2024-10-11 12:31:23 +02:00
Mamadou Babaei a8db78d521 update the platform support matrix and also add a note in regards to fab and ue marketplace transition 2024-10-11 12:31:23 +02:00
Mamadou Babaei 0ec25246e5 add the planned features for the v2.2.x release series 2024-10-11 12:31:23 +02:00
Mamadou Babaei e7a9915757 silence another ue 5.5 deprecation warning with a temporary workaround for the time being 2024-10-11 12:31:23 +02:00
Mamadou Babaei e0829008bf avoid mentioning the patch releases in the planned features completion status page 2024-10-11 12:31:23 +02:00
Mamadou Babaei f60fd2ff66 address a few ue 5.5 deprecation warnings 2024-10-11 12:31:23 +02:00
Mamadou Babaei b69bb080f6 add a missing header 2024-10-11 12:31:23 +02:00
Mamadou Babaei cddba9a591 add support for epic native toolchain v23 2024-10-11 12:31:23 +02:00
Mamadou Babaei 7b36d9fc4d bump the senseglove libraries to v2.105.2-f2de4b89 2024-10-11 12:31:22 +02:00
Mamadou Babaei 7dcc472062 fix code formatting 2024-10-11 12:31:22 +02:00
Mamadou Babaei f17ddfdaf2 remove a redundant header 2024-10-11 12:31:22 +02:00
Mamadou Babaei cd71b90a53 fix a bug inside USGVirtualHandComponent::PostEditChangeProperty() where the get member name check happens against the wrong class and member names 2024-10-11 12:31:22 +02:00
Mamadou Babaei b34f1cfc86 fix a grammatical typo in a comment 2024-10-11 12:31:22 +02:00
Mamadou Babaei 173806b336 bump the plugin version to v2.1.2 2024-09-02 19:38:34 +02:00
Mamadou Babaei 8069ced45a update the changelog 2024-09-02 19:38:34 +02:00
Mamadou Babaei fd0ee0a7bc update the changelog 2024-09-02 19:38:34 +02:00
Mamadou Babaei 82f1f8fe0a fix a few virtual hand component visibility issues 2024-09-02 19:38:34 +02:00
Mamadou Babaei 40d6325a0f fix the non-existent default hand-mesh warnings polluting the logs when packaging the game 2024-09-02 19:38:34 +02:00
Mamadou Babaei 6996bac162 update the changelog 2024-09-02 19:38:34 +02:00
Mamadou Babaei cd2297d695 fix the wrong script name for USXRTrackerKismetLibrary 2024-09-02 19:38:34 +02:00
Mamadou Babaei 92c066bb05 fix the wrong script name for USGHMDTrackerKismetLibrary 2024-09-02 19:38:34 +02:00
Mamadou Babaei 56af08e261 expand the clickable area on the handbook index page revision buttons 2024-09-02 19:38:34 +02:00
Mamadou Babaei c1db061d4c an overview title fix to match the summary file 2024-09-02 19:38:33 +02:00
Mamadou Babaei 13956cc579 bump the SenseGlove Unreal Engine Plugin to v2.1.1 2024-08-18 01:46:51 +02:00
Mamadou Babaei 105053e442 fix documentation typos 2024-08-18 01:46:51 +02:00
Mamadou Babaei 7787296c3a fix a bug where SG_GIT_IS_SHALLOW_CLONE while building the handbook is always set to yes even if it's not a shadow clone 2024-08-18 01:32:51 +02:00
Mamadou Babaei 34b66f54a2 removed android ndk r25 armv7 and x86 dependencies brought back by mistake while merging v2.1.0 from the dev branch to the master branch 2024-08-18 00:55:32 +02:00
Mamadou Babaei 9df3e94e60 fix a bug that causes a handbook revision mismatch when deploying the handbook from the dev branch 2024-08-18 00:28:33 +02:00
Mamadou Babaei 365f660f34 fix the messed up changelog file caused by cherry-picking merge conflicts between the dev branch and the master branch 2024-08-18 00:10:38 +02:00
Mamadou Babaei 34a508a3a2 bump the plugin version to v2.1.0 2024-08-16 19:55:24 +02:00
Mamadou Babaei ac65009fdd fix build issues caused by cherry-pick order between v2.0.x and v2.1.x releases; the dev branch already contains these fixes 2024-08-16 19:55:24 +02:00
Mamadou Babaei 2960661a0c extract the git version from the remote repo when it's a shallow clone to allow the sgum-packager work with release branches 2024-08-16 19:09:25 +02:00
Mamadou Babaei e0d2d994f3 determine the value of mdbook site-url from the makefile instead of hardcoding it per branch 2024-08-16 18:01:52 +02:00
Mamadou Babaei cac90aea0f fix ue 5.4 runuat build issues inside the sggrabcomponent caused by missing headers 2024-08-16 18:01:52 +02:00
Mamadou Babaei 115ef0adce fix a broken url 2024-08-16 18:01:52 +02:00
Mamadou Babaei 3584e9e947 add make pack to the output of make help 2024-08-16 18:01:52 +02:00
Mamadou Babaei d5f3b0d65d fix a broken url 2024-08-16 18:01:52 +02:00
Mamadou Babaei 8cf22586bb fix a url 2024-08-16 18:01:52 +02:00
Mamadou Babaei f9ae32f8bd add topic: Upgrade Guide 2024-08-16 18:01:52 +02:00
Mamadou Babaei a371ca283c add the sub-topic: Optimizing Unreal Projects for Mobile 2024-08-16 18:01:52 +02:00
Mamadou Babaei 2df8295ba4 formatting fixes 2024-08-16 18:01:52 +02:00
Mamadou Babaei b038fa70a1 add topic: Optimizing Your Project for Higher FPS 2024-08-16 18:01:51 +02:00
Mamadou Babaei 1d2b965e2e lock cargo dependencies for the hadbook to pecific major/minor releases and not patch releases 2024-08-16 18:01:51 +02:00
Mamadou Babaei a895f45700 clarify the note about how the separation of the real and virtual hand rendering is broken 2024-08-16 18:01:51 +02:00
Mamadou Babaei a2425bef89 fix a typo 2024-08-16 18:01:51 +02:00
Mamadou Babaei 4d10c34fa5 remove troublesome inline keywords added by jetbrains rider 2024-08-16 18:01:51 +02:00
Mamadou Babaei e89cd20117 mark the separation of the real and virtual hand rendering as broken and a note to the known issues section 2024-08-16 18:01:51 +02:00
Mamadou Babaei f412c56654 fix a few bugs that does affect the real hand collision events because of SetVisibility and redundant checking against grabbed actor 2024-08-16 18:01:51 +02:00
Mamadou Babaei 55ba62deaa replace SGPawn::FImpl::EnableActorPhysics() and SGPawn::FImpl::DisableActorPhysics() with USGGrabComponent::SimulatePhysics() 2024-08-16 18:01:51 +02:00
Mamadou Babaei 3717c86614 enable bGravityEnabled, bSimulatePhysics, and call WakeRigidBody on grab component's owning actor at BeginPlay() if bAffectPhysicsState is enabled 2024-08-16 18:01:51 +02:00
Mamadou Babaei 02a2f58fd1 document Configuring the SGPawn and Plugin Virtual Hand Mesh Settings as the final step in setting up the virtual hand meshes 2024-08-16 18:01:51 +02:00
Mamadou Babaei 14613bed31 fix a typo 2024-08-16 18:01:51 +02:00
Mamadou Babaei c77504c44a use the value of GrabAttachPointSocketName from the plugin settings as default for USGGrabComponent's AttachmentSocketName uproperty 2024-08-16 18:01:51 +02:00
Mamadou Babaei e02db1e3fc add the sgbasicdemo-openxr repository to the examples and demo projects section 2024-08-16 18:01:51 +02:00
Mamadou Babaei 6a41d4464a minor fix 2024-08-16 18:01:51 +02:00
Mamadou Babaei b89fc2405d add video tutorials 2024-08-16 18:01:51 +02:00
Mamadou Babaei b812ca08d7 add the contents for setting up the grab/release, and the touch systems 2024-08-16 18:01:51 +02:00
Mamadou Babaei 461e1b18dd add another android note 2024-08-16 18:01:51 +02:00
Mamadou Babaei 2701c6a0cf fix the display name for various overloads of the Blueprint-exposed function Queue Command Vibro Level to expose sensible display names. 2024-08-16 18:01:50 +02:00
Mamadou Babaei 1c362a9ecb a changelog fix 2024-08-16 18:01:50 +02:00
Mamadou Babaei 98e7994ecf fix a topic title 2024-08-16 18:01:50 +02:00
Mamadou Babaei 06dc267743 minor fix 2024-08-16 18:01:50 +02:00
Mamadou Babaei db1b209f1a add topic: Deploying to Android (Standalone) 2024-08-16 18:01:50 +02:00
Mamadou Babaei 7c9ae5bed1 add a note in regards to meta xr and vive openxr plugins incompatibility 2024-08-16 18:01:50 +02:00
Mamadou Babaei 52480c7543 add instructions: Setting up the SenseGlove Grab and Touch Sockets 2024-08-16 18:01:50 +02:00
Mamadou Babaei 3521b03fed remove irrelevant section as it's already set up by the plugin automatically 2024-08-16 18:01:50 +02:00
Mamadou Babaei 18ac65e070 mention a relevant video tutorial 2024-08-16 18:01:50 +02:00
Mamadou Babaei 1b748e3cd4 close the div tag properly 2024-08-16 18:01:50 +02:00
Mamadou Babaei 97887723be add the instructions for: Setting up the Rigid Bodies 2024-08-16 18:01:50 +02:00
Mamadou Babaei 7b0d2ef57f fix license titles 2024-08-16 18:01:50 +02:00
Mamadou Babaei 5959fa69cd add instructions for importing / exporting compatible virtual hand meshes 2024-08-16 18:01:50 +02:00
Mamadou Babaei d03e4d63de minor fix 2024-08-16 18:01:49 +02:00
Mamadou Babaei ec02fef4ba update the overview section 2024-08-16 18:01:49 +02:00
Mamadou Babaei 4b69b80faa add the content for setting up the wrist tracking hardware section 2024-08-16 18:01:49 +02:00
Mamadou Babaei 2f932da631 add important notes for setting up the wrist tracker and virtual hands 2024-08-16 18:01:49 +02:00
Mamadou Babaei b0ba8e5fb2 add the complete documentation for setting up the senseglove default classes 2024-08-16 18:01:49 +02:00
Mamadou Babaei 0d02e4ad6b fix a build issue on ue 5.2 2024-08-16 18:01:49 +02:00
Mamadou Babaei a2844e9e86 apply summary.md changes to the overview page 2024-08-16 18:01:49 +02:00
Mamadou Babaei 59db3090b7 fix borken links 2024-08-16 18:01:49 +02:00
Mamadou Babaei 0aef4b13cb add more topics to the menu 2024-08-16 18:01:49 +02:00
Mamadou Babaei 893707beeb minor fix 2024-08-16 18:01:49 +02:00
Mamadou Babaei 35294a9ab5 add the introduction to the senseglove default classes 2024-08-16 18:01:49 +02:00
Mamadou Babaei 52386cf471 fix the wrong content path 2024-08-16 18:01:49 +02:00
Mamadou Babaei dd4fe78880 fix README.md broken links 2024-08-16 18:01:49 +02:00
Mamadou Babaei 4dcc629198 add a caution for bvalidateifdefaultclassesaresgcompliant 2024-08-16 18:01:49 +02:00
Mamadou Babaei 00f2efc1c7 fix a typo 2024-08-16 18:01:49 +02:00
Mamadou Babaei a55e85ec05 add the console commands SG_GetEngineScalabilitySettings and SG_SetEngineScalabilitySettings 2024-08-16 18:01:49 +02:00
Mamadou Babaei afef6987f7 add the license terms for the handbook 2024-08-16 18:01:49 +02:00
Mamadou Babaei 93d5a20f12 add the boilerplate for setting up the senseglove default classes 2024-08-16 18:01:49 +02:00
Mamadou Babaei 72950feb78 fix broken links in the overview page by adding .. to the relative urls 2024-08-16 18:01:48 +02:00
Mamadou Babaei ca461ad6dc fix broken index/readme.md links in the overview page 2024-08-16 18:01:48 +02:00
Mamadou Babaei 25f1d8628b minor fix 2024-08-16 18:01:48 +02:00
Mamadou Babaei 6a40f832af add the content for the overview page 2024-08-16 18:01:48 +02:00
Mamadou Babaei 106d4d9581 minor fix 2024-08-16 18:01:48 +02:00
Mamadou Babaei 5aa2bdb052 complete the plugin configuration, settings, and overrides, sections 2024-08-16 18:01:48 +02:00
Mamadou Babaei 4b2c151948 improve the repo's main readme file 2024-08-16 18:01:48 +02:00
Mamadou Babaei ba8935c3b0 reference the handbook's extra resources 2024-08-16 18:01:48 +02:00
Mamadou Babaei 8edf5a72a4 bring on par the SGSettings blueprint api with the cpp api 2024-08-16 18:01:48 +02:00
Mamadou Babaei d14a73f990 add some custom css styles for better html formatting 2024-08-16 18:01:48 +02:00
Mamadou Babaei bf754aead1 add the plugin-settings section 2024-08-16 18:01:48 +02:00
Mamadou Babaei 52655cc8aa add a note about Hand and Body Tracking settings 2024-08-16 18:01:48 +02:00
Mamadou Babaei 9d11d5de88 add the sensecom documentation 2024-08-16 18:01:48 +02:00
Mamadou Babaei f25f09e638 add a caution in regards to broken meta quest hmds on steamvr 2024-08-16 18:01:48 +02:00
Mamadou Babaei 60e3aa6c35 fix youtube video urls 2024-08-16 18:01:48 +02:00
Mamadou Babaei 7b5f3d7ffa whitespace fix 2024-08-16 18:01:48 +02:00
Mamadou Babaei c8f785e88e add the low level api documentation 2024-08-16 18:01:48 +02:00
Mamadou Babaei 36a39e3748 complete installation instructions 2024-08-16 18:01:47 +02:00
Mamadou Babaei 3395d25376 Revert "move bFallbackToHandTrackingIfNoGloveDetected from tracking settings to glove tracking settings"
This reverts commit e16c1d216f.
2024-08-16 18:01:47 +02:00
Mamadou Babaei 3b6f38a214 move bFallbackToHandTrackingIfNoGloveDetected from tracking settings to glove tracking settings 2024-08-16 18:01:47 +02:00
Mamadou Babaei 4f64fed83c add an important alert 2024-08-16 18:01:47 +02:00
Mamadou Babaei eee3c99a69 minor fixes 2024-08-16 18:01:47 +02:00
Mamadou Babaei d1fac4a9ee fix a broken link 2024-08-16 18:01:47 +02:00
Mamadou Babaei d010686604 add instructions: Enabling XR_EXT_hand_tracking OpenXR extension on VR Headsets 2024-08-16 18:01:47 +02:00
Mamadou Babaei a2c1eb713d add topic: Extra Resources 2024-08-16 18:01:47 +02:00
Mamadou Babaei fd85eab3a6 add instructions: Safe and Reliable Glove Access in Blueprint 2024-08-16 18:01:47 +02:00
Mamadou Babaei 6832b5b426 center all youtube videos 2024-08-16 18:01:47 +02:00
Mamadou Babaei 958aab50c5 add instructions: Enabling The SenseGlove Unreal Engine Plugin and Veirfying the Plugin Version 2024-08-16 18:01:47 +02:00
Mamadou Babaei e94eb4a811 whitespace fix 2024-08-16 18:01:47 +02:00
Mamadou Babaei 089476fddd add the epic games launcher installation instructions 2024-08-16 18:01:47 +02:00
Mamadou Babaei bf9ed153f7 replace inline code blocks with back tilde inside the changelog 2024-08-16 18:01:47 +02:00
Mamadou Babaei 36eaafbf1f update the changelog 2024-08-16 18:01:47 +02:00
Mamadou Babaei f9ef0f0513 revamp the main readme file with the latest information and instructions 2024-08-16 18:01:47 +02:00
Mamadou Babaei 4c51cda376 change the DocsURL from the old blueprint docs to the handbook 2024-08-16 18:01:46 +02:00
Mamadou Babaei d0bda099df improve the main index layout 2024-08-16 18:01:46 +02:00
Mamadou Babaei 0ec3695103 make the main index generation code more readable 2024-08-16 18:01:46 +02:00
Mamadou Babaei a320b20309 deploy the favicon to the main index as well 2024-08-16 18:01:46 +02:00
Mamadou Babaei c6bfb6d718 bump the SenseGlove Unreal Engine Marketplace Packager v0.4.0-a65bb20 2024-08-16 18:01:46 +02:00
Mamadou Babaei eab44d1ea4 fix the windows cmd.exe issues with rename/copy and always use move when invoking the pack target 2024-08-16 18:01:46 +02:00
Mamadou Babaei 00de3431e8 remove the changelog.md file from filterplugin list and list the pdf and html documentation files 2024-08-16 18:01:46 +02:00
Mamadou Babaei 3254baa358 minor fixes 2024-08-16 18:01:46 +02:00
Mamadou Babaei 9873c844a8 document for dependencies 2024-08-16 18:01:46 +02:00
Mamadou Babaei 63c05aa340 mention the purpose of make pack in the handbook readme file 2024-08-16 18:01:46 +02:00
Mamadou Babaei 1c883e942c add make pack target to the handbook makefile 2024-08-16 18:01:46 +02:00
Mamadou Babaei 1ee9e1697e try to fix rsync error on windows: error in rsync protocol data stream (code 12) 2024-08-16 18:01:46 +02:00
Mamadou Babaei b148eea514 fix the windows rsync/git bash issue: the source and destination cannot both be remote 2024-08-16 18:01:46 +02:00
Mamadou Babaei 42f8fc4eb8 add a deployment note in regards to sourcing the deployment configurations on windows + git bash setups 2024-08-16 18:01:46 +02:00
Mamadou Babaei b43cf9e93d introduce #sg-handbook-revision-url and #sg-handbook-revision-url + other preprocessor improvements 2024-08-16 18:01:46 +02:00
Mamadou Babaei f5c6688803 add the initial implementation for the deploy target 2024-08-16 18:01:46 +02:00
Mamadou Babaei eda0b0864d revamp the handbook make targets 2024-08-16 18:01:45 +02:00
Mamadou Babaei 73fed8a5f7 fix the broken pdf toc generation on linux 2024-08-16 18:01:45 +02:00
Mamadou Babaei ad8dc9b5a0 replace all bitfield uproperties with booleans 2024-08-16 18:01:45 +02:00
Mamadou Babaei ec83c132f4 adjust the exclusion list to the latest repo structure overhaul 2024-08-16 18:01:45 +02:00
Mamadou Babaei da18b160d8 merge the pack branch into the plugin's source and add the sgum-packager v0.3.0 utility for automatic packaging and deployment to epic marketplace 2024-08-16 18:01:45 +02:00
Mamadou Babaei ee725626e0 winpython fixes and fix pdf-outline generation on gentoo using a temporary python env 2024-08-16 18:01:45 +02:00
Mamadou Babaei 0248a2444d minor fixes and clean up 2024-08-16 18:01:45 +02:00
Mamadou Babaei c2d9eb2e70 replace inline code blocks with back tilde 2024-08-16 18:01:45 +02:00
Mamadou Babaei 6f70a748fd complete advanced-topics/openxr/consuming-fxrmotioncontrollerdata/cpp tutorial 2024-08-16 18:01:45 +02:00
Mamadou Babaei 6675c6e708 set the default value of bValidateIfDefaultClassesAreSGCompliant to false 2024-08-16 18:01:45 +02:00
Mamadou Babaei 742201c264 crop the image edge 2024-08-16 18:01:45 +02:00
Mamadou Babaei e9a3cb2024 add winpython and enable pdf-outline 2024-08-16 18:01:44 +02:00
Mamadou Babaei 7bd4f85d61 complete advanced-topics/openxr/consuming-fxrmotioncontrollerdata/blueprint tutorial 2024-08-16 18:01:44 +02:00
Mamadou Babaei 50f2278a87 fix a bug where tracking status not being set when the hand data is valid 2024-08-16 18:01:44 +02:00
Mamadou Babaei b1def88b73 specify the browser binary path from the gnu-make file 2024-08-16 18:01:43 +02:00
Mamadou Babaei dba1ee290c formatting fix 2024-08-16 18:01:43 +02:00
Mamadou Babaei d2368533db add partial content to Handbook/src/advanced-topics/openxr/consuming-fxrmotioncontrollerdata/blueprint.md 2024-08-16 18:01:43 +02:00
Mamadou Babaei 8da516a169 minor fix 2024-08-16 18:01:43 +02:00
Mamadou Babaei 7d1a182900 add links to the ue source code from github 2024-08-16 18:01:43 +02:00
Mamadou Babaei f726697856 add the blueprint title line 2024-08-16 18:01:43 +02:00
Mamadou Babaei 96dad6e606 minor fix 2024-08-16 18:01:43 +02:00
Mamadou Babaei 9eee881350 minor fix 2024-08-16 18:01:43 +02:00
Mamadou Babaei 150ea6c169 mention the pdf format as well 2024-08-16 18:01:43 +02:00
Mamadou Babaei c7bf97032e add mdbook-pdf support which is able to print pdfs using chromedevtools protocol retaining images 2024-08-16 18:01:43 +02:00
Mamadou Babaei b186d1d85a remove cargo installs for typst-cli, mdbook-typst, and mdbook-epub 2024-08-16 18:01:43 +02:00
Mamadou Babaei 60d1166d72 move the /assets/* content to their relative folders as it creates printing issues 2024-08-16 18:01:43 +02:00
Mamadou Babaei 1ba70e0a5a add the content for the Consuming FXRMotionControllerData section 2024-08-16 18:01:43 +02:00
Mamadou Babaei 1b61d49d62 replace c++ standard int type definitions with the ones from unreal 2024-08-16 18:01:43 +02:00
Mamadou Babaei e72bbb7df4 remove the pdf and epub backend due to build errors and inability to show markdown images 2024-08-16 18:01:43 +02:00
Mamadou Babaei a51566d194 consider the value of site-url when verifying the handbook revision and simplify the makefile code to do so as well 2024-08-16 18:01:43 +02:00
Mamadou Babaei 1a18e8f200 make the default site-url next 2024-08-16 18:01:43 +02:00
Mamadou Babaei a964f8c2c7 mention the pdf and epub formats as well and rename the pdf output filename 2024-08-16 18:01:43 +02:00
Mamadou Babaei e6325ef3ca rename a page 2024-08-16 18:01:43 +02:00
Mamadou Babaei 9d0b5c9f05 switch to typst-cli from crates.io instead of git 2024-08-16 18:01:43 +02:00
Mamadou Babaei afece5c62b bump senseglove libraries to v2.104.1-55fddbd2 2024-08-16 18:01:42 +02:00
Mamadou Babaei d1a18d6e98 fix the inro notice 2024-08-16 18:01:42 +02:00
Mamadou Babaei 74a35dae3e fix a table column header 2024-08-16 18:01:42 +02:00
Mamadou Babaei 373297cc21 remove edit-url-template from the book.toml file 2024-08-16 18:01:42 +02:00
Mamadou Babaei b72e6bb07e minor fix 2024-08-16 18:01:42 +02:00
Mamadou Babaei 184c8d7d15 remove mdbook-lintcheck 2024-08-16 18:01:42 +02:00
Mamadou Babaei 72c6a0bb77 add github flavored markdown alerts to the handbook 2024-08-16 18:01:42 +02:00
Mamadou Babaei 777cd97963 add experimental mdbook plugins for epub and pdf generation 2024-08-16 18:01:42 +02:00
Mamadou Babaei ba6d461d36 fix the mdbook errors 2024-08-16 18:01:42 +02:00
Mamadou Babaei 512885c030 add more change logs 2024-08-16 18:01:42 +02:00
Mamadou Babaei 2ea5100f9a add more change logs 2024-08-16 18:01:42 +02:00
Mamadou Babaei 97e6f11282 update the changelog with many of the recent changes 2024-08-16 18:01:42 +02:00
Mamadou Babaei bbe9097320 minor changelog fix 2024-08-16 18:01:42 +02:00
Mamadou Babaei ba0e10aa03 add FSGDebugCube 2024-08-16 18:01:42 +02:00
Mamadou Babaei 0209458767 reorganize the handbook structure and add new sections 2024-08-16 18:01:42 +02:00
Mamadou Babaei b4b618f772 rename SGGameUserSettingSettings to SGGameUserSettingsSettings 2024-08-16 18:01:42 +02:00
Mamadou Babaei 63d0433ecd rename SGHardwareBenchmarkSettings to SGHardwareBenchmarkingSettings 2024-08-16 18:01:41 +02:00
Mamadou Babaei ebb8cabf3d apply the plugin settings when the user overrides the settings for the first time 2024-08-16 18:01:41 +02:00
Mamadou Babaei cb785a7213 do not ensure as it's possible to get a nullpointer during component uninitialization 2024-08-16 18:01:41 +02:00
Mamadou Babaei 990c62c586 re-implement the virtual hand settings overrides; and apply plenty of other improvements and bug fixes to the settings system; and introduce sgdebugcubesettings 2024-08-16 18:01:41 +02:00
Mamadou Babaei b23fafd451 rename verify-build-type target to verify-handbook-revision 2024-08-16 18:01:41 +02:00
Mamadou Babaei 9a72b93b0b rename verify-build-type target to verify-build-revision 2024-08-16 18:01:41 +02:00
Mamadou Babaei 140c52b9be remove the motion source wrist tracking overrides from the wrist tracker component due to the fact that it's utilized only inside the underlying tracking module and overriding it has no effects 2024-08-16 18:01:41 +02:00
Mamadou Babaei 1804cce12a re-implement the wrist tracking settings overrides 2024-08-16 18:01:41 +02:00
Mamadou Babaei 7c3ede865b rename bInIsVisibleWhenHandDataUnavailable to bInVisibleWhenHandDataUnavailable 2024-08-16 18:01:41 +02:00
Mamadou Babaei 7c5172b661 apply some sgxrtracker enum parsing improvements 2024-08-16 18:01:41 +02:00
Mamadou Babaei 86a9adae75 rename bIsVirtualHandVisible to bVirtualHandVisible 2024-08-16 18:01:41 +02:00
Mamadou Babaei 8aac677fac delete the engine utils default constructor and destructor 2024-08-16 18:01:41 +02:00
Mamadou Babaei 0408c2b67e add the editor utils class 2024-08-16 18:01:41 +02:00
Mamadou Babaei ec12cadfa4 fix the debug virtual hand settings and logic 2024-08-16 18:01:41 +02:00
Mamadou Babaei 81f3d03fd8 fix a comment 2024-08-16 18:01:41 +02:00
Mamadou Babaei fb876cc236 introduce the senseglove unreal engine handbook 2024-08-16 18:01:41 +02:00
Mamadou Babaei d69eb6cd96 a const correctness fix 2024-08-16 18:01:41 +02:00
Mamadou Babaei 58047435ac make FSGXRTracker::GetMotionControllerData() behave the same as 5.4 on both 5.2 and 5.3 2024-08-16 18:01:41 +02:00
Mamadou Babaei 99619c2a42 minor fix 2024-08-16 18:01:41 +02:00
Mamadou Babaei 5f58470f9c update the changelog and clarify what happens when other openxr hand tracking provider's are enabled and the possible workarounds 2024-08-16 18:01:41 +02:00
Mamadou Babaei 873534d246 workaround the runuat 5.2/5.3 build issue due to missing IOpenXRHMD.h from epic public headers 2024-08-16 18:01:41 +02:00
Mamadou Babaei 0259eedf48 fix various runuat buiild issues 2024-08-16 18:01:41 +02:00
Mamadou Babaei 0c32d5bb9f break a circular dependency 2024-08-16 18:01:41 +02:00
Mamadou Babaei 70164ef27d do not reigger OnGrabStateUpdated and OnTouchStateUpdated at all when the hand mesh is not valid or visible and also some other extra measures to make sure even if they are triggered they won't affect anything 2024-08-16 18:01:40 +02:00
Mamadou Babaei cedcd5dbdb take into account the device visual type when updating the hand visibility 2024-08-16 18:01:40 +02:00
Mamadou Babaei 32a010de27 clarify the meta xr and vive openxr plugins incompatibility 2024-08-16 18:01:40 +02:00
Mamadou Babaei d43e6692c0 rename variable 2024-08-16 18:01:40 +02:00
Mamadou Babaei 7a18efe25b seprate the engine and senseglove module dependency lists 2024-08-16 18:01:40 +02:00
Mamadou Babaei c2c410f969 implement our own GetMotionControllerData instead of using the one from the XRTrackingSystem as it only picks up the first hand tracking plugin in order to make sure at least internally we use the hand-tracking data from senseglove 2024-08-16 18:01:40 +02:00
Mamadou Babaei 10c4e045f2 minor fixes 2024-08-16 18:01:40 +02:00
Mamadou Babaei 26f44b45a6 mark the SenseGlove settings as DefaultConfig 2024-08-16 18:01:40 +02:00
Mamadou Babaei f85522b041 add more bluetooth permissions to be able to request access for nearby devices on android api level 32 in addition to 29 2024-08-16 18:01:40 +02:00
Mamadou Babaei 79b92dcfc8 add the gradle deprecation warnings 2024-08-16 18:01:40 +02:00
Mamadou Babaei 8c30058bc6 never extend the content browser context menu if any skeletal mesh or skeltons selected at the same time 2024-08-16 18:01:40 +02:00
Mamadou Babaei c8f9072de9 clean up and remove the redundant asset type actions no longer required by the senseglove sockets editor 2024-08-16 18:01:40 +02:00
Mamadou Babaei 31b7184016 implement the SenseGlove grab/touch sockets one-click-setup ability on any Epic-compliant virtual hand mesh from within the Unreal Editor's Content Browser, Skeleton Editor, or Skeletal Mesh Editor 2024-08-16 18:01:40 +02:00
Mamadou Babaei 2206d54631 update the implemented features list 2024-08-16 18:01:40 +02:00
Mamadou Babaei 332b0f3a82 revamp the whole settings system in order to unify the settings across various systems, modules, and api layers 2024-08-16 18:01:40 +02:00
Mamadou Babaei 4916aa394c make the virtual hand anim instance proxy safer 2024-08-16 18:01:40 +02:00
Mamadou Babaei 72888881aa minor fix: get object by reference 2024-08-16 18:01:40 +02:00
Mamadou Babaei 4784dcb66f add the DebugVirtualHandSettings to the Debugging category 2024-08-16 18:01:40 +02:00
Mamadou Babaei a30e3d85f5 rename SGVirtualHandTrackingSettings to SGVirtualHandSettings 2024-08-16 18:01:40 +02:00
Mamadou Babaei 698cd06f57 remove the deperecated jcenter repository from the android upl file 2024-08-16 18:01:40 +02:00
Mamadou Babaei cfff76cb8a mark the x86 and armeabi-v7a platforms as unsupported inside the android upl file 2024-08-16 18:01:40 +02:00
Mamadou Babaei 563c803741 fix a critical Android crash that happens where the default development hand meshes could not be found 2024-08-16 18:01:40 +02:00
Mamadou Babaei 7a8404d63f remove the hardcoded SG_HAND_MESH_YAW_CORRECTION_OFFSET and rely on FVirtualHandTrackingSettings::RootBoneRotationCorrection 2024-08-16 18:01:39 +02:00
Mamadou Babaei 731d4e8c9a update the changelog 2024-08-16 18:01:39 +02:00
Mamadou Babaei 42eaeccd71 mention the wrist tracking hardware visualization bug as a known issue with the new openxr system 2024-08-16 18:01:39 +02:00
Mamadou Babaei 1e7b4973a6 fix runuat build issues for ue 5.4 caused by missing headers 2024-08-16 18:01:39 +02:00
Mamadou Babaei 099c30a527 remove redundant header files 2024-08-16 18:01:39 +02:00
Mamadou Babaei 0a33eec318 fix more runuat issues due to missing headers 2024-08-16 18:01:39 +02:00
Mamadou Babaei 8d3802aa09 fix runuat build issues for ue 5.2 2024-08-16 18:01:39 +02:00
Mamadou Babaei 722b95627b fix a crash when the wrist-tracker hardware set to auto-detection 2024-08-16 18:01:39 +02:00
Mamadou Babaei 643b47b92a fix a few build issues 2024-08-16 18:01:39 +02:00
Mamadou Babaei fec98b78ac fix the wrong kismet library class name 2024-08-16 18:01:39 +02:00
Mamadou Babaei f2f2b909d5 formatting fix 2024-08-16 18:01:39 +02:00
Mamadou Babaei a1328df8b1 update the changelog 2024-08-16 18:01:39 +02:00
Mamadou Babaei cc2532bed8 whitespace fix 2024-08-16 18:01:39 +02:00
Mamadou Babaei a0bf55a8d8 add missing header that contains engine version definitions 2024-08-16 18:01:39 +02:00
Mamadou Babaei 0415fd4dac drop the minimal api specifier 2024-08-16 18:01:39 +02:00
Mamadou Babaei 43bf62f764 remove redundant headers 2024-08-16 18:01:39 +02:00
Mamadou Babaei f08f252d51 remove unnecessary initialization 2024-08-16 18:01:39 +02:00
Mamadou Babaei 9e8241bd3b whitespace fix 2024-08-16 18:01:39 +02:00
Mamadou Babaei d0730d402e fix wrong kismet script names and class exports 2024-08-16 18:01:39 +02:00
Mamadou Babaei 0950cf1fb8 remove the experimental bHandTrackingVisualizationAllowed feature 2024-08-16 18:01:39 +02:00
Mamadou Babaei 9a4b23054b remove SetWristTrackingSettings from the FSGWristTrackerComponent's header file since it does not have any implementation 2024-08-16 18:01:39 +02:00
Mamadou Babaei 9f0492f961 perform a ensure before dereferencing 2024-08-16 18:01:39 +02:00
Mamadou Babaei 50c0bae537 formatting fix 2024-08-16 18:01:39 +02:00
Mamadou Babaei efe893def3 revamp the GetControllerOrientationAndPosition and GetWristTransform to use the same caluclations and get rid of bMotionSourceHandTracking in senseglove joint calculations 2024-08-16 18:01:38 +02:00
Mamadou Babaei f726960abc check if motioncontrollerdata is valid 2024-08-16 18:01:38 +02:00
Mamadou Babaei 6350c08332 remove the ability to override wrist tracking settings from the wrist tracker component 2024-08-16 18:01:38 +02:00
Mamadou Babaei 107dc1b713 fix the how we determine the motion source inside the GetControllerOrientationAndPosition and GetControllerTrackingStatus for ue versions earlier than 5.3 2024-08-16 18:01:38 +02:00
Mamadou Babaei 5d61d4a99f add htc vive stand-alone support status to the platform support matrix 2024-08-16 18:01:38 +02:00
Mamadou Babaei 4be655888d fix ue 5.2 and 5.3 build issues 2024-08-16 18:01:38 +02:00
Mamadou Babaei 6d6dfa1f77 update the changelog and the readme 2024-08-16 18:01:38 +02:00
Mamadou Babaei 3636347f72 update the changelog 2024-08-16 18:01:38 +02:00
Mamadou Babaei 6eb4777842 add the editor user interface for adding the senseglove sockets 2024-08-16 18:01:38 +02:00
Mamadou Babaei 143fdad989 temporarility change the way we calculate the wrist offset 2024-08-16 18:01:38 +02:00
Mamadou Babaei 8daae2e794 remove SGWristTrackerVisualizationComponent 2024-08-16 18:01:38 +02:00
Mamadou Babaei 0828396722 fix a few wrist tracker issues and introduce SGWristTrackerVisualizationComponent 2024-08-16 18:01:38 +02:00
Mamadou Babaei 8e1226a324 pass outer as the worldcontextobject to glovetracker::getinstance 2024-08-16 18:01:38 +02:00
Mamadou Babaei 2f23fffb73 make USGGloveTracker::GetInstance as flexible as possible 2024-08-16 18:01:38 +02:00
Mamadou Babaei f044fa9f66 simplify getworld implementation 2024-08-16 18:01:38 +02:00
Mamadou Babaei 10d14bb40f migrate the static getworld to sgengineutils 2024-08-16 18:01:38 +02:00
Mamadou Babaei 271317b292 safer in-editor getworld without the polluting logs 2024-08-16 18:01:38 +02:00
Mamadou Babaei 0c7ccd9ed9 fix the you are not the main thread and the editor is currently in a play mode errors 2024-08-16 18:01:38 +02:00
Mamadou Babaei 821215a78a fix the MarkRenderStateDirty data race condition by gathering as much as data only on the game thread 2024-08-16 18:01:38 +02:00
Mamadou Babaei 6f64f0c34a introduce bValidateIfDefaultClassesAreSGCompliant 2024-08-16 18:01:38 +02:00
Mamadou Babaei 7d5c0904e9 fix the blueprint category naming to adhere to the rest of the settings system 2024-08-16 18:01:38 +02:00
Mamadou Babaei 5f7e0d161d move hardware benchmarking settings to its own class 2024-08-16 18:01:38 +02:00
Mamadou Babaei 0554e288c3 disable bFallbackToHandTrackingIfNoGloveDetected by default 2024-08-16 18:01:38 +02:00
Mamadou Babaei 528243f849 fix a bug where sgpawn hand's finger collider interact with the world when the hand is not mesh visible 2024-08-16 18:01:37 +02:00
Mamadou Babaei 3325cb5e8f add the USGVirtualHandComponent::OnHandVisibilityChanged() event 2024-08-16 18:01:37 +02:00
Mamadou Babaei 76f5dda49a try to disable collision alltogether when the hand mesh is not visible 2024-08-16 18:01:37 +02:00
Mamadou Babaei 036b382109 update the changelog 2024-08-16 18:01:37 +02:00
Mamadou Babaei 2b7f5bd5e2 improve the sgusersettings implementation by introducing custom enum item and more accuracy 2024-08-16 18:01:37 +02:00
Mamadou Babaei 32073d34f4 implement the game user settings system 2024-08-16 18:01:37 +02:00
Mamadou Babaei 0405f6bc7c minor formatting fix 2024-08-16 18:01:37 +02:00
Mamadou Babaei 8cd10ae312 minor formatting fix 2024-08-16 18:01:37 +02:00
Mamadou Babaei 715c3b8617 add a partial workaround for a bug when the virtual hand inside the game is not visible but still have collisions with other objects inside the scene 2024-08-16 18:01:37 +02:00
Mamadou Babaei 23d30f92cd add IsAMetaQuestDevice() and IsAHtcViveDevice() methods 2024-08-16 18:01:37 +02:00
Mamadou Babaei cd93e78d2e fix vive pro detection issues by introducing additional device identifier 2024-08-16 18:01:37 +02:00
Mamadou Babaei 5acd74c855 removed the allbreaker virtual hand model as it's no longer compatible with the openxr integration 2024-08-16 18:01:37 +02:00
Mamadou Babaei 92ee0fb231 fix android build issues 2024-08-16 18:01:37 +02:00
Mamadou Babaei 281d00bfac update the changelog 2024-08-16 18:01:37 +02:00
Mamadou Babaei 926f10ad9a remove minor ue 5.1 comments and hints 2024-08-16 18:01:37 +02:00
Mamadou Babaei 2666191634 update the changelog 2024-08-16 18:01:37 +02:00
Mamadou Babaei 5a917afa27 implement bHandTrackingVisualizationAllowed 2024-08-16 18:01:37 +02:00
Mamadou Babaei d8248bfaec improve the wrist tracking code when using motion controllers 2024-08-16 18:01:37 +02:00
Mamadou Babaei b54067945a refactor the sgxrtracker internals to use transforms as pimpl methods args instead of a combination of fvectors/fquats 2024-08-16 18:01:37 +02:00
Mamadou Babaei 2d495b0f6b minor fixes, mostrly formatting 2024-08-16 18:01:37 +02:00
Mamadou Babaei 33b0e8a167 remove unused pimpl method 2024-08-16 18:01:37 +02:00
Mamadou Babaei 852f19eb92 remove dead code 2024-08-16 18:01:37 +02:00
Mamadou Babaei 19d6badb66 even more optimal fxrmotioncontroller data calculations that considers mesh when outputting senseglove data 2024-08-16 18:01:37 +02:00
Mamadou Babaei ce20af5c31 document more unreleased changes 2024-08-16 18:01:36 +02:00
Mamadou Babaei ce7dd27505 fix the wrong palm bone names on the allbreaker virtual hand models 2024-08-16 18:01:36 +02:00
Mamadou Babaei 0f9039fa86 somewhat unfinished refactored sg bone calculations 2024-08-16 18:01:36 +02:00
Mamadou Babaei 6a20cf3464 increase the default finger distal phalanges length 2024-08-16 18:01:36 +02:00
Mamadou Babaei 89ec8efe79 add the senseglove debug kismet module 2024-08-16 18:01:36 +02:00
Mamadou Babaei ec7eb93ed7 unfinished improvements based on the last commit 2024-08-16 18:01:36 +02:00
Mamadou Babaei b68faeeb7e attempt at calculating a hand model and feeding it to get hand pose 2024-08-16 18:01:36 +02:00
Mamadou Babaei c744a27a08 refactor the way we calculate the mesh bone reference transforms to read from the settings system instead of the hardcoded values 2024-08-16 18:01:36 +02:00
Mamadou Babaei fa9d45b3d5 add the hard-coded hand defaulet reference bone transfomrs to the virtual hand settings 2024-08-16 18:01:36 +02:00
Mamadou Babaei 0242b63817 openxr bugfixes and improvements + 1st attempt at calculating the fxrmotioncontrollerdata based off of the hand mesh 2024-08-16 18:01:36 +02:00
Mamadou Babaei 27aad3f005 fix more UE 5.4 RunUAT build issues 2024-08-16 18:01:36 +02:00
Mamadou Babaei e78adbab69 refactor the animation, wrist tracking, and hand interaction manipulation systems for FXRMotionControllerData compatibility 2024-08-16 18:01:36 +02:00
Mamadou Babaei 0f6e16b863 update the readme 2024-08-16 18:01:36 +02:00
Mamadou Babaei 10a8b3e793 implement the OpenXR-compatible hand tracking (XR_EXT_hand_tracking) support 2024-08-16 18:01:36 +02:00
Mamadou Babaei 3a2a50fd4b rename sgheadmountdisplay to sgheadmounteddisplay 2024-08-16 18:01:36 +02:00
Mamadou Babaei c7df5d7287 add extra null checks 2024-08-16 18:01:36 +02:00
Mamadou Babaei 71847e84f4 add vive xr elite hmd auto-detection checkes and other vive headset detection bug fixes and improvements 2024-08-16 18:01:36 +02:00
Mamadou Babaei 9fb69e1e22 remove ASGVirtualHandActor 2024-08-16 18:01:36 +02:00
Mamadou Babaei 1e77d973d7 make the sgsettings constructor private 2024-08-16 18:01:36 +02:00
Mamadou Babaei 9238109b6f bump senseglove libraries to v2.102.0-4a8bd81d and drop support for ue 5.1 and epic native toolchain v20 2024-08-16 18:01:35 +02:00
Mamadou Babaei 8d9ef757a7 remove debug logs from FSGHeadMountDisplay::GetDeviceType() 2024-08-16 18:01:35 +02:00
Mamadou Babaei 113cd4edde check hmd auto-detection against various identifiers as the names returns from the engine is not reliable 2024-08-16 18:01:35 +02:00
Mamadou Babaei 252b78af22 improve vive pro and vive focus 3 detection by utilizing optic resolution to distinguish them 2024-08-16 18:01:35 +02:00
Mamadou Babaei 1440489dc3 implement hmd and wrist tracker hardware auto-detection fallback when it's not set explicitly 2024-08-16 18:01:35 +02:00
Mamadou Babaei 1bbe19074b bump the plugin version to v2.0.8 2024-07-16 00:30:16 +02:00
Mamadou Babaei f354904290 fix a bug where the sgpawn right-hand grab colliders' default size is mistakenly set to the default value for the left-hand grab colliders at cdo initialization time 2024-07-16 00:30:16 +02:00
Mamadou Babaei f95242abdf bump the plugin version to v2.0.7 2024-05-29 12:48:31 +02:00
Mamadou Babaei 9e06a76183 make the allbreaker assets compatible with ue 5.1+ again 2024-05-29 12:48:31 +02:00
Mamadou Babaei 99b0a7a624 bump the plugin version to v2.0.6 2024-05-29 11:40:44 +02:00
Mamadou Babaei 35ade3c676 remove dev/test virtual hand models that leaked into the 5.3 branch 2024-05-29 11:34:24 +02:00
Mamadou Babaei 722c5fe7d8 bump the plugin version to v2.0.5 2024-05-22 17:33:53 +02:00
Mamadou Babaei 34559c81cd fix the wrong palm bone names on the allbreaker virtual hand models 2024-05-22 17:33:52 +02:00
Mamadou Babaei c76ae5ad59 bump the plugin version to v2.0.4 2024-05-17 11:41:09 +02:00
Mamadou Babaei 4f31b7a8d1 bump the plugin version to v2.0.3 2024-05-16 20:01:59 +02:00
Mamadou Babaei 0c785c1ffd fix v2.0.2 UE 5.4 RunUAT build issues that mostly caused by missing headers 2024-05-15 04:43:49 +02:00
Mamadou Babaei b43f06fa7a improve target platform detection when building SenseGloveConnectImpl and SenseGloveCoreImpl modules and also distinguish x64 builds from arm64 on windows 2024-05-15 04:43:48 +02:00
Mamadou Babaei deb7778aed fix: asking CppCompileEnvironment for a single Architecture, but it has multiple Architectures (arm64, x64) 2024-05-15 04:43:47 +02:00
Mamadou Babaei e88533db1d bump the plugin version to v2.0.2 2024-04-25 12:56:51 +02:00
Mamadou Babaei f57c57d93b bump the plugin version to v2.0.1 2024-04-15 15:09:02 +02:00
Mamadou Babaei dc4412e3fd do not call FSGHandLayer::ResetCalibration on every backend initialization 2024-04-15 15:09:01 +02:00
Mamadou Babaei c201da4f33 only instantiate the connected glove once instead of recreating and destroying it every frame 2024-04-15 15:09:00 +02:00
Mamadou Babaei e3053fee04 bump senseglove libraries to v2.102.0-35d4de3f 2024-04-15 15:09:00 +02:00
Mamadou Babaei 53caea650d fix the wrong header file description sections for the header files 2024-04-15 15:08:58 +02:00
Mamadou Babaei 06a60da7e4 update the changelog with the unreleased changes 2024-04-15 15:08:58 +02:00
Mamadou Babaei 01b0d43ab3 update the outdated platform support matrix remarks 2024-03-23 17:24:46 +01:00
Mamadou Babaei fd0bbfa2b5 add ue 5.4 to the list of supported engines through azure devops 2024-03-23 17:24:46 +01:00
Mamadou Babaei e8c631841b bump the plugin version to v2.0.0 2024-03-22 21:36:00 +01:00
Mamadou Babaei 7d970fc13f update the changelog 2024-03-22 21:36:00 +01:00
Mamadou Babaei d48a4f1bf0 add missing modules to the directory structure 2024-03-22 21:35:59 +01:00
Mamadou Babaei 67646bbacf update the planned features status 2024-03-22 20:59:52 +01:00
Mamadou Babaei a1d820b688 fix other build issues with non-unity builds 2024-03-22 20:59:52 +01:00
Mamadou Babaei 8921c2676a add the missing string header that causes build issues in non-unity builds 2024-03-22 20:59:52 +01:00
Mamadou Babaei cc5dd956cc remove the platform dependant build hacks inside FSGArrayUtils::FromStdVector as msvc is not able to deduce TArray<T>::SizeType 2024-03-22 20:59:51 +01:00
Mamadou Babaei de6fec33cf bump the senseglove libraries to v2.101.12-62b1be11 2024-03-22 20:59:51 +01:00
Mamadou Babaei 44cd706daa fix android build issue inside FSGArrayUtils::FromStdVector introduced by 0cdc7e03ac 2024-03-22 20:59:51 +01:00
Mamadou Babaei e3f28ce1a7 Revert "try to init/uninit the backend module at the module start/shutdown"
This reverts commit c45bcaf618.
2024-03-22 20:59:51 +01:00
Mamadou Babaei 19818746bd fix a build issue inside FSGArrayUtils::FromStdVector introduced by newer msvc updates due to stricter implicit uint64 to int32 conversions 2024-03-22 20:59:51 +01:00
Mamadou Babaei 58b863257e bump the senseglove backend libraries to v2.101.11-2d6fe9ce 2024-03-22 20:59:50 +01:00
Mamadou Babaei deeb71d119 correct the module logs grammars 2024-03-22 20:59:50 +01:00
Mamadou Babaei 273a10bf3c try to init/uninit the backend module at the module start/shutdown 2024-03-22 20:59:50 +01:00
Mamadou Babaei 41aad88a28 allow the c++ compiler the opportunity to perform rvo/nrvo if applicable 2024-03-22 20:59:50 +01:00
Mamadou Babaei 63466786fe bump senseglove libraries to v2.101.10-7e515114 2024-03-22 20:59:49 +01:00
Mamadou Babaei 446fed595f update the changelog with added quest 3 controllers support 2024-03-22 20:59:49 +01:00
Mamadou Babaei c78fb20eef integrate the virtual hand mesh from allbreaker 2024-03-22 20:59:47 +01:00
Mamadou Babaei 11a6e6ed63 remove redundant headers 2024-03-22 20:59:24 +01:00
Mamadou Babaei 06966042d1 expose as little as dependencies as possible 2024-03-22 20:59:23 +01:00
Mamadou Babaei 079990b2c5 correct the hand mesh yaw rotation inside the sgpawn after the squat/sgvect3d changes 2024-03-22 20:59:23 +01:00
Mamadou Babaei 9b1385edef replace SupportedTargetPlatforms with PlatformAllowList 2024-03-22 20:59:23 +01:00
Mamadou Babaei 7db37a4fa6 clean up unsed unreal version headers 2024-03-22 20:59:23 +01:00
Mamadou Babaei 25664bf6f3 declare the openxr plugin as a dependency 2024-03-22 20:59:23 +01:00
Mamadou Babaei e5cfcb3405 utilize UXRDeviceVisualizationComponent to display meshes on UE 5.2 onwards 2024-03-22 20:59:23 +01:00
Mamadou Babaei 85c378db38 fix the changelog errors 2024-03-22 20:59:23 +01:00
Mamadou Babaei 5f7c987fae remove a changelog that is not valid anymore 2024-03-22 20:59:23 +01:00
Mamadou Babaei aaa32574e9 bump the senseglove libraries to v2.101.9-8abfc26d 2024-03-22 20:59:22 +01:00
Mamadou Babaei 038441266c bump the plugin version to v1.9.8 2024-03-22 20:59:22 +01:00
Mamadou Babaei 86db7ae4dd apply a temporary workaround in order to ameliorate the hand animation after sgquat, sgvect3d fixes 2024-03-22 20:59:22 +01:00
Mamadou Babaei 2a010811a3 make bones rotations a private field 2024-03-22 20:59:22 +01:00
Mamadou Babaei f8046a27cb update the changelog 2024-03-22 20:59:22 +01:00
Mamadou Babaei 9b5beaaf61 proper angle conversions for vectors 2024-03-22 20:59:22 +01:00
Mamadou Babaei f08dbf57b9 proper sgvect3d and squat conversions to fvector and fquat 2024-03-22 20:59:22 +01:00
Mamadou Babaei cf62bf1274 apply senseglove/unreal angle conversions in the gloves' api 2024-03-22 20:59:22 +01:00
Mamadou Babaei 3f21d3302c fix a crash when calling one of the SGHandInterpolatorImpl constructors which happens due to unintialized pimpl object 2024-03-22 20:59:22 +01:00
Mamadou Babaei 36b5b30148 update the changelog 2024-03-22 20:59:22 +01:00
Mamadou Babaei f9e15913c8 bump senseglove libraries to v2.101.8-a2a2075b which resolves the android writehaptics crash 2024-03-22 20:59:21 +01:00
Mamadou Babaei ae760aaa36 update the change log with unreleased changes 2024-03-22 20:59:21 +01:00
Mamadou Babaei b9691e2807 bump senseglove libraries to v2.101.7-3580cd9f 2024-03-22 20:59:21 +01:00
Mamadou Babaei 3e96da7f08 bump senseglove libraries to v2.101.5-f0aff76b 2024-03-22 20:59:20 +01:00
Mamadou Babaei fd645b6925 bump senseglove libraries to v2.101.4-6c860c42 with android fixes and fix a android crash 2024-03-22 20:59:19 +01:00
Mamadou Babaei 95f0e003b2 bump senseglove libraries to v2.101.3-e583f6de 2024-03-22 20:59:18 +01:00
Mamadou Babaei ecd701d8e6 implement the api updates and bump the senseglove libraries to v2.101.2-2eb7439f 2024-03-22 20:59:17 +01:00
Mamadou Babaei 503d13cabc force glove recalibration on backend initialize 2024-03-22 20:59:17 +01:00
Mamadou Babaei a7d9c4bfca add as*glove/device casting methods that resolves the sgpawn vibrotactile issues 2024-03-22 20:59:17 +01:00
Mamadou Babaei 4a572e06f9 use device impl casts 2024-03-22 20:59:17 +01:00
Mamadou Babaei 80f1b4c770 list nova 2 gloves in the get devices from the device list 2024-03-22 20:59:17 +01:00
Mamadou Babaei 8ba5b84f37 another attempt at improving the glove casts 2024-03-22 20:59:17 +01:00
Mamadou Babaei aa3e2af861 try an alternative approach for glove instances upcasting at the lower levels of the api 2024-03-22 20:59:17 +01:00
Mamadou Babaei 10d7b5b853 try to add a solution for glove type-casting in higher levels of the api 2024-03-22 20:59:17 +01:00
Mamadou Babaei 3af01c23a4 fix the send custom waveform signature on the hand layer 2024-03-22 20:59:17 +01:00
Mamadou Babaei 078eee1c38 fix a bug inside the ESGHapticLocation enum conversions 2024-03-22 20:59:17 +01:00
Mamadou Babaei 764961e7d0 bump senseglove libraries for v2.101.1-edc1163a 2024-03-22 20:59:16 +01:00
Mamadou Babaei 0b0ba04a43 implement the nova2 api updates and bump the senseglove libraries to v2.101.0-3e1693fb 2024-03-22 20:59:16 +01:00
Mamadou Babaei aecd56326e bump the plugin version to v1.9.8 2024-03-12 20:32:39 +01:00
Mamadou Babaei 9e9c724ece make bones rotations a private field 2024-03-12 20:32:39 +01:00
Mamadou Babaei c10ba275a0 fix a crash inside the USGHandPose::FromHandAngles in higher levels of the api 2024-03-12 20:32:38 +01:00
Mamadou Babaei fe9c282885 drop the prefix for internal typedefs 2024-03-12 20:32:38 +01:00
Mamadou Babaei 415dfba694 add some performance optimizations by utilizing MoveTemp in return statements 2024-03-12 20:32:37 +01:00
Mamadou Babaei d2dd65dc54 fix a bug where the right hand mesh is always hidden inside the game no matter whether the right glove is connected or not 2024-03-12 20:32:37 +01:00
Mamadou Babaei 71772c568f fix a wrong variable name 2024-03-12 20:32:36 +01:00
Mamadou Babaei e6479c16e7 only include the sgconnect header if the build platform is android 2024-03-12 20:32:36 +01:00
Mamadou Babaei f591c7ef9d bump the plugin version to v1.9.7 2024-02-18 20:30:07 +01:00
Mamadou Babaei daa335e2dd apply vibrotactile and force-feedback fixes backported from next major release 2024-02-18 20:30:07 +01:00
Mamadou Babaei 9b416115f8 bump the plugin version to v1.9.6 2024-02-14 14:56:27 +01:00
Mamadou Babaei d0aa66bfa8 fix the NovaGlove class instantiation methods to initialize a NovaGloveImpl instead of a SenseGloveImpl 2024-02-14 14:56:27 +01:00
Mamadou Babaei e992475b15 bump the plugin version to v1.9.5 2024-02-09 10:53:35 +01:00
Mamadou Babaei 6046e576db fix a potential segfault inside SGDeviceModel::ParseFirmware 2024-02-09 10:53:35 +01:00
Mamadou Babaei 9fad645027 bump the plugin version to v1.9.4 2024-02-08 07:47:45 +01:00
Mamadou Babaei 59473aa4e3 fix the bluprint parse fucntion signature to accept OutGloveInfo by reference 2024-02-08 07:47:45 +01:00
Mamadou Babaei e370ff5c88 fix changelog formatting 2024-02-08 07:47:45 +01:00
Mamadou Babaei 66a473d01c bump the plugin version to v1.9.3 2024-02-03 04:53:45 +01:00
Mamadou Babaei 0f9bf98845 rephrase fixed changes 2024-02-03 04:53:45 +01:00
Mamadou Babaei 764642e9c8 bump the copyright years 2024-02-03 04:53:45 +01:00
Mamadou Babaei ce0f9a7813 minor changelog fixes 2024-02-03 04:53:45 +01:00
Mamadou Babaei d33bfb3dbf fix the wrong version numbers inside the paltform support matrix and the main .uplugin file 2024-02-03 04:53:45 +01:00
Mamadou Babaei a2faffeeb9 apply a few critical fixes backported from the next major release 2024-02-03 04:53:45 +01:00
Mamadou Babaei 4b577a83d7 a minor changelog fix 2024-02-03 04:53:45 +01:00
Mamadou Babaei b367211ef5 bump the plugin version to v1.9.2 2023-11-03 18:38:42 +01:00
Mamadou Babaei 6c0ee7292d fix a bug where released actor is going to be null whenever the OnActorReleased event fires 2023-11-03 18:38:42 +01:00
Mamadou Babaei fd5a2e5569 restructure the planned features completion status 2023-11-03 18:38:41 +01:00
Mamadou Babaei 6ab09fc330 update the list of planned features and their completion status 2023-11-03 18:38:41 +01:00
Mamadou Babaei d6e4ffa95d update the list of planned features and their completion status 2023-11-03 18:38:40 +01:00
Mamadou Babaei 9be6bc96bc update the list of planned features and their completion status 2023-11-03 18:38:40 +01:00
Mamadou Babaei c704cafd83 add a list of planned features and their completion status to the main readme file 2023-11-03 18:38:39 +01:00
Mamadou Babaei fc32d7f816 bump the plugin version to v1.9.1 2023-10-11 17:03:18 +02:00
Mamadou Babaei 753bfa57df add the missing unreal header that defines ENGINE_*_VERSION macros in order to pass epic store builds for ue 5.3 2023-10-11 17:03:18 +02:00
Mamadou Babaei 22ee09fc2d bump the plugin version to v1.9.0 2023-10-10 17:31:16 +02:00
Mamadou Babaei ea885503ea change the ufunction specifier for sgpawn blueprint implementable events to blueprint native event in order to allow overrides from c++ as well 2023-10-10 17:31:16 +02:00
Mamadou Babaei 2756410129 add a missing release note fix for v1.8.0 to the changelog file 2023-10-10 17:31:15 +02:00
Mamadou Babaei 0bf3f10f80 bump the plugin version to v1.8.0 2023-10-10 16:13:42 +02:00
Mamadou Babaei 1d7482cc23 This single commit inroduces the following changes:
- Introduced new SGPawn events: OnActorGrabbed, OnActorReleased, OnActorBeginTouch, and OnActorEndTouch.
- Exposed OnGrabStateUpdated, OnTouchStateUpdated, OnActorGrabbed, OnActorReleased, OnActorBeginTouch, and OnActorEndTouch events to Blueprint as BlueprintImplementableEvent.

- Fix a bug where the OnTouchStateUpdated event is mistakenly triggered instead of the OnGrabStateUpdated when the right thumb fingertip grab collider overlaps with a grabbable actor.
2023-10-10 16:13:42 +02:00
Mamadou Babaei db74a8bcd8 bump the plugin version to v1.7.0 2023-09-14 18:53:38 +02:00
Mamadou Babaei fe236eafdf bump senseglove headers and libraries for linux and android to v2.12.0-19c9854 2023-09-14 18:53:38 +02:00
Mamadou Babaei 74807283f3 bump senseglove libraries for windows to v2.12.0-19c9854 2023-09-14 18:53:37 +02:00
Mamadou Babaei 005522d05c move SGCoreImpl/SGPlatform to SGBuildHacks/SGPlatform and introduce SG_CPP20 and SG_CAPTURE_THIS 2023-09-14 18:53:37 +02:00
Mamadou Babaei e00b684ff1 update the changelog 2023-09-14 18:53:37 +02:00
Mamadou Babaei 8a469e4870 update the changelog with unreleased changes 2023-09-14 18:53:37 +02:00
Mamadou Babaei 6245d77fac introduce senseglove backend and backend kismet modules in order to properly initialize the backend in order to avoid a bug where sgcoonect::init gets called every frame 2023-09-14 18:53:37 +02:00
Mamadou Babaei d09fa355cc update the changelog with unreleased changes 2023-09-14 18:53:37 +02:00
Mamadou Babaei ada6fd05d4 remove a duplicate log 2023-09-14 18:53:37 +02:00
Mamadou Babaei 7e2c6212bc add sggameinstance for future use 2023-09-14 18:53:37 +02:00
Mamadou Babaei c470274f14 remove a duplicated slash in a header's path 2023-09-14 18:53:37 +02:00
Mamadou Babaei e091b3a541 bump the plugin version to v1.6.1 2023-08-14 21:24:03 +02:00
Mamadou Babaei 14b86ef351 fix the platform support matrix 2023-08-14 21:24:03 +02:00
Mamadou Babaei e468558c43 add a missing header that causes build issues on ue 5.0 2023-08-14 21:24:02 +02:00
Mamadou Babaei 0c3c969023 set the engine version to v5.3.0 2023-08-14 17:31:21 +02:00
Mamadou Babaei b3c66075b6 bump the plugin version to v1.6.0 2023-08-14 17:24:38 +02:00
Mamadou Babaei bf18aed96a update the changelog 2023-08-14 17:21:38 +02:00
Mamadou Babaei 97d945511a update the changelog 2023-08-14 16:58:29 +02:00
Mamadou Babaei 23ce26fb69 do not cache grabbed actors as overlapped actors 2023-08-14 16:58:08 +02:00
Mamadou Babaei f8f9190506 inline some pimpl methods in order to improve function call performance for regularly called methods 2023-08-14 16:44:54 +02:00
Mamadou Babaei 771e0311a9 cache all overlapped actors with the real/virtual hands 2023-08-14 16:39:46 +02:00
Mamadou Babaei 506fd99114 initial working implementation of the separated virtual/real hand rendering 2023-08-14 16:02:23 +02:00
Mamadou Babaei 3410488d02 fix the wrong default gizmo colors when initialized using the default constructor. 2023-08-14 09:12:01 +02:00
Mamadou Babaei b49f23ed65 fix ue 5.3 build issues 2023-08-08 03:01:48 +02:00
Mamadou Babaei 99e86b670b add support for the upcoming unreal engine 5.3 and native toolchain v22 libs to the build system 2023-08-08 02:00:31 +02:00
Mamadou Babaei 45ade0ebaa bump senseglove libraries for windows to v2.11.0-b775a05 2023-08-08 01:50:31 +02:00
Mamadou Babaei 46f56defb9 update the changelog 2023-08-08 01:46:31 +02:00
Mamadou Babaei e63098c3f0 remove any mention of msvc 2017 and ue 4.27 third-party libs from the readme file 2023-08-08 01:44:43 +02:00
Mamadou Babaei 7d5377a668 bump senseglove headers and libraries for linux and android to v2.11.0-b775a05 2023-08-08 01:43:31 +02:00
Mamadou Babaei ebe0fec486 initial attempt at separating the hand rendering from the real hand 2023-08-04 19:39:18 +02:00
Mamadou Babaei ec21e024df alternative velocity calculation for released actors based on the hand's cached position history 2023-08-03 17:53:39 +02:00
Mamadou Babaei 2cdc78131a alternative velocity calculation for released actors based on a cached position history 2023-08-03 17:21:40 +02:00
Mamadou Babaei ad5d701a48 apply the hand's velocity to the grabbed actor after release 2023-08-02 16:46:46 +02:00
Mamadou Babaei bf906c3073 bump the plugin version to v1.5.3 2023-07-19 18:21:34 +02:00
Mamadou Babaei 730c0face2 bump senseglove libraries for windows to v2.10.1-3b0e7c9 2023-07-19 18:19:15 +02:00
Mamadou Babaei ded302bb25 a minor changelog fix 2023-07-19 18:11:09 +02:00
Mamadou Babaei 6b720d50ac bump senseglove libraries for linux and android to v2.10.1-3b0e7c9 2023-07-19 18:10:45 +02:00
Mamadou Babaei 3ce2de9786 bump the plugin version to v1.5.2 2023-07-19 01:17:07 +02:00
Mamadou Babaei 0023e3c01d fix a build issue with android shipping builds 2023-07-19 01:10:57 +02:00
Mamadou Babaei b0b63ffa24 whitespace fix 2023-07-19 01:00:06 +02:00
Mamadou Babaei e501697f0c remove redundant whitespaces 2023-07-14 12:47:48 +02:00
Mamadou Babaei 2e960119f7 fix a grammatical error in the changelog 2023-07-13 20:06:31 +02:00
Mamadou Babaei c517aa2568 bump the plugin version to v1.5.1 2023-07-13 19:48:28 +02:00
Mamadou Babaei b3fd741cd7 fix grab/release bug for the right hand 2023-07-13 19:38:55 +02:00
Mamadou Babaei ee9b513c63 fix a wrist tracker bug where hands are getting tracked in reverse 2023-07-13 19:38:55 +02:00
Mamadou Babaei b7bd72d7d5 do checks against the right hand which is cleaner to read 2023-07-13 19:38:54 +02:00
Mamadou Babaei 15d55faf82 bump the plugin version to v1.5.0 2023-06-16 01:59:45 +02:00
Mamadou Babaei 9e4759094b update the changelog 2023-06-16 01:57:50 +02:00
Mamadou Babaei e2ca76cede fix the motion source options crashes 2023-06-15 19:07:59 +02:00
Mamadou Babaei 6dc2f319b0 refactor the newly added motion source settings and off-load them from the wrist tracker to the settings system, though this causes crashes still 2023-06-15 17:36:55 +02:00
Mamadou Babaei edede9a358 bump senseglove libraries for windows to v.2.10.0-12133ac 2023-06-15 15:15:10 +02:00
Mamadou Babaei 5b65c28b7b bump senseglove libraries for linux and android to v.2.10.0-12133ac 2023-06-15 15:06:12 +02:00
Mamadou Babaei e22df3d9c5 update the changelog with the latest changes 2023-06-15 15:05:37 +02:00
Mamadou Babaei 55964b5213 remove not yet implemented from ViveTracker and ViveFocus3WristTracker enums' names 2023-06-15 14:53:37 +02:00
Mamadou Babaei dafcba00b7 fix a bug where SteamVR trackers such as HTC VIVE and HTC VIVE Focus 3's wrist orientation and location were not being tracked. 2023-06-13 19:57:04 +02:00
Mamadou Babaei 1a548be925 bump senseglove libraries and headers for linux and android to v2.9.0-21c54c5 2023-06-07 17:24:13 +02:00
Mamadou Babaei 0c3277c658 update the changelog to reflect the latest changes 2023-06-07 17:20:25 +02:00
Mamadou Babaei 5222e28144 bump senseglove libraries for windows to v2.9.0-21c54c5 2023-06-07 17:10:26 +02:00
Mamadou Babaei 20e45f17b2 add (not implemented yet) to the blueprint display name for positional tracking hardware that is not implemented yet 2023-06-07 17:08:13 +02:00
Mamadou Babaei 3e49750a0c add support for vive focus 3 positional tracking hardwares 2023-06-07 17:06:32 +02:00
Mamadou Babaei e045124743 add support for oculus quest pro positional tracking hardwares 2023-06-07 17:04:38 +02:00
Mamadou Babaei 5476be9b1f remove support for oculus touch, pico neo 2, and pico neo 3 positional tracking hardwares 2023-06-07 17:01:04 +02:00
Mamadou Babaei 06b7a7d1ee fix ESGPositionalTrackingHardware enum display names and comments 2023-06-07 16:58:55 +02:00
Mamadou Babaei c4107711de update the changelog 2023-06-07 16:10:06 +02:00
Mamadou Babaei 16176149e8 fully refactor the top-level configurations in the settings system into ustructs 2023-06-02 19:38:21 +02:00
Mamadou Babaei 83c9a8b95d update the platform support matrix to reflect the latest support status 2023-06-02 11:14:42 +02:00
Mamadou Babaei f8be65930b bump senseglove libraries for windows v2.8.0-ff14904 2023-06-02 11:07:06 +02:00
Mamadou Babaei 4e4e5ace52 bump senseglove libraries for linux and android to v2.8.0-ff14904 2023-06-02 11:01:25 +02:00
Mamadou Babaei 51ee017637 drop support for native toolchain v19, msvc v141 (2017), and thus ue 4.27 in the build system 2023-06-02 10:57:46 +02:00
Mamadou Babaei 91bb916542 bump the plugin version to v1.4.3 2023-06-01 23:29:00 +02:00
Mamadou Babaei 03fa45c4a5 update the changelog 2023-06-01 23:28:39 +02:00
Mamadou Babaei df7c371fca fix a critical Android crash that happens where the default development hand meshes are not found 2023-06-01 23:26:36 +02:00
Mamadou Babaei 750d05ec92 add a complementary internal method to IsUsingUserMesh, IsUsingDefaultMesh for checking various hand meshes 2023-06-01 23:21:42 +02:00
Mamadou Babaei 95c34f6680 fix the changelog release formatting and drop the v prefix in the release titles 2023-06-01 22:28:44 +02:00
Mamadou Babaei c04167d869 bump the plugin version to v1.4.2 2023-06-01 21:42:41 +02:00
Mamadou Babaei c41dc5e9e2 update the changelog 2023-06-01 21:42:02 +02:00
Mamadou Babaei 1ac4ab252d fix the changelog typos and errors 2023-06-01 21:40:54 +02:00
Mamadou Babaei 236b743198 minor grammatical fix 2023-06-01 21:31:05 +02:00
Mamadou Babaei 425d0c6ad8 update the changelog with unreleased changes 2023-06-01 21:29:03 +02:00
Mamadou Babaei 47003e8bf3 fix an edit condition parsing failure that caused a bug in the settings
system where the virtual hand and the wrist tracker debug gizmos where
always drawn, regardless of chosen settings
2023-06-01 21:22:08 +02:00
Mamadou Babaei b846d89970 fix error C2440: 'initializing': cannot convert from 'void' to 'bool' when engine versio is < 5.2 2023-06-01 20:18:59 +02:00
Mamadou Babaei 2a8595c5ff fix typos in the changelog 2023-05-30 09:20:52 +02:00
Mamadou Babaei b644ec8767 fix a typo in the changelog 2023-05-30 08:44:50 +02:00
Mamadou Babaei 7ab5b616ab fix the changelog 2023-05-30 08:41:22 +02:00
Mamadou Babaei 32e7e2d92c fix a typo in the changelog 2023-05-30 08:36:28 +02:00
Mamadou Babaei 5a08c4e2da minor fix in the changelog 2023-05-29 02:11:41 +02:00
Mamadou Babaei ea9b05e5d3 bump the plugin version v1.4.1 2023-05-29 02:07:42 +02:00
Mamadou Babaei e229b7de52 log unreleased changes 2023-05-29 02:05:59 +02:00
Mamadou Babaei 4823b34727 remove dead gradle code from the android module 2023-05-29 02:01:34 +02:00
Mamadou Babaei 439516130b supress a grade warning for non-arm64 archs when the build target is android 2023-05-29 02:00:31 +02:00
Mamadou Babaei 910324c1ba fix an android gradle build issue which happens when the games package name won't start with com.senseglove.* 2023-05-29 01:59:39 +02:00
Mamadou Babaei 28bdf7d422 bump the plugin version to v1.4.0 2023-05-19 18:51:05 +02:00
Mamadou Babaei 21446e6368 fix linux aarch64 build issues on ue 5.0 2023-05-19 18:34:46 +02:00
Mamadou Babaei d48cd57995 remove SenseGloveCoreTypes from the directory structure 2023-05-19 18:20:35 +02:00
Mamadou Babaei 20df42db6f implement an optional feature in order to automatically stop all haptics on the end play event 2023-05-19 09:35:28 +02:00
Mamadou Babaei 7ef04760c7 temporarily disable the debug gizmo for the virtual hand and the wrist tracker due to an esoteric bug in the settings system 2023-05-18 22:36:20 +02:00
Mamadou Babaei c57f25c792 remove commented code 2023-05-18 22:07:20 +02:00
Mamadou Babaei 5add41a5ad increase the default finger tips collider sizes 2023-05-18 21:52:05 +02:00
Mamadou Babaei 72ed72c533 get root component instead of iterating over the components in order to disable/enable the actor physics 2023-05-18 21:51:41 +02:00
Mamadou Babaei 69740fc4da fix a potential crash 2023-05-18 21:26:28 +02:00
Mamadou Babaei 4bb733e43f stop all haptics on end play in order to make sure the glove won't get stuck in haptics feedbacks 2023-05-18 21:23:51 +02:00
Mamadou Babaei 2e273d938f set the default attachment rotation rule to keep relative 2023-05-18 21:18:26 +02:00
Mamadou Babaei 79ba87c291 set the default attachment scale rule to snap to target 2023-05-18 21:11:44 +02:00
Mamadou Babaei 7125d5bdcd do not affect collision when grab/release 2023-05-18 19:16:47 +02:00
Mamadou Babaei 21771887c7 refactor and remove the need to cache the component in the grab/release workflow 2023-05-18 19:03:03 +02:00
Mamadou Babaei bfcef91311 refactor the grab/touch logic and data structure and also cache the component ready to be grabbed in order to affect its physics state 2023-05-18 18:08:15 +02:00
Mamadou Babaei c4c41166ff try an alternative approach for the grab/release functionality by disabling/enabling physics simulation 2023-05-15 22:24:33 +02:00
Mamadou Babaei 5ae267aff6 add grab sucess/fail checks with error messages 2023-05-12 16:14:45 +02:00
Mamadou Babaei b87275ff97 add ensure checks on the grab socket name 2023-05-12 15:58:57 +02:00
Mamadou Babaei 45f6ecacd2 move socket name to a temp var for easier debugging 2023-05-12 15:47:21 +02:00
Mamadou Babaei 4bd143c3c8 move attachment rules to a temp var for easier debugging 2023-05-12 15:43:25 +02:00
Mamadou Babaei a70add1e25 fix a release-detection logic error 2023-05-12 15:19:47 +02:00
Mamadou Babaei 2a42ff8096 clean up and simplify the touch callback lambda 2023-05-12 15:15:18 +02:00
Mamadou Babaei a7554e5f6d update the changelog 2023-05-12 15:03:05 +02:00
Mamadou Babaei 0c2eebd9ac force off haptic commands when collision ends 2023-05-12 14:25:01 +02:00
Mamadou Babaei ea01bcb425 only send force-feedback and buzz commands when they are not zero 2023-05-12 14:03:17 +02:00
Mamadou Babaei 621992d238 update the platform support matrix with the distribution channels and their remarks 2023-05-12 12:55:15 +02:00
Mamadou Babaei a03dc83c38 add a note about abi/api breaking changes 2023-05-10 23:29:14 +02:00
Mamadou Babaei 50a60f3761 bump senseglove binaries for windows to v2.7.1-965f90c 2023-05-10 22:56:04 +02:00
Mamadou Babaei 13582a5e4d removed the redundant SenseGloveCoreTypes module which causes all kinds of packaging issues with certain versions of the engine. 2023-05-10 22:22:35 +02:00
Mamadou Babaei 8a688e2a88 try to fix various build issues with the senseglove core types module 2023-05-10 21:43:28 +02:00
Mamadou Babaei f14c41af5b fix linux aarch64 build issues and for older unreal engine versions 2023-05-10 21:13:37 +02:00
Mamadou Babaei c3495c9c40 whitelist all modules for linuxarm64 target platform 2023-05-10 21:06:34 +02:00
Mamadou Babaei 512e4241c9 fix linux aarch64 build issues and for ue 4.27 up to 5.2 2023-05-10 20:57:29 +02:00
Mamadou Babaei 27caa1f484 fix a build error where engine versions are < 5.2 2023-05-10 20:43:51 +02:00
Mamadou Babaei 7b869be2ae add linux aarch64 platform support for unreal 5.2+ and bump senseglove libraries to v2.7.1-965f90c 2023-05-10 20:29:08 +02:00
Mamadou Babaei eb716b2f83 fix a circular dependency build issue 2023-05-10 19:25:41 +02:00
Mamadou Babaei fa42dc8029 add a missing dependency that causes packaging issues 2023-05-10 19:15:40 +02:00
Mamadou Babaei 9b0cf8fa00 capture by reference in the buzz timer callback lambda or otherwise crash 2023-05-09 14:59:41 +02:00
Mamadou Babaei 257cdfb23b fix a crash due to uninitialized pimpl object 2023-05-09 14:18:05 +02:00
Mamadou Babaei c4e5db1883 fix lambda crashes and ensure logic bugs 2023-05-09 12:22:11 +02:00
Mamadou Babaei cdcab0e69e fix wrong socket names on the dev hand meshes 2023-05-09 10:38:17 +02:00
Mamadou Babaei 830e629582 complete the implementation for the touch functionality and its feedbacks 2023-05-08 17:39:22 +02:00
Mamadou Babaei 7d9553520a add the initial implementation for the touch functionality and its feedbacks 2023-05-08 15:28:49 +02:00
Mamadou Babaei 2ee403ae50 expose the connected glove in the virtual hand's api 2023-05-08 13:59:14 +02:00
Mamadou Babaei abed9a4fc0 add static get component methods for quickly accessing grab/touch components 2023-05-08 13:05:22 +02:00
Mamadou Babaei 93799103eb remove the variable names from the grab/touch signatures 2023-05-08 12:14:37 +02:00
Mamadou Babaei 20b81712b5 add the grab/touch state update events 2023-05-08 11:58:22 +02:00
Mamadou Babaei e8b586d6ab update the changelog 2023-05-05 15:44:33 +02:00
Mamadou Babaei 71e116c3ae fix a crash by removing wrong delegate binds 2023-05-05 15:38:12 +02:00
Mamadou Babaei c9c7064292 add a buzz timeout uproperty 2023-05-05 15:12:03 +02:00
Mamadou Babaei 4c6f262b84 merge all properties inside the grab component into one group 2023-05-05 14:53:21 +02:00
Mamadou Babaei ef3a198d1e simplify and merge separate buzz/force-feedback levels into one value on the touch component 2023-05-05 14:46:22 +02:00
Mamadou Babaei 41b0986841 Revert "move force-feedback properties from the touch component to the grab component"
This reverts commit 9faa9d2ca4.
2023-05-05 13:40:07 +02:00
Mamadou Babaei 9faa9d2ca4 move force-feedback properties from the touch component to the grab component 2023-05-04 20:39:13 +02:00
Mamadou Babaei d136e27218 cache which finger can grab or touch objects 2023-05-04 19:51:38 +02:00
Mamadou Babaei 1213a1cfc5 set up the overlap events for the grab/touch fingertip colliders 2023-05-04 17:31:19 +02:00
Mamadou Babaei 4f2c58fe1b add the api for getting/setting touch properties 2023-05-04 14:56:03 +02:00
Mamadou Babaei 380d926072 add the api for getting/setting grab properties 2023-05-04 13:38:37 +02:00
Mamadou Babaei 8997fc2058 setup the grab socket on the dev hand meshes 2023-05-03 20:36:49 +02:00
Mamadou Babaei f5be0d6292 add a grab socket uproperty, getters, and setters 2023-05-03 20:18:11 +02:00
Mamadou Babaei 14fa466e81 whitespace fix 2023-05-03 19:43:16 +02:00
Mamadou Babaei 4e330c4881 setup the grab/touch sockets on the dev hand meshes 2023-05-03 19:22:03 +02:00
Mamadou Babaei fe81679e0a differentiate the default grab/touch socket names 2023-05-03 17:45:11 +02:00
Mamadou Babaei 1e4071a44b integrate the touch component and colliders and rename the grab ones 2023-05-03 17:02:54 +02:00
Mamadou Babaei 29bcf42131 add a touch component intended to be used for force-feedback 2023-05-03 14:13:13 +02:00
Mamadou Babaei 617a0c0f10 add the api and setup the required components and uproperties in order to implement the basic grab functionality 2023-04-30 23:08:17 +02:00
Mamadou Babaei 57717c9680 document the unreleased changes 2023-04-30 22:45:13 +02:00
Mamadou Babaei 4df93a4c03 fix blueprint signatures and make all bp exposed functions static 2023-04-30 22:42:31 +02:00
Mamadou Babaei 1c596388cc formatting fix 2023-04-30 20:58:41 +02:00
Mamadou Babaei 60f71b8788 document a missing changelog item 2023-04-28 02:19:15 +02:00
Mamadou Babaei ce8fe83889 Revert "temporarily revert changes that are not part of the v1.3.1 release"
This reverts commit 116935f54b.
2023-04-28 02:18:24 +02:00
Mamadou Babaei 871893b938 bump the plugin version to v1.3.1 2023-04-28 02:02:20 +02:00
Mamadou Babaei 116935f54b temporarily revert changes that are not part of the v1.3.1 release 2023-04-28 02:00:06 +02:00
Mamadou Babaei 09275f765a fix runuat rocket build issues by adding the missing headers 2023-04-28 01:58:15 +02:00
Mamadou Babaei ce9053c06f document the senseglove debug module 2023-04-28 01:49:11 +02:00
Mamadou Babaei 58eaa24d49 document unreleased changes 2023-04-28 01:23:50 +02:00
Mamadou Babaei 424a5fa1e7 Revert "temporarily revert changes that are not part of the v1.3.0 release"
This reverts commit 6a0f2a00a1.
2023-04-28 01:21:40 +02:00
Mamadou Babaei 67f1c8240b bump the plugin version to v1.3.0 2023-04-28 01:18:36 +02:00
Mamadou Babaei 6a0f2a00a1 temporarily revert changes that are not part of the v1.3.0 release 2023-04-28 01:15:27 +02:00
Mamadou Babaei b13caf3fc1 bump senseglove libraries for linux and android to v2.6.0-aac3d56 2023-04-28 01:11:08 +02:00
Mamadou Babaei 8d5de38fdd bump the senseglove libraries for windows/msvc to v2.6.0-aac3d56 2023-04-28 01:06:23 +02:00
Mamadou Babaei 6f4e8239a5 document recent changes 2023-04-28 01:03:46 +02:00
Mamadou Babaei 8f478a3a85 document the senseglove libraries bump in the changelog 2023-04-28 00:50:52 +02:00
Mamadou Babaei 42a802608a adjust senseglove/unreal coordinate system conversions according to changes in the recent sgcore release 2023-04-28 00:47:33 +02:00
Mamadou Babaei fab6cd7766 fix a gramatical error 2023-04-26 12:53:22 +02:00
Mamadou Babaei e23db9516c add a debug virtual hand and some other fixes 2023-04-25 17:30:27 +02:00
Mamadou Babaei 017bf6e334 fix the hand right hand offset 2023-04-25 17:01:59 +02:00
Mamadou Babaei d48a908ae7 remove redundant headers 2023-04-25 14:19:38 +02:00
Mamadou Babaei 73922673b7 fix debug gizmo default colors 2023-04-25 10:43:51 +02:00
Mamadou Babaei 149b6e503c refactor the debug gizmo draw method 2023-04-25 10:35:40 +02:00
Mamadou Babaei 3ed72c0c8d update the changelog with unreleased changes 2023-04-25 10:27:51 +02:00
Mamadou Babaei 2fd95792a2 refactor the wrist tracker's debug gzmo settings into a ustruct in order to be re-used 2023-04-25 10:25:30 +02:00
Mamadou Babaei bce072931a fix gizmo drawing issue happens due to a null world object 2023-04-25 09:04:02 +02:00
Mamadou Babaei 9aebd23166 add a new generic senseglove debug module 2023-04-25 08:49:34 +02:00
Mamadou Babaei ccc47135f9 add the base implementation for the senseglove grab component 2023-04-24 08:49:27 +02:00
Mamadou Babaei 032a971620 increase the default DebugWristTrackerGizmoLength value in the plugin's settings 2023-04-20 17:44:19 +02:00
Mamadou Babaei 2aa342c34b increase the default DebugWristTrackerGizmoLength value on the wrist tracker 2023-04-20 17:42:55 +02:00
Mamadou Babaei 5e321b533f document unreleased changes 2023-04-20 17:41:47 +02:00
Mamadou Babaei ee9f7b0031 fix the wrong hand offset calculations 2023-04-20 17:37:01 +02:00
Mamadou Babaei c29dd56f7e fix the wrong tracker origin calculations 2023-04-20 17:09:13 +02:00
Mamadou Babaei 6566e824bb fix the platform support matrix for unreal versions >= 5.0 2023-04-20 15:51:24 +02:00
Mamadou Babaei fe1af26349 minor code improvements and clean up 2023-04-19 00:45:07 +02:00
Mamadou Babaei 79ca17ecc2 fix the directory structure 2023-04-11 21:04:34 +02:00
Mamadou Babaei 9c61db0319 bump the plugin version to v1.2.1 2023-03-30 06:41:28 +02:00
Mamadou Babaei 5660bc5e91 add the engine settings module into the private include paths for the senseglove settings module in order to solve run uat build issues 2023-03-30 06:22:04 +02:00
Mamadou Babaei 96ef200a02 remove the engine settings module from the senseglove module's private dependencies list 2023-03-30 06:14:26 +02:00
Mamadou Babaei 6138bef9bc remove the launch and settings from the android module's private includes 2023-03-30 05:57:00 +02:00
Mamadou Babaei d045b525d4 bump the plugin version to v1.2.0 2023-03-28 21:33:04 +02:00
Mamadou Babaei aeea6f5d35 add the new dev/test hand model (this hand mesh is not meant to be published) 2023-03-28 18:24:07 +02:00
Mamadou Babaei 1c4e10af64 alternative approach to constructor helpers in order to set the default hand mesh as it won't causes annoying ue pop-up cdo messages 2023-03-28 18:09:05 +02:00
Mamadou Babaei 46580461d9 remove the old virtual hand model mesh 2023-03-28 17:36:20 +02:00
Mamadou Babaei da6ad9f27c fix the hand animation implementation and angle conversions to work with the standard ue5.1+ hand from epic 2023-03-28 16:55:41 +02:00
Mamadou Babaei 1b4cce6e39 add missing paths headers that causes uat build issues 2023-03-28 11:43:28 +02:00
Mamadou Babaei a78013a588 add missing vershon headers and clean up unused headers 2023-03-28 11:39:13 +02:00
Mamadou Babaei 4c179468f9 fix uat errors C4458 when building the virtual hand component 2023-03-28 11:21:46 +02:00
Mamadou Babaei 44ae196536 remove SGContentBrowserExtension_SKeleton and clean up the editor module 2023-03-27 17:13:38 +02:00
Mamadou Babaei 4f9cf220ef remove SGAssetTypeActions_Skeleton, SGSkeletonEditor, and SGSkeletonEditorCommands classes 2023-03-27 15:12:07 +02:00
Mamadou Babaei dff6b5a5de add a content browser extension as an alternative to modify the ref pose 2023-03-27 15:05:28 +02:00
Mamadou Babaei 0bc69af816 add log template specialization for ftransform 2023-03-27 14:35:50 +02:00
Mamadou Babaei 85c8161220 add new experiments with the SGAssetTypeActions_Skeleton 2023-03-27 12:27:32 +02:00
Mamadou Babaei b8906b51a5 add custom asset type actions for skeletons 2023-03-27 11:16:53 +02:00
Mamadou Babaei 599bd18bcf add a message dialog and instruct the user to use the context menu in order to save the skeleton asset 2023-03-27 10:37:47 +02:00
Mamadou Babaei a7c31b8aac fix a deprecation warning on ue5 2023-03-27 10:37:07 +02:00
Mamadou Babaei c27da0f557 minor changelog fix 2023-03-24 12:08:08 +01:00
Mamadou Babaei 3b1d8a7872 document the android calibration in the changelog 2023-03-24 12:02:39 +01:00
Mamadou Babaei 6b74646d77 add virtual destructors 2023-03-24 00:59:19 +01:00
Mamadou Babaei 9916e6e88b fix the skeleton editor crash with a working button from senseglove on the toolbar 2023-03-24 00:48:33 +01:00
Mamadou Babaei 2f8ff3a3ad first attemp at extending the skeleton editor that also crashes the editor once opened 2023-03-23 23:53:28 +01:00
Mamadou Babaei 7bd166c095 add missing header that causes build issues on ue 4.27 2023-03-23 19:23:13 +01:00
Mamadou Babaei 928257fef8 update the changelog 2023-03-23 18:49:12 +01:00
Mamadou Babaei cba79a93b2 clean up editor code from the virtual hand actor in order to fix wrist tracking issues 2023-03-23 18:34:18 +01:00
Mamadou Babaei 626d7e98cc force the wrist tracker to track the right hand on init/begin/construct 2023-03-23 18:01:44 +01:00
Mamadou Babaei d447740a8d add event handler lambdas for wrist tracker component of the virtual ahnd actor 2023-03-23 17:23:11 +01:00
Mamadou Babaei 6e05843c0f functional wrist tracker component 2023-03-23 21:48:48 +01:00
Mamadou Babaei db42061326 add an almost complete wrist tracker component implementation 2023-03-22 19:56:28 +01:00
Mamadou Babaei 29cf61d95a fix multiple issues with the virtual hand component and the plugin settings 2023-03-22 15:24:11 +01:00
Mamadou Babaei e717196330 explicitly assign motion controllers to the proper hands 2023-03-21 19:14:18 +01:00
Mamadou Babaei db1816624d bump senseglove libraries windows/msvc to v2.5.0-8069342 2023-03-21 18:46:05 +01:00
Mamadou Babaei fa5ce9d685 bump senseglove libraries and headers for linux and android to v2.5.0-8069342 2023-03-21 18:33:33 +01:00
Mamadou Babaei 86d80fc9db add new settings accessors for c++ and blueprints 2023-03-21 18:31:55 +01:00
Mamadou Babaei a4b344c79d add wrist tracking debug settings 2023-03-21 17:28:45 +01:00
Mamadou Babaei 437edbe10d allow setting custom hardware offset through the plugin settings 2023-03-21 16:50:20 +01:00
Mamadou Babaei 442aa1fbb9 add missing engine module that causes build issues on android 2023-03-21 16:32:18 +01:00
Mamadou Babaei ca09730ac8 move the pimpl initialization to the constructor 2023-03-21 15:03:29 +01:00
Mamadou Babaei 4d3f9881e2 move the defaults to the constructor 2023-03-21 15:01:44 +01:00
Mamadou Babaei 62580996af make the senseglove settings a singleton with engine subsystem lifetime and fix the blueprint accessors 2023-03-21 14:22:06 +01:00
Mamadou Babaei 8e067258c2 add the senseglove settings kismet module 2023-03-21 13:47:11 +01:00
Mamadou Babaei 2c81992e91 some improvements for the settings module 2023-03-21 13:17:28 +01:00
Mamadou Babaei dbf27e17f6 minor fixes in the settings module 2023-03-21 12:52:42 +01:00
Mamadou Babaei 41164cc1cb add a senseglove settings manager module 2023-03-20 23:14:07 +01:00
Mamadou Babaei da1392095e fix the changelog typos and errors 2023-03-20 22:37:15 +01:00
Mamadou Babaei 47cd25b080 whitespace fix 2023-03-17 00:06:53 +01:00
Mamadou Babaei 6fb666d887 add special android directory methods and initialization args 2023-03-16 23:59:28 +01:00
Mamadou Babaei 05c48fb7f3 initial attempt at implementing android calibration 2023-03-16 17:56:16 +01:00
Mamadou Babaei 9807082c41 bump senseglove libraries and headers for linux and android to v2.4.3-2eceacb 2023-03-16 15:52:15 +01:00
Mamadou Babaei e8d440d198 virtual hand fixes especially for android 2023-03-16 14:17:58 +01:00
Mamadou Babaei 2cdc3cfca2 fix virtual hand crashes and editor visibility issues 2023-03-15 17:16:19 +01:00
Mamadou Babaei bcd8759320 fix comments 2023-03-15 13:26:12 +01:00
Mamadou Babaei 5db6a95ceb fix android architecture detection issues on ue 5.2 2023-03-14 20:01:12 +01:00
Mamadou Babaei 95ca971cbb add a temporary workaround for the android crashes and the hidden if glove not found functionality 2023-03-14 19:20:11 +01:00
Mamadou Babaei 35cf5ae8f5 fix native-toolchain v19 build issues 2023-03-13 15:38:42 +01:00
Mamadou Babaei 529e69ea34 integrate the virtual hand into the sgpawn 2023-03-13 14:19:32 +01:00
Mamadou Babaei 054f6182b5 clarify android on 5.2 is not supported, yet 2023-03-13 11:22:48 +01:00
Mamadou Babaei 6d199117f3 minor fixes 2023-03-13 10:38:15 +01:00
Mamadou Babaei 3938732d88 update the changelog in order to reflect the latest status of unreleased changes 2023-03-10 19:04:33 +01:00
Mamadou Babaei d056397ae8 dump some animation errors to the logs inside the editor instead of crashing 2023-03-10 16:36:14 +01:00
Mamadou Babaei 24c7cc887e working in-editor hand animation 2023-03-10 15:25:27 +01:00
Mamadou Babaei 2192e0973b distinguish between virtual hand actor and component and animate the component 2023-03-10 15:13:50 +01:00
Mamadou Babaei fb68683d72 add a new component-based class for the virtual hand 2023-03-10 14:11:52 +01:00
Mamadou Babaei 1d3299a14e add an empty sgpawn kismet library class 2023-03-10 14:11:08 +01:00
Mamadou Babaei 3f045c84a3 document the new senseglove core types module 2023-03-10 11:19:44 +01:00
Mamadou Babaei b25c4fec7f add the virtual hand kismet library 2023-03-10 10:53:30 +01:00
Mamadou Babaei 9e288e031b minor commit fix 2023-03-10 10:52:58 +01:00
Mamadou Babaei 6a8dbacaed drop the redundant sgconnecttypes 2023-03-10 10:52:20 +01:00
Mamadou Babaei 828defc237 move all sg array types into their corresponding *core modules 2023-03-10 10:51:56 +01:00
Mamadou Babaei 52e49a71b4 minor api validation fixes 2023-03-09 14:26:54 +01:00
Mamadou Babaei 34934e8f63 minor fix 2023-03-09 12:47:21 +01:00
Mamadou Babaei 1e9c732e56 bump senseglove libraries windows to v2.4.2-ba98cec 2023-03-09 12:32:42 +01:00
Mamadou Babaei 6fc80b70b3 bump senseglove libraries and headers for linux and android to v2.4.2-ba98cec 2023-03-09 12:15:13 +01:00
Mamadou Babaei 3ce37a3085 remove the redundant sgplatform from the sgconnectimpl module 2023-03-09 09:17:07 +01:00
Mamadou Babaei d9dacfec08 purge the core impl module's dead code for the dropped engine versions: 4.22 to 4.26 and define SG_NOEXCEPT 2023-03-09 09:16:27 +01:00
Mamadou Babaei dc3477889c document 4.22 to 4.26 purge in the changelog 2023-03-08 21:48:58 +01:00
Mamadou Babaei 7ae57c2707 initial attempt to cleanup dead code from the dropped engine versions: 4.22 to 4.26 2023-03-08 21:44:00 +01:00
Mamadou Babaei 2c815cd552 update the remarks section in readme file to reflect the latest platform support state 2023-03-04 16:57:47 +01:00
Mamadou Babaei 2e7e617e14 update the changelog for unreleased changes 2023-03-04 16:22:32 +01:00
Mamadou Babaei 98e7f44fa1 update the platform support matrix 2023-03-03 20:09:33 +01:00
Mamadou Babaei 632f8872e8 whitespace fix 2023-03-03 20:09:14 +01:00
Mamadou Babaei 9fce444a8e update the changelog for unreleased changes 2023-03-03 18:05:37 +01:00
Mamadou Babaei 5351301108 update unreal api to take care of radians/degrees conversions where possible 2023-03-03 18:01:34 +01:00
Mamadou Babaei caa119c4c1 add more utility functions and templates for angles, specifically for handling floats 2023-03-03 18:00:23 +01:00
Mamadou Babaei fa4765df4b almost working hand mondel animation adjusted to the api changes 2023-03-03 16:41:23 +01:00
Mamadou Babaei b733c6314b rename sguitls/sgcoordinates utility class to sgangles and convert angles from radians to degrees and vice-versa between unreal and senseglove 2023-03-03 16:40:51 +01:00
Mamadou Babaei ed632a26f9 minor initialization fixes 2023-03-03 15:17:30 +01:00
Mamadou Babaei 38a2583954 minor fix: move temp a variable 2023-03-03 15:13:17 +01:00
Mamadou Babaei ef84f46fe4 mark a method as const 2023-03-03 14:59:04 +01:00
Mamadou Babaei 1915dba09e clean up redundant hand animation code 2023-03-03 14:51:03 +01:00
Mamadou Babaei 6610a91bbb remove redundant reset to ref pose call 2023-03-03 13:05:49 +01:00
Mamadou Babaei 702816a72e use rotators instead of quats 2023-03-03 12:57:30 +01:00
Mamadou Babaei dce63ba180 improve the virtual hand model animation 2023-03-03 12:42:29 +01:00
Mamadou Babaei 470b39f12c rely on the reference pose instead of caching poses 2023-03-02 02:08:21 +01:00
Mamadou Babaei a315bed629 improved virtual hand model animation 2023-03-01 22:17:31 +01:00
Mamadou Babaei 092b882888 bump senseglove libraries for windows/msvc to v2.4.1-d551398 2023-02-28 11:48:28 +01:00
Mamadou Babaei 2ac7ad0378 mention functional linux development support in the changelog 2023-02-28 11:46:45 +01:00
Mamadou Babaei 5d9f65ddbb bump senseglove libraries and headers for linux and android to v2.4.1-d551398 2023-02-28 10:58:11 +01:00
Mamadou Babaei 6c8415b506 bump senseglove libraries for windows/msvc to v2.4.0-dc6c34b 2023-02-27 16:43:03 +01:00
Mamadou Babaei 067d005c8f bump senseglove libraries and headers for linux and android to v2.4.0-dc6c34b 2023-02-27 16:25:54 +01:00
Mamadou Babaei 09be62cd82 bump senseglove libraries for windows/msvc to v2.3.0-a9726bf 2023-02-24 14:53:26 +01:00
Mamadou Babaei ad428bc82f bump senseglove libraries for linux and android to the first fully linux-aware version: v2.3.0-a9726bf 2023-02-24 14:44:22 +01:00
Mamadou Babaei c301011e28 apply the transform to the output pose 2023-02-24 01:49:03 +01:00
Mamadou Babaei d20f6d719b try a component transform 2023-02-24 00:09:19 +01:00
Mamadou Babaei 3847323a8f add quat template specialization to the sglog module 2023-02-23 23:36:10 +01:00
Mamadou Babaei b478cc414d fix the EvaluateSkeletalControl_AnyThread crash 2023-02-23 21:57:23 +01:00
Mamadou Babaei d292bd80b3 revert back the last commit and ignore the last joint 2023-02-23 21:30:32 +01:00
Mamadou Babaei 6bfb67cd5b try an alternate implementation for copying animation data in order to remedy the virtual hand crash 2023-02-23 20:14:43 +01:00
Mamadou Babaei 97458b4c9e bump senseglove thrid-party libraries for windows to v2.2.4-1eda0d8 2023-02-23 17:23:57 +01:00
Mamadou Babaei 1009c1ff2f bump senseglove libraries for linux and android to v2.2.4-1eda0d8 2023-02-23 17:13:10 +01:00
Mamadou Babaei 4b0b9c189c bump senseglove headers and libraries for linux and android to v2.2.3-39b3c2b 2023-02-23 16:43:34 +01:00
Mamadou Babaei e195698f86 bump senseglove thrid-party libraries for windows to v2.2.3-39b3c2b 2023-02-23 16:37:19 +01:00
Mamadou Babaei 0b09496db7 bump senseglove headers and libraries for linux and android to v2.2.2-1725b91 2023-02-21 18:07:49 +01:00
Mamadou Babaei 206f5900cc bump senseglove thrid-party libraries for windows to v2.2.2-1725b91 2023-02-21 18:03:49 +01:00
Mamadou Babaei 30a7e739db add the msvc141 third-party directory to the directory tree 2023-02-21 17:36:42 +01:00
Mamadou Babaei a7daa05db1 add the android module to the directory tree 2023-02-21 17:14:05 +01:00
Mamadou Babaei c18bd55fef document the directory structure changes 2023-02-21 17:11:52 +01:00
Mamadou Babaei ac7de06657 bump windows/msvc binaries to v2.2.1-ca2f23d 2023-02-21 17:03:09 +01:00
Mamadou Babaei 208318f1a5 update senseglove libraries to v2.2.1-ca2f23d with per engine segregated android ndk support 2023-02-21 16:51:03 +01:00
Mamadou Babaei 5c84cdd8f6 updated documentation for the directory structure 2023-02-21 00:54:05 +01:00
Mamadou Babaei fe547ad511 remove redundant Source/ThirdParty/lib/oculus directories 2023-02-21 00:50:05 +01:00
Mamadou Babaei 4884b04550 updated documentation for the directory structure 2023-02-21 00:48:02 +01:00
Mamadou Babaei 2bb464ac3f update the platform support matrix 2023-02-21 00:45:49 +01:00
Mamadou Babaei 80709b2bc4 bump senseglove headers and libraries for windows/msvc to v2.2.0-eed9611 2023-02-21 00:32:25 +01:00
Mamadou Babaei c452b82ee1 log the unreleased changes 2023-02-21 00:09:29 +01:00
Mamadou Babaei aebb5be988 bump senseglove headers and libraries for linux and android to v2.2.0-eed9611 2023-02-21 00:05:33 +01:00
Mamadou Babaei 2c9eddf7e4 remove archaic pre-public-release dead code 2023-02-21 00:03:56 +01:00
Mamadou Babaei ed27fc6844 virtual hand implementation with a crash from calling EvaluateSkeletalControl_AnyThread 2023-02-16 18:28:34 +01:00
Mamadou Babaei c60946ccc4 fix impl owners 2023-02-14 23:10:12 +01:00
Mamadou Babaei b003fb1e01 add partion implementation of the virtual hand 2023-02-14 23:09:31 +01:00
Mamadou Babaei 7be9a1252b fix vr hand asset issues 2023-02-10 10:56:54 +01:00
Mamadou Babaei 1a978f33de add senseglove module base classes 2023-02-09 21:16:49 +01:00
Mamadou Babaei 31f51eeaec add the virtual hand assets 2023-02-09 18:32:23 +01:00
Mamadou Babaei e88189a192 punctuation fix 2023-02-07 12:14:23 +01:00
Mamadou Babaei 3780be1e60 bump the plugin version to v1.1.1 2023-02-07 12:09:31 +01:00
Mamadou Babaei dde3e11829 move launch and settings module to PrivateIncludePathModuleNames from PrivateDependencyModuleNames in order to pass runuat tests 2023-02-07 11:37:19 +01:00
Mamadou Babaei a35a0697c8 Bump SenseGlove libraries for Windows/MSVC to v2.1.2-95ec6e7 2023-02-07 10:54:14 +01:00
Mamadou Babaei eb7f3867d5 fix formatting 2023-02-07 10:44:10 +01:00
Mamadou Babaei e16c2d8759 add support for android armeabi-v7a with neon, x86-64, and x86 builds in addition to arm64-v8a 2023-02-07 10:42:30 +01:00
Mamadou Babaei a78c013878 bump senseglove libraries for linux to v2.1.2-95ec6e7 2023-02-07 10:39:47 +01:00
Mamadou Babaei 71934761e7 update the changelog with initiali support for ue5.2 2023-02-07 09:09:30 +01:00
Mamadou Babaei 7a1c189222 add initial ue5.2 support to the build system along with linux third-party libraries 2023-02-07 08:54:49 +01:00
Mamadou Babaei f257dc55a1 fix gitignore rules for the Source/ThirdParty directory 2023-02-07 08:29:08 +01:00
Mamadou Babaei 712b62c2f8 bump senseglove libraries for windows/msvc to v2.1.1-0569c74 2023-02-03 15:55:34 +01:00
Mamadou Babaei 56573b4721 bump the plugin version to v1.1.0 2023-02-03 13:39:56 +01:00
Mamadou Babaei 9569a7bd97 switch to sgconnect for android v1.1.0 extracted from the .arr file shipped with our unity plugin 2023-02-03 02:10:52 +01:00
Mamadou Babaei d845a36714 bump senseglove libraries to v2.1.1-0569c74 2023-02-02 23:19:51 +01:00
Mamadou Babaei 1c61f79b88 use the correct writehaptics signature extracted from the .jar file 2023-02-02 23:19:07 +01:00
Mamadou Babaei 658749b905 mention sgconnect for android as an added dependency in the changelog 2023-02-02 22:45:33 +01:00
Mamadou Babaei a0f5222894 update the platform support matrix and the directory structure 2023-02-02 22:09:46 +01:00
Mamadou Babaei 57bef13063 log the unreleased changes 2023-02-02 21:49:03 +01:00
Mamadou Babaei 06c2ee6170 bump sgconnect and sgcore to v2.1.0-9080621 and add an almost functional android implementation 2023-02-02 21:44:30 +01:00
Mamadou Babaei fe7c7d4579 try to offload android to sgcore/sgconnect third-party libraries and drop linux third-party libraries for earlier versions of the engine prior to 4.27 2023-01-31 14:36:16 +01:00
Mamadou Babaei 1a5333a7fc minor documentation fixes 2023-01-31 03:25:46 +01:00
Mamadou Babaei bd09dd7ccb drop linux third-party libraries for earlier versions of the engine prior to 4.27 2023-01-31 01:57:31 +01:00
Mamadou Babaei 4ec0b07897 fix a bug in the jni call write haptics 2023-01-31 01:43:07 +01:00
Mamadou Babaei a031ad48da replace more method calls on android with the equivalents from sgconnect for android 2023-01-24 20:16:05 +01:00
Mamadou Babaei dd54f63e76 bump copyright years 2023-01-17 19:27:27 +01:00
Mamadou Babaei bb9500fccc add an android module with working jni calls to Init(), Dispose(), and GetLibraryVersion() 2023-01-17 19:24:00 +01:00
Mamadou Babaei 2ccf279b67 log the unreleased changes 2022-12-16 14:06:48 +01:00
Mamadou Babaei ec1969ead0 remove the enum utils class due to ANY_PACKAGE deprecation warnings in unreal engine 5.1 2022-12-16 14:02:35 +01:00
Mamadou Babaei 9e85ba96d8 conform to the class naming standards 2022-12-16 13:59:32 +01:00
Mamadou Babaei 771b9cccb3 apply const correctness 2022-12-16 13:57:05 +01:00
Mamadou Babaei ae97e90af0 whitelist android as a target platform 2022-12-15 21:15:12 +01:00
Mamadou Babaei 88775397a3 fix android build issues caused by the log module 2022-12-15 18:11:45 +01:00
Mamadou Babaei 7a9c2bfe3b bump the plugin version to v1.0.4 2022-12-02 12:29:25 +01:00
Mamadou Babaei b5d2f85b4a simplify the move constructors / move assignment operators' noexcept ifdefs 2022-12-02 12:04:17 +01:00
Mamadou Babaei 0b4e7b51ad fix ue 4.22 - 4.27 build issues on msvc 2017 2022-12-02 11:52:58 +01:00
Mamadou Babaei 91a8869fd3 move sgplatform headers to the public folder 2022-12-02 11:51:23 +01:00
Mamadou Babaei 9050d77731 update the platform support matrix 2022-12-02 11:19:52 +01:00
Mamadou Babaei c926998445 fix ue >= 5.0 ubt errors 2022-12-02 11:01:57 +01:00
Mamadou Babaei bc9a544923 upgrade senseglove third-party libraries for linux and android to to v2.0.4 2022-12-02 00:42:55 +01:00
Mamadou Babaei 98c5ac8e60 add macros for C++17 detection 2022-12-02 00:38:12 +01:00
Mamadou Babaei e2c3c9e87f apply const correctness to method parameters 2022-12-02 00:37:44 +01:00
Mamadou Babaei e548ea66d3 upgrade sglibraries binaries for windows/msvc to to v2.0.4 and add msvc 2017 binaries 2022-12-02 00:15:24 +01:00
Mamadou Babaei c925e9aad3 upgrade sglibraries third-party headers to v2.0.4 2022-12-02 00:09:22 +01:00
Mamadou Babaei b37dd147be add support for msvc 2017 to the build.cs files 2022-12-01 23:19:06 +01:00
Mamadou Babaei 9c3480768b bump the plugin version to v1.0.3 2022-11-30 14:32:34 +01:00
Mamadou Babaei 3c6486def7 adjust Config/FilterPlugin.ini in order to conform to Epic's market place guidelines 2022-11-30 14:27:24 +01:00
Mamadou Babaei 861be675b3 bump the plugin version to v1.0.2 2022-11-27 14:41:32 +01:00
Mamadou Babaei b38a5b7f64 fix the third-party license mark down file formatting 2022-11-27 14:30:50 +01:00
Mamadou Babaei d5a0f7d0b4 add the SenseGlove SDK license 2022-11-27 14:25:31 +01:00
Mamadou Babaei 45aa372a3e fix readme typos and errors 2022-11-27 14:13:00 +01:00
Mamadou Babaei d3fed4c38e add missing the copyright notice and include directive 2022-11-27 14:11:28 +01:00
Mamadou Babaei 01b7839191 list the dot files inside the FilterPlugin.ini file 2022-11-27 13:54:17 +01:00
Mamadou Babaei 93dc15cfce add the marketplace url to the .uplugin file 2022-11-27 13:53:24 +01:00
Mamadou Babaei 59076cfce8 bump the plugin version to v1.0.1 2022-11-25 15:19:18 +01:00
Mamadou Babaei ca4f5b3f0b * Expose SenseGloveTypes as a public dependency in SenseGloveConnect and
SenseGloveCore modules, so that the C++ users of the API don't need to
 explicitly add it as a dependency
* Clean up the redundant headers/modules dependency from SGCore headers
* Fix RunUAT build issues for Epic Store submission
2022-11-25 14:51:59 +01:00
Mamadou Babaei 4e6865ab64 update documentation, add changelog, and prepare for v1.0.0 release 2022-11-24 17:06:14 +01:00
Mamadou Babaei 2a29c443f8 huge patch fixing 4.22 through 4.24 build issues on msvc and llvm/clang 2022-11-24 01:05:56 +01:00
Mamadou Babaei 228bcd4ade fix a mangled method name in layer 4 2022-11-23 21:18:06 +01:00
Mamadou Babaei db17afd850 replace IMPLEMENT_GAME_MODULE with IMPLEMENT_MODULE 2022-11-19 13:04:39 +01:00
Mamadou Babaei d2192f0578 fix module types and loading order 2022-11-19 06:15:29 +01:00
Mamadou Babaei 715d6de4d7 add the docs url 2022-11-18 15:07:12 +01:00
Mamadou Babaei 8557a5c3e5 import sg libraries v2.0.3 binaries for msvc/windows 2022-11-18 14:51:15 +01:00
Mamadou Babaei f7b4514a0e import sg libraries headers v2.0.3 and linux binaries and adjust to the latest changes 2022-11-18 14:37:16 +01:00
Mamadou Babaei 5226c91874 add more documentation 2022-11-18 14:32:55 +01:00
Mamadou Babaei b5d79efab4 add missing sense glove wrappers in layer 1/2/3/4 of the api and also more documentation 2022-11-18 13:42:24 +01:00
Mamadou Babaei c68d8dc3e9 add missing nova glove info rotator conversions to layer 3/4 of the api and also more documentation 2022-11-18 12:11:48 +01:00
Mamadou Babaei 9b0e662793 add missing nova glove hand profile wrappers in layer 3/4 of the api and also more documentation 2022-11-18 12:02:29 +01:00
Mamadou Babaei f018831e3a add more documentation 2022-11-18 10:17:36 +01:00
Mamadou Babaei 0fecf34bcb add missing sg device wrappers in layer 4 of the api and also more documentation 2022-11-18 10:17:09 +01:00
Mamadou Babaei 8ef9c21926 add more documentation 2022-11-17 17:01:35 +01:00
Mamadou Babaei b655d80f15 document some parts of the layer 3 and 4 api 2022-11-17 15:23:17 +01:00
Mamadou Babaei dfd08a746e translate senseglove/unreal angles/directions 2022-11-16 18:49:33 +01:00
Mamadou Babaei 3ac545911e implement proper mm/cm conversions 2022-11-16 14:55:29 +01:00
Mamadou Babaei 9ad9ffb731 introduce more utility templates for metric unit conversions 2022-11-15 17:11:19 +01:00
Mamadou Babaei fec2aeb218 remove unit conversions from the internal vect3d wrappers 2022-11-15 16:23:58 +01:00
Mamadou Babaei 6eb9221de0 bump sg libraries to v2.0.2 and adjust to the latest changes 2022-11-15 15:56:22 +01:00
Mamadou Babaei 7c05d767bd consider millimeters/centimeters conversion, introduce units, and minor array utils refactoring 2022-11-15 00:28:52 +01:00
Mamadou Babaei ea3f23bae3 fix wrong readme header 2022-11-14 17:18:54 +01:00
Mamadou Babaei b3a7feeef7 shorten mangled blueprint nodes in order to avoid doc generation issues 2022-11-14 16:57:23 +01:00
Mamadou Babaei f1c8ded939 separate the unreal c++/bp implementation of SGConnect wrappers 2022-11-12 00:24:08 +01:00
4498 changed files with 4968 additions and 12721 deletions
+1
View File
@@ -1,4 +1,5 @@
[FilterPlugin]
/Config/FilterPlugin.ini
/Documentation/the-senseglove-unreal-engine-handbook.epub
/Documentation/the-senseglove-unreal-engine-handbook.pdf
/Documentation/the-senseglove-unreal-engine-handbook.zip
+1 -1
View File
@@ -3,7 +3,7 @@
#
# (The MIT License)
#
# Copyright (c) 2020 - 2024 SenseGlove
# Copyright (c) 2020 - 2025 SenseGlove
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
+112 -92
View File
@@ -3,7 +3,7 @@
#
# (The MIT License)
#
# Copyright (c) 2020 - 2024 SenseGlove
# Copyright (c) 2020 - 2025 SenseGlove
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -51,17 +51,19 @@ SG_PLUGIN_FILE := $(SG_PLUGIN_DIR)/SenseGlove.uplugin
SG_DOCUMENTATION_URL := https://unreal.docs.senseglove.com
SG_DOCUMENTATION_DIR := $(SG_PLUGIN_DIR)/Documentation
SG_DOCUMENTATION_EPUB_DIR := $(SG_DOCUMENTATION_DIR)/epub
SG_DOCUMENTATION_HTML_DIR_NAME := html
SG_DOCUMENTATION_HTML_DIR := $(SG_DOCUMENTATION_DIR)/$(SG_DOCUMENTATION_HTML_DIR_NAME)
SG_DOCUMENTATION_PDF_DIR := $(SG_DOCUMENTATION_DIR)/pdf-outline
SG_DOCUMENTATION_PDF_FILE := $(SG_DOCUMENTATION_PDF_DIR)/output.pdf
SG_DOCUMENTATION_EPUB_DIR := $(SG_DOCUMENTATION_DIR)/epub
SG_DOCUMENTATION_EPUB_FILE := $(SG_DOCUMENTATION_EPUB_DIR)/$(SG_PROJECT_NAME).epub
SG_DOCUMENTATION_PACK_DIR_NAME := pack
SG_DOCUMENTATION_PACK_DIR := $(SG_DOCUMENTATION_DIR)/$(SG_DOCUMENTATION_PACK_DIR_NAME)
SG_HANDBOOK_PACKED_HTML_DIR := $(SG_DOCUMENTATION_PACK_DIR)/$(SG_HANDBOOK_ESCAPED_NAME)
SG_HANDBOOK_PACKED_HTML_FILE := $(SG_DOCUMENTATION_PACK_DIR)/$(SG_HANDBOOK_ESCAPED_NAME).zip
SG_HANDBOOK_PACKED_PDF_FILE := $(SG_DOCUMENTATION_PACK_DIR)/$(SG_HANDBOOK_ESCAPED_NAME).pdf
SG_HANDBOOK_PACKED_EPUB_FILE := $(SG_DOCUMENTATION_PACK_DIR)/$(SG_HANDBOOK_ESCAPED_NAME).epub
SG_BROWSER_BINARY_PATH_LINUX := /opt/brave.com/brave/brave
SG_BROWSER_BINARY_PATH_WINDOWS := C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe
@@ -224,6 +226,7 @@ SG_MDBOOK_HTML_SITE_URL := $(SG_HANDBOOK_REVISION)
SG_HANDBOOK_REVISION_URL := $(SG_DOCUMENTATION_URL)/$(SG_HANDBOOK_REVISION)
SG_HANDBOOK_RELEASE_NAME := $(shell echo $(SG_PROJECT_NAME)-$(SG_HANDBOOK_REVISION) | tr '[:upper:]' '[:lower:]' | sed 's/ /-/g')
SG_HANDBOOK_PDF_URL := $(SG_HANDBOOK_REVISION_URL)/$(SG_HANDBOOK_RELEASE_NAME).pdf
SG_HANDBOOK_EPUB_URL := $(SG_HANDBOOK_REVISION_URL)/$(SG_HANDBOOK_RELEASE_NAME).epub
endif # ($(strip $(SG_HANDBOOK_REVISION)),mismatched)
################################################################################
@@ -283,6 +286,7 @@ SG_HANDBOOK_DEPLOY_TEMP_DIR := $(shell mktemp -d -t $(SG_HANDBOOK_DEPLOY_TEMP_DI
$(info Temporary directory has been set up at '$(SG_HANDBOOK_DEPLOY_TEMP_DIR)')
SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE := $(SG_HANDBOOK_DEPLOY_TEMP_DIR)/$(SG_HANDBOOK_RELEASE_NAME).pdf
SG_HANDBOOK_DEPLOY_GENERATED_EPUB_FILE := $(SG_HANDBOOK_DEPLOY_TEMP_DIR)/$(SG_HANDBOOK_RELEASE_NAME).epub
SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE := $(SG_HANDBOOK_DEPLOY_TEMP_DIR)/revisions.txt
@@ -332,6 +336,7 @@ info:
@echo " - Handbook Revision : $(SG_HANDBOOK_REVISION)"
@echo " - Handbook Revision URL : $(SG_HANDBOOK_REVISION_URL)"
@echo " - Handbook PDF URL : $(SG_HANDBOOK_PDF_URL)"
@echo " - Handbook ePub URL : $(SG_HANDBOOK_EPUB_URL)"
@echo " - Git Branch : $(SG_GIT_BRANCH)"
@echo " - Git Tag : $(SG_GIT_TAG)"
@echo " - Git Commit : $(SG_GIT_COMMIT)"
@@ -360,9 +365,9 @@ clean:
.PHONY: install-build-deps
install-build-deps:
@echo "Installing build dependencies if they have not already been installed..."
@cargo install mdbook --vers "^0.4" --locked
@cargo install mdbook --version "0.4.49" --locked
@cargo install xq --vers "^0.4" --locked
@cargo install mdbook-alerts --vers "^0.6" --locked
@cargo install mdbook-alerts --vers "^0.7" --locked
@cargo install mdbook-pdf --vers "^0.1" --locked
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@echo "Installing mdbook-pdf-outline..."
@@ -370,6 +375,7 @@ ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
&& . $(SG_LINUX_PYTHON_VENV_BIN_DIR)/activate \
&& pip install mdbook-pdf-outline 2>/dev/null
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@cargo install --git https://github.com/Michael-F-Bryan/mdbook-epub --rev cac03b7f4b151f106f7f05b13da4c33fc098dd2c --locked
################################################################################
# Make Targets - mdBook
@@ -456,6 +462,7 @@ _mdbook_serve:
SG_HANDBOOK_REVISION='$(SG_HANDBOOK_REVISION)' \
SG_HANDBOOK_REVISION_URL='$(SG_HANDBOOK_REVISION_URL)' \
SG_HANDBOOK_PDF_URL='$(SG_HANDBOOK_PDF_URL)' \
SG_HANDBOOK_EPUB_URL='$(SG_HANDBOOK_EPUB_URL)' \
SG_GIT_BRANCH='$(SG_GIT_BRANCH)' \
SG_GIT_TAG='$(SG_GIT_TAG)' \
SG_GIT_COMMIT='$(SG_GIT_COMMIT)' \
@@ -488,13 +495,14 @@ _mdbook_build:
SG_HANDBOOK_REVISION='$(SG_HANDBOOK_REVISION)' \
SG_HANDBOOK_REVISION_URL='$(SG_HANDBOOK_REVISION_URL)' \
SG_HANDBOOK_PDF_URL='$(SG_HANDBOOK_PDF_URL)' \
SG_HANDBOOK_EPUB_URL='$(SG_HANDBOOK_EPUB_URL)' \
SG_GIT_BRANCH='$(SG_GIT_BRANCH)' \
SG_GIT_TAG='$(SG_GIT_TAG)' \
SG_GIT_COMMIT='$(SG_GIT_COMMIT)' \
SG_GIT_COMMIT_NUMS_SINCE_TAG='$(SG_GIT_COMMIT_NUMS_SINCE_TAG)' \
SG_GIT_TREE_STATE='$(SG_GIT_TREE_STATE)' \
SG_GIT_IS_SHALLOW_CLONE='$(SG_GIT_IS_SHALLOW_CLONE)' \
SG_GIT_LATEST_REMOTE_TAG='$(SG_GIT_LATEST_REMOTE_TAG)' \
SG_GIT_TREE_STATE='$(SG_GIT_TREE_STATE)' \
SG_GIT_VERSION='$(SG_GIT_VERSION)' \
SG_GIT_VERSION_MAJOR='$(SG_GIT_VERSION_MAJOR)' \
SG_GIT_VERSION_MINOR='$(SG_GIT_VERSION_MINOR)' \
@@ -519,24 +527,30 @@ _pack:
@mkdir -p "$(SG_DOCUMENTATION_PACK_DIR)"
@echo "Moving '$(SG_DOCUMENTATION_HTML_DIR)' to '$(SG_HANDBOOK_PACKED_HTML_DIR)'..."
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@mv $(SG_DOCUMENTATION_HTML_DIR) $(SG_HANDBOOK_PACKED_HTML_DIR)
@mv "$(SG_DOCUMENTATION_HTML_DIR)" "$(SG_HANDBOOK_PACKED_HTML_DIR)"
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@powershell -Command "Move-Item '$(SG_DOCUMENTATION_HTML_DIR)' '$(SG_HANDBOOK_PACKED_HTML_DIR)'"
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@echo "Compressing '$(SG_HANDBOOK_PACKED_HTML_DIR)' to '$(SG_HANDBOOK_PACKED_HTML_FILE)'..."
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@cd $(SG_DOCUMENTATION_PACK_DIR) \
@cd "$(SG_DOCUMENTATION_PACK_DIR)" \
&& zip $(SG_HANDBOOK_PACKED_HTML_FILE) -r $(SG_HANDBOOK_ESCAPED_NAME)
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@cd $(SG_DOCUMENTATION_PACK_DIR) \
@cd "$(SG_DOCUMENTATION_PACK_DIR)" \
&& powershell Compress-Archive $(SG_HANDBOOK_ESCAPED_NAME) $(SG_HANDBOOK_PACKED_HTML_FILE)
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@echo "Moving '$(SG_DOCUMENTATION_PDF_FILE)' to '$(SG_HANDBOOK_PACKED_PDF_FILE)'..."
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@mv $(SG_DOCUMENTATION_PDF_FILE) $(SG_HANDBOOK_PACKED_PDF_FILE)
@mv "$(SG_DOCUMENTATION_PDF_FILE)" "$(SG_HANDBOOK_PACKED_PDF_FILE)"
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@powershell -Command "Move-Item '$(SG_DOCUMENTATION_PDF_FILE)' '$(SG_HANDBOOK_PACKED_PDF_FILE)'"
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@echo "Moving '$(SG_DOCUMENTATION_EPUB_FILE)' to '$(SG_HANDBOOK_PACKED_EPUB_FILE)'..."
ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@mv "$(SG_DOCUMENTATION_EPUB_FILE)" "$(SG_HANDBOOK_PACKED_EPUB_FILE)"
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@powershell -Command "Move-Item '$(SG_DOCUMENTATION_EPUB_FILE)' '$(SG_HANDBOOK_PACKED_EPUB_FILE)'"
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
.PHONY: _deploy
_deploy:
@@ -552,7 +566,7 @@ ifeq ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
--delete $(SG_DOCUMENTATION_HTML_DIR)/ \
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)
else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@cd $(SG_DOCUMENTATION_DIR) \
@cd "$(SG_DOCUMENTATION_DIR)" \
&& "$(SG_RSYNC_BINARY_PATH_WINDOWS)" \
-avze "\"$(SG_RSYNC_SSH_BINARY_PATH_WINDOWS)\" -p $(SG_HANDBOOK_SSH_PORT)" \
--perms \
@@ -561,13 +575,19 @@ else # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)
endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
@echo "Copying '$(SG_DOCUMENTATION_PDF_FILE)' to '$(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE)'..."
@cp -v $(SG_DOCUMENTATION_PDF_FILE) $(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE)
@cp -v "$(SG_DOCUMENTATION_PDF_FILE)" "$(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE)"
@echo "Uploading '$(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE)' to '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)'..."
@scp \
-P $(SG_HANDBOOK_SSH_PORT) \
$(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE) \
"$(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE)" \
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)
@echo "Copying '$(SG_DOCUMENTATION_EPUB_FILE)' to '$(SG_HANDBOOK_DEPLOY_GENERATED_EPUB_FILE)'..."
@cp -v "$(SG_DOCUMENTATION_EPUB_FILE)" "$(SG_HANDBOOK_DEPLOY_GENERATED_EPUB_FILE)"
@echo "Uploading '$(SG_HANDBOOK_DEPLOY_GENERATED_EPUB_FILE)' to '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)'..."
@scp \
-P $(SG_HANDBOOK_SSH_PORT) \
"$(SG_HANDBOOK_DEPLOY_GENERATED_EPUB_FILE)" \
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)/$(SG_HANDBOOK_REVISION)
@cp -v $(SG_DOCUMENTATION_PDF_FILE) $(SG_HANDBOOK_DEPLOY_GENERATED_PDF_FILE)
@echo "Retrieving the list of deployed handbook revisions from '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_PORT)/$(SG_HANDBOOK_SSH_REMOTE_DIR)'..."
@ssh \
-p $(SG_HANDBOOK_SSH_PORT) $(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST) \
@@ -580,96 +600,96 @@ endif # ($(SG_BUILD_PLATFORM),$(SG_BUILD_PLATFORM_LINUX))
grep -i 'next' $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE); \
grep -vi 'next' $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE) \
| sort -r; \
} > $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE).tmp
@mv $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE).tmp $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE)
} > "$(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE).tmp"
@mv "$(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE).tmp" "$(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE)"
@echo "Revisions list saved to '$(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE)'!"
@echo "Current revisions:"
@sed 's/^/ - /' $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE)
@sed 's/^/ - /' "$(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE)"
@echo "Generating '$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)'..."
@echo "<html>" > $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<head>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<title>Welcome to $(SG_PROJECT_NAME)</title>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<link rel='icon' href='favicon.svg'>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<link rel='shortcut icon' href='favicon.svg'>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<style>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "body {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "font-family: Arial, sans-serif;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "background-color: #003070;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "color: #fff;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "margin: 0;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "padding: 0;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo ".container {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "padding: 2.0em;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo ".logo-container {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "text-align: center;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo ".logo-container img {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "max-width: 100%;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "height: auto;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo ".title-container {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "text-align: center;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo ".revisions-container {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "display: table;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "width: 300px;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "margin: 0 auto;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "padding: 20px;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo ".row {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "display: table-row;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo ".cell {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "display: table-cell;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "background-color: #004890;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "border-radius: 5px;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "margin: 10px;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "padding: 20px;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "text-align: center;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "transition: transform 0.2s;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo ".cell:hover {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "transform: scale(1.05);" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo ".cell a {" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "display: block;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "height: 100%;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "width: 100%;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "text-decoration: none;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "color: #fff;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "font-weight: bold;" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "}" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "</style>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "</head>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<body>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<div class='container'>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<html>" > "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<head>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<title>Welcome to $(SG_PROJECT_NAME)</title>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<link rel='icon' href='favicon.svg'>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<link rel='shortcut icon' href='favicon.svg'>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<style>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "body {" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "font-family: Arial, sans-serif;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "background-color: #003070;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "color: #fff;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "margin: 0;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "padding: 0;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "}" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo ".container {" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "padding: 2.0em;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "}" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo ".logo-container {" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "text-align: center;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "}" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo ".logo-container img {" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "max-width: 100%;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "height: auto;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "}" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo ".title-container {" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "text-align: center;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "}" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo ".revisions-container {" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "display: table;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "width: 300px;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "margin: 0 auto;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "padding: 20px;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "}" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo ".row {" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "display: table-row;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "}" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo ".cell {" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "display: table-cell;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "background-color: #004890;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "border-radius: 5px;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "margin: 10px;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "padding: 20px;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "text-align: center;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "transition: transform 0.2s;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "}" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo ".cell:hover {" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "transform: scale(1.05);" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "}" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo ".cell a {" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "display: block;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "height: 100%;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "width: 100%;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "text-decoration: none;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "color: #fff;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "font-weight: bold;" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "}" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "</style>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "</head>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<body>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<div class='container'>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<div class='logo-container'>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<img src="favicon.svg" alt='SenseGlove' />" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "</div>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<div class='title-container'>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<h1>Welcome to the SenseGlove Unreal Engine Handbook</h1>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<h3>Please choose a revision to continue!</h3>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<h5>* Please note that the next revision is the documentation for the unstable next release of the plugin and subject to change!</h5>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "</div>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<div class='revisions-container'>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "<img src="favicon.svg" alt='SenseGlove' />" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "</div>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<div class='title-container'>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<h1>Welcome to the SenseGlove Unreal Engine Handbook</h1>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<h3>Please choose a revision to continue!</h3>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<h5>* Please note that the next revision is the documentation for the unstable next release of the plugin and subject to change!</h5>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "</div>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "<div class='revisions-container'>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@while read dir; \
do \
echo "<div class='row'><div class='cell'><a href=\"$$dir\">$$dir</a></div></div>"; \
done < $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE) >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "</div>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "</div>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "</body>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
@echo "</html>" >> $(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)
done < $(SG_HANDBOOK_DEPLOY_REVISION_LIST_FILE) >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "</div>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "</div>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "</body>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "</html>" >> "$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)"
@echo "Uploading '$(SG_HANDBOOK_FAVICON_FILE)' to '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)'"
@scp \
-P $(SG_HANDBOOK_SSH_PORT) \
$(SG_HANDBOOK_FAVICON_FILE) \
"$(SG_HANDBOOK_FAVICON_FILE)" \
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)
@echo "Uploading '$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)' to '$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)'"
@scp \
-P $(SG_HANDBOOK_SSH_PORT) \
$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE) \
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)
"$(SG_HANDBOOK_DEPLOY_GENERATED_HOME_INDEX_FILE)" \
$(SG_HANDBOOK_SSH_USER)@$(SG_HANDBOOK_SSH_HOST):$(SG_HANDBOOK_SSH_REMOTE_DIR)
+4 -2
View File
@@ -5,7 +5,7 @@
#
# (The MIT License)
#
# Copyright (c) 2020 - 2024 SenseGlove
# Copyright (c) 2020 - 2025 SenseGlove
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -43,6 +43,7 @@ escape_string() {
SG_PROJECT_NAME_ESCAPED=$(escape_string "${SG_PROJECT_NAME}")
SG_HANDBOOK_REVISION_ESCAPED=$(escape_string "${SG_HANDBOOK_REVISION}")
SG_HANDBOOK_REVISION_URL_ESCAPED=$(escape_string "${SG_HANDBOOK_REVISION_URL}")
SG_HANDBOOK_EPUB_URL_ESCAPED=$(escape_string "${SG_HANDBOOK_EPUB_URL}")
SG_HANDBOOK_PDF_URL_ESCAPED=$(escape_string "${SG_HANDBOOK_PDF_URL}")
SG_GIT_BRANCH_ESCAPED=$(escape_string "${SG_GIT_BRANCH}")
SG_GIT_TAG_ESCAPED=$(escape_string "${SG_GIT_TAG}")
@@ -70,6 +71,7 @@ PARSED_BOOK=$(echo "${BOOK}" | xq "
. | gsub(\"{{ #sg-project-name }}\"; \"${SG_PROJECT_NAME_ESCAPED}\") |
gsub(\"{{ #sg-handbook-revision }}\"; \"${SG_HANDBOOK_REVISION_ESCAPED}\") |
gsub(\"{{ #sg-handbook-revision-url }}\"; \"${SG_HANDBOOK_REVISION_URL_ESCAPED}\") |
gsub(\"{{ #sg-handbook-epub-url }}\"; \"${SG_HANDBOOK_EPUB_URL_ESCAPED}\") |
gsub(\"{{ #sg-handbook-pdf-url }}\"; \"${SG_HANDBOOK_PDF_URL_ESCAPED}\") |
gsub(\"{{ #sg-git-branch }}\"; \"${SG_GIT_BRANCH_ESCAPED}\") |
gsub(\"{{ #sg-git-tag }}\"; \"${SG_GIT_TAG_ESCAPED}\") |
@@ -101,4 +103,4 @@ PARSED_BOOK=$(echo "${BOOK}" | xq "
#echo "BOOK: ${BOOK}" >&2
#echo "PARSED_BOOK: ${PARSED_BOOK}" >&2
echo "${PARSED_BOOK}" | xq '.'
echo "${PARSED_BOOK}" | xq '.'
+7 -1
View File
@@ -3,7 +3,7 @@
#
# (The MIT License)
#
# Copyright (c) 2020 - 2024 SenseGlove
# Copyright (c) 2020 - 2025 SenseGlove
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
@@ -49,6 +49,12 @@ use-default-preprocessors = true
after = [ "index", "links" ]
command = "sh ./bin/sg-preprocessor.sh"
[output.epub]
no-section-label = false
curly-quotes = true
epub-version = 3
footnote-backrefs = true
[output.html]
additional-css = ["styles/custom.css"]
additional-js = []
+1 -1
View File
@@ -4,7 +4,7 @@ Welcome to the documentation for the SenseGlove Unreal Engine Plugin (a.k.a. The
This handbook is an ongoing effort and a work in progress to document the SenseGlove Unreal Engine Plugin. Feel free to visit this handbook on a regular basis.
Due to superior formatting and frequent updates, we recommend [the online version of the handbook]({{ #sg-handbook-revision-url }}); nonetheless, it's available in [PDF format]({{ #sg-handbook-pdf-url }}) as well.
Due to superior formatting and frequent updates, we recommend [the online version of the handbook]({{ #sg-handbook-revision-url }}); nonetheless, it's also available in [PDF]({{ #sg-handbook-pdf-url }}) and [ePub]({{ #sg-handbook-epub-url }}) formats as well.
> [!TIP]
> Feel free to check out [the SenseGlove Unreal Engine Plugin landing page on Fab](https://www.fab.com/listings/62bcdd2a-0bb1-4f34-b7b8-c5e7c9313099) as well.
+19 -5
View File
@@ -15,11 +15,20 @@ Welcom to the SenseGlove Unreal Engine Handbook!
- [Via Microsoft Azure DevOps Repositories](getting-started/installation/microsoft-azure-devops-repositories.md)
- [Enabling and Verifying the Plugin Version](getting-started/plugin-verify-version-enable/README.md)
- [SenseCom](getting-started/sensecom/README.md)
- [SenseCom on GNU/Linux](getting-started/sensecom/gnu-linux/README.md)
- [Connect to Nova gloves using Blueman Bluetooth Manager](getting-started/sensecom/gnu-linux/blueman-bluetooth-manager.md)
- [Connect to Nova gloves using Command-line](getting-started/sensecom/gnu-linux/command-line.md)
- [SenseCom on Microsoft Windows](getting-started/sensecom/microsoft-windows.md)
- [Bluetooth Low Energy](getting-started/sensecom/bluetooth-low-energy/README.md)
- [SenseCom on Android](getting-started/sensecom/bluetooth-low-energy/android.md)
- [SenseCom on GNU/Linux](getting-started/sensecom/bluetooth-low-energy/gnu-linux.md)
- [SenseCom on Microsoft Windows](getting-started/sensecom/bluetooth-low-energy/microsoft-windows.md)
- [Bluetooth Serial](getting-started/sensecom/bluetooth-serial/README.md)
- [SenseCom on Android](getting-started/sensecom/bluetooth-serial/android.md)
- [SenseCom on GNU/Linux](getting-started/sensecom/bluetooth-serial/gnu-linux/README.md)
- [Connect to Nova gloves using Blueman Bluetooth Manager](getting-started/sensecom/bluetooth-serial/gnu-linux/blueman-bluetooth-manager.md)
- [Connect to Nova gloves using Command-line](getting-started/sensecom/bluetooth-serial/gnu-linux/command-line.md)
- [SenseCom on Microsoft Windows](getting-started/sensecom/bluetooth-serial/microsoft-windows.md)
- [Enabling XR_EXT_hand_tracking on VR Headsets](getting-started/enabling-xr-ext-hand-tracking-vr-headsets/README.md)
- [PCVR Mode](getting-started/enabling-xr-ext-hand-tracking-vr-headsets/pcvr-mode/README.md)
- [Standalone Mode](getting-started/enabling-xr-ext-hand-tracking-vr-headsets/standalone-mode/README.md)
- [Third-Party Tutorials](getting-started/enabling-xr-ext-hand-tracking-vr-headsets/third-party-tutorials/README.md)
- [Setup SenseGlove Default Classes](getting-started/setup-senseglove-default-classes/README.md)
- [SGGameModeBase](getting-started/setup-senseglove-default-classes/sggamemodebase.md)
- [SGPawn](getting-started/setup-senseglove-default-classes/sgpawn.md)
@@ -56,8 +65,10 @@ Welcom to the SenseGlove Unreal Engine Handbook!
- [SenseGlove Console Commands](misc/console-commands/README.md)
- [Deploying to Android (Standalone)](misc/android-standalone-deployment/README.md)
- [Third-Party Tutorials](misc/android-standalone-deployment/third-party-tutorials/README.md)
- [Upgrade Guide](misc/upgrade-guide/README.md)
- [Optimizing for Higher FPS](misc/optimize-higher-fps/README.md)
- [Third-Party Tutorials](misc/optimize-higher-fps/third-party-tutorials/README.md)
# 🛠️ Advanced Topics
@@ -69,6 +80,8 @@ Welcom to the SenseGlove Unreal Engine Handbook!
- [Consuming FXRMotionControllerData](advanced-topics/openxr/consuming-fxrmotioncontrollerdata/README.md)
- [Blueprint](advanced-topics/openxr/consuming-fxrmotioncontrollerdata/blueprint.md)
- [C++](advanced-topics/openxr/consuming-fxrmotioncontrollerdata/cpp.md)
- [Third-Party Integrations](advanced-topics/openxr/third-party-integrations/README.md)
- [Third-Party Tutorials](advanced-topics/openxr/third-party-tutorials/README.md)
# 🔌 Low-Level API
@@ -89,7 +102,8 @@ Welcom to the SenseGlove Unreal Engine Handbook!
- [SenseGlove Unreal Engine Handbook License](license/senseglove-unreal-engine-handbook.md)
- [Third-Party Licenses](license/third-party.md)
- [SenseGlove SDK License](license/senseglove-sdk.md)
- [Boost C++ Libraries](license/boost-cpp-libraries.md)
- [SGBLE and SGBLExx Rust Dependencies Licenses](license/sgble-sgblexx-rust-dependencies.md)
- [Boost C++ Libraries License](license/boost-cpp-libraries.md)
- [Serial Communication Library License](license/serial-communication-library.md)
-----------
@@ -33,3 +33,5 @@ In the next sections we'll see:
- [How we can directly consume the `FXRMotionControllerData`](consuming-fxrmotioncontrollerdata/) on UE `5.2`, `5.3`, `5.4`, and `5.5` to draw and animate debug virtual hands in both [Blueprint](consuming-fxrmotioncontrollerdata/blueprint.md) and [C++](consuming-fxrmotioncontrollerdata/cpp.md).
- [How we can directly consume the `FXRHandTrackingState`](consuming-fxrhandtrackingstate/) on UE `5.5` to draw and animate debug virtual hands in both [Blueprint](consuming-fxrhandtrackingstate/blueprint.md) and [C++](consuming-fxrhandtrackingstate/cpp.md).
- [The Consuming OpenXR Hand-Tracking Data tutorial series](third-party-tutorials/) provides a comprehensive introduction to virtual reality, OpenXR hand-tracking, and gesture detection in Unreal Engine. Additionally, this tutorial series covers procedural virtual hand mesh animation using the OpenXR hand-tracking data.
@@ -14,7 +14,7 @@
> separated into the two distinct structs, providing clearer and more
> specialized handling of each.
Taking a closer look at the `FXRHandTrackingState` declaration inside the Unreal Engine's `HeadMountedDisplay` module at `[Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h)`, figuring out the data structure might not seem very straightforward:
Taking a closer look at the `FXRHandTrackingState` declaration inside the Unreal Engine's `HeadMountedDisplay` module at [`Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h`](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h), figuring out the data structure might not seem very straightforward:
```cpp
USTRUCT(BlueprintType)
@@ -119,7 +119,7 @@ In order to draw and animate a virtual hand in real-time whether the data is com
Both `HandKeyLocations` and `HandKeyRotations` contain 26 elements as defined by OpenXR's [`XR_HAND_JOINT_COUNT_EXT`](https://registry.khronos.org/OpenXR/specs/1.1/man/html/XR_HAND_JOINT_COUNT_EXT.html) and [`XrHandJointLocationsEXT`](https://registry.khronos.org/OpenXR/specs/1.0/man/html/XrHandJointLocationsEXT.html), etc.
Unreal Engine also provides an enum called `EHandKeypoint` naming the 26 joints, and the equivalent of `XR_HAND_JOINT_COUNT_EXT` as `EHandKeypointCount` inside `[Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h)` as follows:
Unreal Engine also provides an enum called `EHandKeypoint` naming the 26 joints, and the equivalent of `XR_HAND_JOINT_COUNT_EXT` as `EHandKeypointCount` inside [`Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h`](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h) as follows:
```cpp
/**
@@ -14,7 +14,7 @@
> separated into the two distinct structs, providing clearer and more
> specialized handling of each.
Taking a closer look at the `FXRMotionControllerData` declaration inside the Unreal Engine's `HeadMountedDisplay` module at `[Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h)`, figuring out the data structure might not seem very straightforward:
Taking a closer look at the `FXRMotionControllerData` declaration inside the Unreal Engine's `HeadMountedDisplay` module at [`Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h`](https://github.com/EpicGames/UnrealEngine/blob/5.5/Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h), figuring out the data structure might not seem very straightforward:
```cpp
USTRUCT(BlueprintType)
@@ -174,7 +174,7 @@ In order to draw and animate a virtual hand in real-time whether the data is com
Both `HandKeyPositions` and `HandKeyRotations` contain 26 elements as defined by OpenXR's [`XR_HAND_JOINT_COUNT_EXT`](https://registry.khronos.org/OpenXR/specs/1.1/man/html/XR_HAND_JOINT_COUNT_EXT.html) and [`XrHandJointLocationsEXT`](https://registry.khronos.org/OpenXR/specs/1.0/man/html/XrHandJointLocationsEXT.html), etc.
Unreal Engine also provides an enum called `EHandKeypoint` naming the 26 joints, and the equivalent of `XR_HAND_JOINT_COUNT_EXT` as `EHandKeypointCount` inside `[Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h](https://github.com/EpicGames/UnrealEngine/blob/release/Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h)` as follows:
Unreal Engine also provides an enum called `EHandKeypoint` naming the 26 joints, and the equivalent of `XR_HAND_JOINT_COUNT_EXT` as `EHandKeypointCount` inside [`Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h`](https://github.com/EpicGames/UnrealEngine/blob/5.5/Engine/Source/Runtime/HeadMountedDisplay/Public/HeadMountedDisplayTypes.h) as follows:
```cpp
/**
@@ -0,0 +1,265 @@
# Third-Party OpenXR Integrations
The **SenseGlove Unreal Engine Plugin** registers itself as an `OpenXRHandTracking` provider, making it a fully compatible, drop-in replacement for Epics own **OpenXRHandTracking** plugin in Unreal Engine. This allows it to integrate seamlessly with any third-party system or plugin that can consume OpenXR hand-tracking data.
One notable example is the open-source, MIT-licensed [VR Expansion Plugin (VRE)](#vr-expansion-plugin).
> [!IMPORTANT]
> As explained in the
> [Third-Party Tutorials: Consuming OpenXR Hand-Tracking Data](../third-party-tutorials/)
> section, its entirely possible to build your own custom hand interaction
> system without relying on
> [SGPawn](../../../getting-started/setup-senseglove-default-classes/sgpawn.html)
> or any third-party OpenXR-compatible interaction plugin altogether.
>
> If your project requires finer-grained control than what these solutions
> offer, the tutorials in that section will guide you through understanding the
> OpenXR hand-tracking data format in Unreal Engine and help you implement a
> fully tailored interaction system from the ground up in a few hours.
As the SenseGlove Unreal Engine Plugin is fully OpenXR-compliant, it provides OpenXR hand-tracking data in the expected format and takes over as the active provider within Unreal. If your existing interaction system (e.g. VRE plugin) already uses OpenXR hand-tracking, SenseGlove will function as a direct tracking source instead of a real hand.
> [!NOTE]
> Since most hand-tracking systems are not capable of haptics feedback,
> integrating SenseGlove's haptic feedback requires a small amount of additional
> effort.
>
> The SenseGlove API is fully exposed to Unreal Engine via C++ and Blueprint,
> so triggering haptic feedback is as simple as calling a function.
> For more information, refer to the [Blueprint Changes](#blueprint-changes)
> section below.
> [!IMPORTANT]
> If you're using a third-party OpenXR hand interaction system, configuring the
> [Wrist-Tracker Hardware Settings](../../../getting-started/setup-wrist-tracking-hardware/)
> will likely have no effect, and your hand offsets may appear at the incorrect
> location in the scene.
>
> This is because those settings are only recognized by SenseGloves native
> actors and components such as `SGPawn`, `SGWristTrackerComponent`, etc.
> Most third-party plugins are unaware of these settings. As a result, you'll
> need to figure out how to manually apply the appropriate offsets within your
> chosen OpenXR hand interaction system.
>
> For example, the VRE plugin provide similar configurations in their plugin's
> settings section. For more information refer to the
> [Changing Wrist-Tracker Offsets](#changing-wrist-tracker-offsets) section
> below.
## Comparison of Supported OpenXR Hand-Interaction Systems
| | **Built-in?** | **Works out of the box?** | **Beginner-friendly?** | **Learning Curve** | **Featureful** | **Customizable?** | **Supports Custom Gestures?** |
|-------------------------------------|---------------|------------------------------------|--------------------------------------------------|-----------------------------|--------------------------------------------------------------------------|-----------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------|
| **SGPawn** | ✅ Yes | ✅ Yes | ✅ Most beginer-friendly | ✅ Very easy | ⚠️ Very basic | ⚠️ Very limited | ❌ Not yet, maybe added in the future |
| **SenseGlove OpenXR** | ✅ Yes | ❌ Requires Blueprint or C++ coding | ✅ Requires a few hours of watching tutotrials | ✅ Moderate | ❌ You need to develop your own features and functionalities from scratch | ✅ Your imagination, creativity, and skill level are your limits | ✅ You have to implement your own recognition logic; example pinch detection algorithm is taught in the tutorial series |
| **VR Expansion Plugin** | ❌ No | ⚠️ Partially requires setup | ❌ Best suited for intermediate or advanced users | ⚠️ Steep | ✅ Diverse features and functionalities | ✅ Highly customizable | ✅ Via custom logic |
| **Other OpenXR-compatible Plugins** | ❌ No | ❓ Check their documentation | ❓ Check their documentation | ❓ Check their documentation | ❓ Check their documentation | ❓ Check their documentation | ❓ Check their documentation |
## VR Expansion Plugin
The [**VR Expansion Plugin (VRE)**](https://vreue4.com/) is a robust, community-driven plugin for Unreal Engine that focuses on advanced VR interaction and gameplay mechanics. It is open-source (MIT licensed), actively maintained, and has received support from Epic via the [MegaGrants program](https://www.unrealengine.com/en-US/megagrants).
Designed to extend Unreals capabilities for virtual reality, VRE offers a modular set of tools covering:
- Multiplayer and networking
- Locomotion systems
- Object gripping and interaction
- Custom movement and physics handling
The plugin is particularly useful for teams building sophisticated VR experiences. While it's beginner-friendly to an extent, its depth and flexibility are **best suited for intermediate to advanced Unreal Engine developers**. Whether you're prototyping with built-in features or extracting specific systems for your own framework, VRE offers a rich foundation for VR development.
> [!NOTE]
> For support and assistance with the VRE plugin, you can join
> [its active and welcoming Discord community](https://discord.gg/P4V7TY8BQy),
> known for being responsive and supportive.
### SGVRETemplate Demo Scene
To showcase how SenseGlove can be integrated with OpenXR-compatible third-party interaction systems, SenseGlove provides a ready-to-use [VR Expansion Plugin Integration Demo for Unreal Engine 5.4](https://dev.azure.com/SenseGlove/_git/SGVRETemplate).
This repository includes UE `5.4`compatible versions of both the **SenseGlove** and **VR Expansion** plugins, with all necessary setup and configuration already in place. Simply download the project and it should run out of the box, allowing you to explore the integration without additional setup.
> [!NOTE]
> SenseGlove provides this demo to demonstrate the potential for integrating
> with third-party OpenXR-based hand interaction systems.
> Please note that the **VR Expansion Plugin** is a third-party solution, and as
> such, **we do not offer official support for it**.
>
> For help with the VRE plugin, refer to its documentation at
> [**vreue4.com**](https://vreue4.com/) and consider joining the
> [**official VRE Discord community**](https://discord.gg/P4V7TY8BQy),
> which is active, supportive, and very responsive.
### SGVRETemplate Modifications
The [**SGVRETemplate**](https://dev.azure.com/SenseGlove/_git/SGVRETemplate) is built on top of the [VR Expansion Plugin Example Template](https://github.com/mordentral/VRExpPluginExample). However, since the original template is not directly compatible with SenseGlove, several adjustments were necessary.
In addition, a few known issues with OpenXR support in the VR Expansion Plugin for Unreal Engine `5.4` required us to modify the plugin itself to ensure smooth integration.
Below is an overview of the key modifications made to both the project template and this version of the VRE plugin.
#### Blueprint Changes
- **Content/VRE/Core/Character/BP_VRCharacter**: Four functions were added: `SendVibration`, `SendFFB`, `SendSqueeze`, and `ResetHaptics`. These functions retrieve the glove instance and send the appropriate haptic command to it. In the `OnPossessed` event, `Load Controller by Name` was added along with a string uproperty `Tracking Offset`, which is used to load the correct tracking offsets based on the selected profile.
> [!NOTE]
> If you'd like to implement your own haptic functions, the most convenient
> approach is to
> [safely acquire a glove instance](../../../advanced-topics/safe-glove-access-blueprint/).
> Once you have the glove instance, applying haptic feedback is as simple as
> calling the appropriate function.
>
> SenseGlove supports three types of haptics: Vibrations, Force-feedback, and
> Wrist-squeeze.
>
> - Using `Send Custom Waveform`, you can send vibrations to the glove instance.
> - Using `Queue Command Force Feedback Levels`, you can send force-feedback.
> - Using `Queue Command Wrist Squeeze`, you can send a wrist-squeeze command to
> the glove.
>
> Each of these functions can be called directly on the glove instance to
> trigger the desired haptic feedback.
- **Content/VRE/Core/GraspingHands/GraspingHandManny**: In the `SetupFingerAnimations` function, replace the hardcoded check for `HandType == Left` with a string comparison: convert the enum to a string and check if it contains `"Left"`. This allows compatibility with alternative tracking sources such as `"Left Foot"`.
#### C++ Changes
- **Plugins/VRExpansionPlugin/Source/VRExpansionPlugin/Public/Grippables/HandSocketComponent.h**: The following line was added as a public `UPROPERTY` in the header file:
```cpp
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Hand Animation")
float HandAnimationProgress = 0.0f;
```
- **Plugins/VRExpansionPlugin/Source/VRExpansionPlugin/Private/Grippables/HandSocketComponent.cpp**: In the function `bool UHandSocketComponent::GetBlendedPoseSnapShot(FPoseSnapshot& PoseSnapShot, USkeletalMeshComponent* TargetMesh, bool bSkipRootBone, bool bFlipHand)`, the `TrackLocation` calculation was modified from:
```cpp
if (TrackIndex != INDEX_NONE && (!bSkipRootBone || TrackIndex != 0))
{
double TrackLocation = 0.0f;
HandTargetAnimation->GetBoneTransform(LocalTransform, FSkeletonPoseBoneIndex(TrackMap[TrackIndex].BoneTreeIndex), TrackLocation, false);
}
else
{
```
To:
```cpp
if (TrackIndex != INDEX_NONE && (!bSkipRootBone || TrackIndex != 0))
{
double TrackLocation = HandTargetAnimation->GetPlayLength() * HandAnimationProgress;
HandTargetAnimation->GetBoneTransform(LocalTransform, FSkeletonPoseBoneIndex(TrackMap[TrackIndex].BoneTreeIndex), TrackLocation, false);
}
else
{
```
- **Plugins/VRExpansionPlugin/Source/VRExpansionPlugin/Private/GripMotionControllerComponent.cpp**: In the function `void UGripMotionControllerComponent::GetCurrentProfileTransform(bool bBindToNoticationDelegate)`, the following logic was updated from:
```cpp
if (HandType == EControllerHand::Left || HandType == EControllerHand::AnyHand || !VRSettings->bUseSeperateHandTransforms)
{
NewControllerProfileTransform = VRSettings->CurrentControllerProfileTransform;
}
else if (HandType == EControllerHand::Right)
{
NewControllerProfileTransform = VRSettings->CurrentControllerProfileTransformRight;
}
```
To:
```cpp
if (UEnum::GetDisplayValueAsText(HandType).ToString().Contains("Left") || HandType == EControllerHand::AnyHand || !VRSettings->bUseSeperateHandTransforms)
{
NewControllerProfileTransform = VRSettings->CurrentControllerProfileTransform;
}
else if (UEnum::GetDisplayValueAsText(HandType).ToString().Contains("Right"))
{
NewControllerProfileTransform = VRSettings->CurrentControllerProfileTransformRight;
}
```
The following function was also updated; from:
```cpp
void UGripMotionControllerComponent::GetHandType(EControllerHand& Hand)
{
if (!IMotionController::GetHandEnumForSourceName(MotionSource, Hand))
{
// Check if the palm motion source extension is being used
// I assume eventually epic will handle this case
if (MotionSource.Compare(FName(TEXT("RightPalm"))) == 0 || MotionSource.Compare(FName(TEXT("RightWrist"))) == 0)
{
Hand = EControllerHand::Right;
}
// Could skip this and default to left now but would rather check
else if (MotionSource.Compare(FName(TEXT("LeftPalm"))) == 0 || MotionSource.Compare(FName(TEXT("LeftWrist"))) == 0)
{
Hand = EControllerHand::Left;
}
else
{
Hand = EControllerHand::Left;
}
}
}
```
To:
```cpp
void UGripMotionControllerComponent::GetHandType(EControllerHand& Hand)
{
if (!IMotionController::GetHandEnumForSourceName(MotionSource, Hand))
{
// Check if the palm motion source extension is being used
// I assume eventually epic will handle this case
if (MotionSource.Compare(FName(TEXT("RightPalm"))) == 0 || MotionSource.Compare(FName(TEXT("RightWrist"))) == 0 || MotionSource.ToString().Contains("Right"))
{
Hand = EControllerHand::Right;
}
// Could skip this and default to left now but would rather check
else if (MotionSource.Compare(FName(TEXT("LeftPalm"))) == 0 || MotionSource.Compare(FName(TEXT("LeftWrist"))) == 0 || MotionSource.ToString().Contains("Left"))
{
Hand = EControllerHand::Left;
}
else
{
Hand = EControllerHand::Left;
}
}
}
```
#### Changing Wrist-Tracker Offsets
If you are using wrist-tracking hardware supported by the SenseGlove plugin, you can change the offsets inside `BP_VRCharacter` using the uproperty `Tracking Offset` typing or copying any of the following, depending on your hardware:
- **SenseGlove_Quest3**: The wrist-tracking controller profile for for Meta Quest3.
- **SenseGlove_ViveWristTrackers**: The wrist-tracking controller profile for HTC VIVE wrist trackers.
#### Changing Motion Source
In `BP_VRCharacter`, you can change the wrist-tracking motion source for each hand. This is required depending on which tracker you are using.
#### Adding More Gestures
In the `GraspingHandManny` Blueprint, weve created a simple function called `SaveHandPose`. If you press the `Space Bar` while the game is running, it will save the current pose of the corresponding hand. The pose is stored in a gestures database located under `Content/SenseGlove` with the default name `NewHandPose`. You should rename the pose to something meaningful when you intend to use it.
Its helpful to add an Event Dispatcher to the `GraspingHandManny` Blueprint, which is triggered in the Event Graph by the `On New Gesture Detected` event from the `OpenXRHandPose` component. This system is index-based rather than name-based, so keep that in mind when adding more dispatchers. By default, weve included examples for `Teleport`, `Grab`, `Release`, and `Use`.
#### Video Summary
This short video provides an overview of some of the key changes and modifications behind the SGVRETemplate demo scene, mentioned above.
<div style="margin: 0 auto; width: 560px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/6uTu4T10mjU" frameborder="0" allowfullscreen></iframe>
</div>
### SGVRETemplate Demo Calibration Scene
The SGVRETemplate includes a basic Calibration Scene located at `Content/SenseGlove/Maps/Calibration`. Inside this level, youll find a copy of `Content/SenseGlove/Blueprints/Calibration/BP_Calibrator` Blueprint responsible for transitioning to your desired target map after the calibration process is complete. You can configure the target map directly within this Blueprint by adjusting the `Level to Load` uproperty.
@@ -0,0 +1,34 @@
# Third-Party Tutorials: Consuming OpenXR Hand-Tracking Data
## Introduction to Virtual Reality, OpenXR Hand-Tracking, and Gesture Detection in Unreal Engine
In this tutorial, you'll learn how to get the OpenXR Hand-Tracking Data from the Unreal Engine API and how to consume it to draw virtual hand models using cubes (as hand joints). It will also dive into gesture recognition by implementing a simple pinch gesture recognition.
In the first part, it will focus on UE `4.26` to `5.4` API. And, in the second part, you'll learn how to update the project to work with `5.5`.
<div style="margin: 0 auto; width: 560px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/67v-sEhidvM" frameborder="0" allowfullscreen></iframe>
</div>
## Procedural Virtual Hand Mesh Animation Using OpenXR Hand-Tracking Data
Building on the [Introduction to Virtual Reality, OpenXR Hand-Tracking, and Gesture Recognition in Unreal Engine tutorial](#introduction-to-virtual-reality-openxr-hand-tracking-and-gesture-detection-in-unreal-engine), this slightly more advanced tutorial will dive deeper into the following topics:
- Transitioning seamlessly between motion controller and hand-tracking modes in Unreal Engine.
- Adding custom debugging gizmos to improve development and testing workflows.
- Visualizing debug virtual hands by incorporating the custom gizmos.
- Animating virtual hand meshes with OpenXR hand-tracking data, moving beyond basic joint representation with cubes.
- Re-using and adapting the gesture recognition code from the introductory tutorial to integrate with the new animated virtual hand meshes.
This guide will help you take your VR projects to the next level with polished and practical implementations.
**Part 1**:
<div style="margin: 0 auto; width: 560px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/TPEA1GJr_kU" frameborder="0" allowfullscreen></iframe>
</div>
**Part 2**:
<div style="margin: 0 auto; width: 560px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/xEnuephuNmw" frameborder="0" allowfullscreen></iframe>
</div>
+402 -179
View File
@@ -5,11 +5,234 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [2.6.3] - 2025-06-27
This patch release contains no changes to the plugin code. It includes only documentation updates and improvements.
### Documentation
- Added a new section to the handbook titled [Third-Party OpenXR Integrations](../advanced-topics/openxr/third-party-integrations/) section.
- Additional minor fixes and improvements that may not be listed here.
## [2.6.2] - 2025-06-10
This patch release contains no changes to the plugin code. It includes only documentation updates and improvements.
### Documentation
- Added [a third-party tutorial to the Optimizing Your Project for Higher FPS](../misc/optimize-higher-fps/third-party-tutorials/) section.
## [2.6.1] - 2025-06-05
This patch release addresses several critical build and linking issues.
### Fixed
- Fix a linking issue on GNU/Linux with UE `5.6` where SenseGlove libraries were built against dynamic versions of `libc++` and `libc++abi` libraries rather than the static versions.
- Fix an issue where SenseGlove libraries for some targets were not actually built with `C++20` and still were built against `C++17`.
- Fix an issue where SenseGlove libraries for some targets were built or linked with incorrect settings.
- Additional minor fixes and improvements that may not be listed here.
### Changed
- Bumped the SenseGlove libraries to `v2.204.0-3a37b1977`.
### Removed
- SenseGlove plugin no longer ships Boost or wjwwood's Serial Communication Library header files as SenseGlove public headers shipped with `v2.204.0-3a37b1977` render them redundant. This significantly removes clutter, free up disk space, and speed up builds to some extent.
### Documentation
- Fix some changelog typos.
- Additional minor fixes and improvements that may not be listed here.
## [2.6.0] - 2025-06-04
This minor release delivers broad compatibility, stability, and maintainability enhancements, focusing on bringing full Unreal Engine `5.6` support, C++20 migration, and resolving various GNU/Linux build issues.
### Added
- Added support for Epic Native Toolchain `v25`, which will be shipped with the upcoming UE `5.6`.
### Fixed
- Resolved GNU/Linux build issues for Unreal Engine `5.5` and `5.6` caused by incorrect linkage to GNU/GCC's `libstdc++` instead of LLVM/Clang's `libc++`.
- Fix `SGLog` build issues on GNU/Linux with UE `5.6`.
- Fix type conversion safety and consistency issues across all `SGLog` formatters.
- Resolved a critical deadlock between the rendering and game threads in Unreal Engine `5.6` that occurrs when `IHeadMountedDisplay::GetHMDMonitorInfo()` is invoked from `FSGXRTracker::GetControllerTransform()`. This is similar to another [critical deadlock issue (UE-212224), occurring during PipelinedFrameState acquisition, addressed in the `v2.5.0` release](#250---2025-05-09).
- Additional minor fixes and improvements that may not be listed here.
### Changed
- Replaced Epic Native Toolchain `v24` support with Epic Native Toolchain `v25` due to the fact that now `v25` is the default Linux toolchain for UE `5.6`.
- Revamped `FSGHMDTracker` to resolve a critical deadlock between the rendering and game threads in Unreal Engine `5.6` that occurrs when `IHeadMountedDisplay::GetHMDMonitorInfo()` is invoked from `FSGXRTracker::GetControllerTransform()`. This is similar to another [critical deadlock issue (UE-212224), occurring during PipelinedFrameState acquisition, addressed in the `v2.5.0` release](#250---2025-05-09).
- Revamped the UBT logic for importing third-party headers and libraries by introducing third-party dependency modules, `SGBleThirdPartyLibs`, `SGConnectThirdPartyHeaders`, `SGConnectThirdPartyLibs`, `SGCoreThirdPartyLibs`, and `SGSerialThirdPartyLibs`, which significantly reduces UBT boilerplate code and increases maintainability.
- Bumped the SenseGlove libraries to `v2.203.0-f3d3e676`.
- SenseGlove libraries have migrated to `C++20` from `C++17`.
- Revamped the `SGLog` logging utility class to use `TUniquePtr` instead of `std::unique_ptr`.
- `SGLog` now relies on `TAtomic<bool>` for thread-safe initialization.
- `SGBackend` now relies on `TAtomic<bool>` for thread-safe initialization.
- `USGBackend::IsBackendInitialized()` is no longer inlined and the initialization flag has been moved to the private implementation of `USGBackend`.
- Bumped the SenseGlove Unreal Engine Marketplace Packager `v0.6.0-4108c6f`.
### Removed
- Dropped support for Epic Native Toolchain `v24`, which was last shipped with the preview release of UE `5.6`, but has been removed from the `5.6` branch on GitHub.
### Deprecated
- This is the last minor release to support Unreal Engine `5.3` and its support will be removed from the next minor or major releases.
### Documentation
- Revised the outdated [Plugin Directory Structure](./directory-structure.html) section to accurately reflect the latest changes to the `Source/ThirdParty` directory layout changes.
- Lock the [mdbook](https://github.com/rust-lang/mdBook) crate version to `v0.49.0` to avoid layout issues introduced with `v0.50.0`.
- Additional minor fixes and improvements that may not be listed here.
## [2.5.0] - 2025-05-09
This minor release primarily focuses on bringing Bluetooth Low Energy support to the SenseGlove Unreal Engine integration.
### Added
- Added support for Epic Native Toolchain `v24`, which will be shipped with the upcoming UE `5.6`.
### Fixed
- Backend initialization error handling on Android.
- Fix [a critical issue introduced by UE `5.5`](https://github.com/EpicGames/UnrealEngine/blob/ef1397773d160d39423feb90cb2196ddfaa1e2ae/Engine/Plugins/Runtime/OpenXR/Source/OpenXRHMD/Private/OpenXRHMD.cpp#L1740) that [also affects the upcoming UE `5.6`](https://github.com/EpicGames/UnrealEngine/blob/bedc5631b81cd39aaac8d61f303eacc86d4220f0/Engine/Plugins/Runtime/OpenXR/Source/OpenXRHMD/Private/OpenXRHMD.cpp#L1772). This is known as issue `UE-212224`, which leads to a deadlock during `PipelinedFrameState` acquisition between the game and rendering threads.
- Additional minor fixes and improvements that may not be listed here.
### Changed
- The error codes returned from `FSGConnectJNI::Initialize()` and `FSGCoreJNI::Initialize()` have been changed. This is a breaking change for any code that relies on handling the return codes from those functions.
- Bumped the SenseGlove libraries to the `v2.200.0-0cb715d0` release with BLE (Bluetooth Low Energy) support.
### Removed
- Dropped support for Unreal Engine `5.2` and Epic Native Toolchain `v21` (previously used for building UE `5.2` Linux dependencies), as they were already deprecated in the `v2.4.x` release series.
### Documentation
- Revamped [SenseCom documentation](../getting-started/sensecom) in order to divide the SenseCom instructions section into [Bluetooth Low Energy instructions for SenseCom](../getting-started/sensecom/bluetooth-low-energy) and [Bluetooth Serial instructions for SenseCom](../getting-started/sensecom/bluetooth-serial) sections.
- Added [Bluetooth Low Energy instructions for SenseCom](../getting-started/sensecom/bluetooth-low-energy).
- Added [Bluetooth Serial instructions for Android](../getting-started/sensecom/bluetooth-serial/android.html).
- Added [SGBLE and SGBLExx Rust Dependency Licenses](../license/sgble-sgblexx-rust-dependencies.html).
- Bumped the [mdbook-epub](https://github.com/Michael-F-Bryan/mdbook-epub) crate to [`cac03b7f4b151f106f7f05b13da4c33fc098dd2c`](https://github.com/Michael-F-Bryan/mdbook-epub/commit/cac03b7f4b151f106f7f05b13da4c33fc098dd2c).
- List the third-party tutorials inside the [Extra Resources](../appendix/extra-resources.html#third-party-tutorials) section in a categorized manner.
- Improved changelog formatting.
- Additional minor fixes and improvements that may not be listed here.
## [2.4.2] - 2025-02-17
This is a patch release to address minor issues in the SenseGlove Unreal Engine Handbook, with no modifications to the plugin code.
### Documentation
- List the third-party tutorials with a description in their corresponding parent sections.
- Additional minor fixes and improvements that may not be listed here.
## [2.4.1] - 2025-02-14
This is a patch release to address minor issues in the SenseGlove Unreal Engine Handbook, with no modifications to the plugin code.
### Documentation
- Fix a bug that breaks the custom CSS styles on the Handbook's release URLs (e.g. `https://unreal.docs.senseglove.com/2.4/`) by reverting an unintentional change from the `v2.4.0`.
- Applied a minor Handbook Makefile fix.
- Additional minor fixes and improvements that may not be listed here.
## [2.4.0] - 2025-02-14
This minor release brings various improvements and, notably, the first version to add support for VIVE standalone mode with ViveOpenXR compatibility.
### Added
- Added the ePub version of the SenseGlove Unreal Engine Handbook.
- Added `FSGConnectJNI::Initialize()` and `FSGCoreJNI::Initialize()` return codes to Android logs for detailed debugging purposes through `adb logcat`.
- Introduced compatibility with the `ViveOpenXR` plugin.
- Added the `FSGPluginUtils` utility class for other plugins or modules availability detection such as `Meta XR` and `ViveOpenXR`.
- Added various HTC HMDs auto-detection support on Android.
- Added support for HTC VIVE Focus Vision HMD auto-detection.
- Added support for HTC Vive Wrist Trackers support on Android using the official `ViveOpenXR` plugin's OpenXR positional tracking provider `OpenXRViveWristTracker`.
- Added enum `ESGOpenXRPositionalTrackingProvider`.
- Added the `OpenXRPositionalTrackingProvider` option to the plugin's wrist-tracker settings to either manually set the positional tracking provider or auto-detect it based on a combination of tracker hardware settings, targeted platform, available OpenXR plugins, or the auto-detected HMD hardware.
### Fixed
- Fix a critical issue where `HandStates->GetTransform(KeyPoint)` was incorrectly resolving to `(&HandStates[0])->GetTransform(KeyPoint)`, causing both hands to use the left hand's wrist transform under specific conditions. This occurred when the `bFallbackToHandTrackingIfNoGloveDetected` option was enabled, two gloves were present, and no hardware wrist-tracking device was active, resulting in both hands overlapping at the same transform.
- `FSGArrayUtils` optimizations that affect the plugin performance as a whole.
- Additional minor fixes and improvements that may not be listed here.
### Changed
- Now the motion sources for the wrist-tracking hardware or hand-tracking are queried and populated dynamically rather than relying on the hardcoded `EControllerHand` enum. This allows the SenseGlove Unreal Engine Plugin to integrate better into other plugins such as `ViveOpenXR`, which when enabled, provides many more options as the motion source for their various wrist-tracking hardware.
- `FSGWristTrackingSettings::LeftHandMotionSource` and `FSGWristTrackingSettings::RightHandMotionSource` types have changed from `EControllerHand` to `FName`.
- Bumped the SenseGlove libraries to `v2.105.3-97ea18cb`.
- Bumped the SenseGlove Unreal Engine Marketplace Packager `v0.5.0-7df1183`.
- Bumped the copyright years.
- This is the last release to support Unreal Engine `5.2`. From `v2.5.x` onwards only UE `5.3` and newer will be supported.
- The `ESGViveHMDDetectionPriority` enum items have changed and are no longer backward-compatible.
### Deprecated
- This is the last minor release to support Unreal Engine `5.2` and its support will be removed from the next minor or major releases.
### Documentation
- Reintroduced the Handbook in ePub format.
- Revamped the [Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets](../getting-started/enabling-xr-ext-hand-tracking-vr-headsets/) and [Deploying to Android (Standalone)](../misc/android-standalone-deployment/) documentation, and added the `ViveOpenXR`-compatibile instructions as well.
- Significantly improved the [Setting Up the Wrist Tracking Hardware](../getting-started/setup-wrist-tracking-hardware/) section by providing more detailed documentation and example configuration per HMD and wrist tracking hardware.
- Clarified [how to set up the VIVE Wrist Trackers in various configurations](../plugin-configuration/plugin-settings/tracking/wrist-tracking/).
- Added [HTC VIVE specific optimization tips for running in standalone mode](../misc/optimize-higher-fps/#htc-vive-specific-optimizations-in-standalone-mode).
- Fixed a few broken URLs caused by bad markdown formatting.
- Applied various Handbook Makefile fixes.
- Clarified the HTC VIVE standalone support status in the platform support matrix.
- Bumped the [mdbook-alerts](https://github.com/lambdalisue/rs-mdbook-alerts) crate to `v0.7.x`.
- Reintroduced [mdbook-epub](https://github.com/Michael-F-Bryan/mdbook-epub) at [`d1536bbbdc1ca00320522ad73a967e15057ef573`](https://github.com/Michael-F-Bryan/mdbook-epub/commit/d1536bbbdc1ca00320522ad73a967e15057ef573) from the [`master` branch](https://github.com/Michael-F-Bryan/mdbook-epub/tree/master) as the blocking issues in [#115](https://github.com/Michael-F-Bryan/mdbook-epub/issues/115) have been address in [`1ca2a860f6ed405c00914a3aadd8057d5050b29b`](https://github.com/Michael-F-Bryan/mdbook-epub/commit/1ca2a860f6ed405c00914a3aadd8057d5050b29b#diff-b21e2a96624fabac44d6c5ecc34bff0835565999be6a320fe75bd0401d5c8e87R148).
- Added third-party tutorials to the following sections: [Enabling XR_EXT_hand_tracking on VR Headsets](../getting-started/enabling-xr-ext-hand-tracking-vr-headsets/third-party-tutorials/), [Deploying to Android (Standalone)](../misc/android-standalone-deployment/third-party-tutorials/), and [OpenXR](../advanced-topics/openxr/third-party-tutorials/).
- Additional minor fixes and improvements that may not be listed here.
- List the VRExpansionPlugin demo in the [Extra Resources](../appendix/extra-resources.html) section.
## [2.3.2] - 2025-01-28
This patch release addresses a critical issue backported from the upcoming `2.4.x` release to `2.3.x`.
### Fixed
- Fix a critical issue backported from the upcoming `2.4.x` release where `HandStates->GetTransform(KeyPoint)` was incorrectly resolving to `(&HandStates[0])->GetTransform(KeyPoint)`, causing both hands to use the left hand's wrist transform under specific conditions. This occurred when the `bFallbackToHandTrackingIfNoGloveDetected` option was enabled, two gloves were present, and no hardware wrist-tracking device was active, resulting in both hands overlapping at the same transform.
## [2.3.1] - 2024-11-27
This patch release addresses a few issues with SenseGlove Sockets Editor.
### Fixed
- Additional minor fixes and improvements that may not be listed here.
### Changed
- The SenseGlove Sockets Editor now calculates hand bone reference transforms using the current virtual hand mesh being edited, rather than the reference mesh, when adding SenseGlove sockets.
## [2.3.0] - 2024-11-13
This minor release includes some improvements and adds official Unreal Engine `5.5` Fab support.
### Added
- Added `USGAndroidPermissions` to the `SenseGloveAndroid` module, enhancing the plugin's permission request process on Android. Now, a pop-up prompts the user to grant permissions, preventing silent crashes when permissions haven't been granted beforehand.
- Added Unreal Engine `5.5` Fab support.
### Fixed
- Fix UE `5.5` deprecation warnings inside `USGVirtualHandComponent`.
- Additional minor fixes and improvements that may not be listed here.
## [2.2.2] - 2024-11-08
This patch release addresses a few issues with both glove and hand-tracking.
# Fixed
### Fixed
- Fixed a chain of critical bugs that gets triggered due to `GloveConnectivityCheckInterval` getting passed as seconds to the engine rather than milliseconds. Thus, the default or any large value for `GloveConnectivityCheckInterval` causes noticeable long delays between glove-connectivity-check intervals and consequently renders the hand-tracking state invalid in certain situations when the `bFallbackToHandTrackingIfNoGloveDetected` option is false.
@@ -117,7 +340,7 @@ This is a bugfix release with no actual plugin code changes, mostly addressing i
### Removed
- Removed Android NDK r25 armv7 and x86 dependencies brought back by mistake while merging v2.1.0 from the dev branch to the master branch.
- Removed Android NDK `r25` `armv7` and `x86` dependencies brought back by mistake while merging `v2.1.0` from the dev branch to the master branch.
## [2.1.0] - 2024-08-16
@@ -126,92 +349,92 @@ This is a minor release focusing mainly on bringing OpenXR-compatible hand track
### Added
- Added SenseGloveTracking and module which provides OpenXR-compatible hand tracking by implementing `XR_EXT_hand_tracking` support, HMD auto-detection, and SenseGlove device tracking.
- Added USenseGloveTrackingKismet module in order to expose part of the SenseGloveTracking functionality to Blueprint.
- Added FSGXRTracker, the underlying main class that implements the OpenXR compatibility.
- Added USGXRTrackerKismetLibrary in order to allow Blueprint to retrieve the FXRMotionControllerData directly from our tracking module.
- Added the SGTrackingTypes header to the SenseGloveTypes module in order to define and share SenseGloveTracking module types through this header across the plugin modules.
- Added `USenseGloveTrackingKismet` module in order to expose part of the SenseGloveTracking functionality to Blueprint.
- Added `FSGXRTracker`, the underlying main class that implements the OpenXR compatibility.
- Added `USGXRTrackerKismetLibrary` in order to allow Blueprint to retrieve the `FXRMotionControllerData` directly from our tracking module.
- Added the `SGTrackingTypes` header to the `SenseGloveTypes` module in order to define and share `SenseGloveTracking` module types through this header across the plugin modules.
- A fallback to HMD and wrist tracker hardware auto-detection mechanism has been added to be triggered in situations when automatic detection of the wrist tracker hardware is desired, e.g., either by not setting it explicitly, or setting it to the default None value. Please note that this is still highly experimental and HTC VIVE Focus 3 and HTC XR Elite cannot be distinguished in the current iteration. Though, since the tracker devices and offsets for both headsets are the same in the end it does not make a difference if both headsets are detected as each other.
- Added ESGHeadMountedDisplayDevice enum with supported HMDs list.
- Added ESGViveHMDDetectionPriority enum in order to choose which headset we attempt to detect between VIVE Focus 3 and VIVE XR Elite as we cannot distinguish them, yet.
- Added the FSGHMDTracker utility class, in order to easily gather information about the HMD device at runtime.
- Added USGHMDTrackerKismetLibrary which exposes the equivalent C++ HMD auto-detection functionality to Blueprint.
- Added FSGHMDTrackingSettings config struct.
- Added the FSGGloveTracer utility class, in order to easily check the left or right glove connectivity or retrieve the connected glove instances.
- Added USGGloveTrackerKismetLibrary which exposes the equivalent C++ functionality to Blueprint.
- Added FSGGloveTrackingSettings config struct.
- Added FSGTrackingSettings config struct.
- Added FSGHandTrackingSettings config struct.
- Added FSGWristTrackingDebuggingSettings config struct.
- Added FSGVirtualHandSettings config struct.
- Added FSGVirtualHandAnimationSettings config struct.
- Added FSGVirtualHandDebuggingSettings config struct.
- Added FSGVirtualHandGrabSettings config struct.
- Added FSGVirtualHandHapticsSettings config struct.
- Added FSGVirtualHandMeshSettings config struct.
- Added FSGVirtualHandPhalangesLengthSettings config struct.
- Added FSGVirtualHandTouchSettings config struct.
- Added USGVirtualHandComponent::OnHandVisibilityChanged() event in order to notify other components/actors whenever the virtual hand mesh appears or disappears (for example, this could happen when a glove is connected/disconnected).
- GetMotionControllerData() has been introduced to the USGVitualHandComponent in order to retrieve the OpenXR-compatible glove data in Unreal's FXRMotionControllerData format.
- Added FSGVirtualHandAnimInstanceProxy::GetMotionControllerData and many more accessor methods usable only by child classes to allow consumption of the data required for manipulating the virtual hand mesh animations.
- GetMotionControllerData() has been introduced to the USGWristTrackerComponent in order to retrieve the OpenXR-compatible glove data in Unreal's FXRMotionControllerData format.
- Added USGGrabComponent::SimulatePhysics() method.
- Added FSGDebugCube.
- Added FSGDebugCubeSettings.
- Added the SenseGloveDebugKismet module in order to allow drawing of debugging, cubes, gizmos, and virtual hands from Blueprint.
- Added USGDebugCubeKismetLibrary in order to expose the FSGDebugCube functionalities to Blueprint.
- Added USGDebugGizmoKismetLibrary in order to expose the FSGDebugGizmo functionalities to Blueprint.
- Added USGDebugVirtualHandKismetLibrary in order to expose the FSGDebugVirtualHand functionalities to Blueprint.
- Added a new static Draw() method overload to DebugGizmo which allows passing an FQuat instead of a FRotator.
- Introduced a new FXRMotionControllerData compatible hand animation system with the ability to take the mesh bone's transforms into account for a more reliable hand animation.
- Introduced a new FXRMotionControllerData compatible wrist tracking system.
- Introduced a new FXRMotionControllerData compatible hand interaction manipulation system.
- Added `ESGHeadMountedDisplayDevice` enum with supported HMDs list.
- Added `ESGViveHMDDetectionPriority` enum in order to choose which headset we attempt to detect between VIVE Focus 3 and VIVE XR Elite as we cannot distinguish them, yet.
- Added the `FSGHMDTracker` utility class, in order to easily gather information about the HMD device at runtime.
- Added `USGHMDTrackerKismetLibrary` which exposes the equivalent C++ HMD auto-detection functionality to Blueprint.
- Added `FSGHMDTrackingSettings` config struct.
- Added the `FSGGloveTracer` utility class, in order to easily check the left or right glove connectivity or retrieve the connected glove instances.
- Added `USGGloveTrackerKismetLibrary` which exposes the equivalent C++ functionality to Blueprint.
- Added `FSGGloveTrackingSettings` config struct.
- Added `FSGTrackingSettings` config struct.
- Added `FSGHandTrackingSettings` config struct.
- Added `FSGWristTrackingDebuggingSettings` config struct.
- Added `FSGVirtualHandSettings` config struct.
- Added `FSGVirtualHandAnimationSettings` config struct.
- Added `FSGVirtualHandDebuggingSettings` config struct.
- Added `FSGVirtualHandGrabSettings` config struct.
- Added `FSGVirtualHandHapticsSettings` config struct.
- Added `FSGVirtualHandMeshSettings` config struct.
- Added `FSGVirtualHandPhalangesLengthSettings` config struct.
- Added `FSGVirtualHandTouchSettings` config struct.
- Added `USGVirtualHandComponent::OnHandVisibilityChanged()` event in order to notify other components/actors whenever the virtual hand mesh appears or disappears (for example, this could happen when a glove is connected/disconnected).
- `GetMotionControllerData()` has been introduced to the `USGVitualHandComponent` in order to retrieve the OpenXR-compatible glove data in Unreal's `FXRMotionControllerData` format.
- Added `FSGVirtualHandAnimInstanceProxy::GetMotionControllerData()` and many more accessor methods usable only by child classes to allow consumption of the data required for manipulating the virtual hand mesh animations.
- `GetMotionControllerData()` has been introduced to the `USGWristTrackerComponent` in order to retrieve the OpenXR-compatible glove data in Unreal's `FXRMotionControllerData` format.
- Added `USGGrabComponent::SimulatePhysics()` method.
- Added `FSGDebugCube`.
- Added `FSGDebugCubeSettings`.
- Added the `SenseGloveDebugKismet` module in order to allow drawing of debugging, cubes, gizmos, and virtual hands from Blueprint.
- Added `USGDebugCubeKismetLibrary` in order to expose the `FSGDebugCube` functionalities to Blueprint.
- Added `USGDebugGizmoKismetLibrary` in order to expose the `FSGDebugGizmo` functionalities to Blueprint.
- Added`USGDebugVirtualHandKismetLibrary` in order to expose the `FSGDebugVirtualHand` functionalities to Blueprint.
- Added a new static `Draw()` method overload to `DebugGizmo` which allows passing an `FQuat` instead of a `FRotator`.
- Introduced a new `FXRMotionControllerData` compatible hand animation system with the ability to take the mesh bone's transforms into account for a more reliable hand animation.
- Introduced a new `FXRMotionControllerData` compatible wrist tracking system.
- Introduced a new `FXRMotionControllerData` compatible hand interaction manipulation system.
- Added the 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.
- Added the SenseGlove grab/touch sockets one-click-setup ability on any Epic-compliant virtual hand mesh from within the Unreal Editor's Content Browser, Skeleton Editor, or Skeletal Mesh Editor by extending the Unreal Editor.
- Added FSGAssetUtils editor-only class.
- Added FSGContentBrowserExtension editor-only class.
- Added FSGPluginStyle editor-only class.
- Added FSGSocketsEditor editor-only class.
- Added FSGSocketsEditorCommands editor-only class.
- Added the FSGInitializationSettings config struct in order to control how the plugin is initialized.
- Introduced the FSGGameUserSettings for managing the Engine Scalability Settings through the SenseGlove plugin in order to change the graphics settings on the fly.
- Added USGGameUserSettingsKismetLibrary in order to allow all the Engine Scalability Settings to be managed from the Blueprint side.
- Added FSGGameUserSettingsSettings config struct.
- Added the SenseGlove console commands: SG_GetEngineScalabilitySettings() and SG_SetEngineScalabilitySettings(Scalability).
- Added SGHardwareBenchmarkingSettings config struct.
- Introduced ESGEngineScalabilitySettings enum.
- Added FSGVirtualHandSettingsOverrides config struct used by the new settings override system.
- Added SGWristTrackingSettingsOverrides config structured by the new settings override system.
- Added support for Android API level 32 in addition to the API level 29.
- Added `FSGAssetUtils` editor-only class.
- Added `FSGContentBrowserExtension` editor-only class.
- Added `FSGPluginStyle` editor-only class.
- Added `FSGSocketsEdito`r editor-only class.
- Added `FSGSocketsEditorCommands` editor-only class.
- Added the `FSGInitializationSettings` config struct in order to control how the plugin is initialized.
- Introduced the `FSGGameUserSettings` for managing the Engine Scalability Settings through the SenseGlove plugin in order to change the graphics settings on the fly.
- Added `USGGameUserSettingsKismetLibrary` in order to allow all the Engine Scalability Settings to be managed from the Blueprint side.
- Added `FSGGameUserSettingsSettings` config struct.
- Added the SenseGlove console commands: `SG_GetEngineScalabilitySettings()` and `SG_SetEngineScalabilitySettings(Scalability)`.
- Added `SGHardwareBenchmarkingSettings` config struct.
- Introduced `ESGEngineScalabilitySettings` enum.
- Added `FSGVirtualHandSettingsOverrides` config struct used by the new settings override system.
- Added `SGWristTrackingSettingsOverrides` config structured by the new settings override system.
- Added support for Android API level `32` in addition to the API level `29`.
- Introduced the SenseGlove Unreal Engine Handbook as an attempt at documenting the SenseGlove Unreal Engine Plugin.
- Merged the `pack` utility branch to the plugin's source code at `/Packager` which adds the SenseGlove Unreal Engine Marketplace Packager v0.4.0-a65bb20 binaries and configurations.
- Merged the `pack` utility branch to the plugin's source code at `/Packager` which adds the SenseGlove Unreal Engine Marketplace Packager `v0.4.0-a65bb20` binaries and configurations.
### Fixed
- Fixed a bug when the virtual hand inside the game is not visible but still collides with other objects inside the scene, mistakenly triggering events like OnGrabStateUpdated and OnTouchStateUpdated.
- Fixed a bug where USGGrabComponent's `bAffectPhysicsState` does not enables physics on its owning actor at `BeginPlay()`.
- Fixed a bug when the virtual hand inside the game is not visible but still collides with other objects inside the scene, mistakenly triggering events like `OnGrabStateUpdated` and `OnTouchStateUpdated`.
- Fixed a bug where `USGGrabComponent`'s `bAffectPhysicsState` does not enables physics on its owning actor at `BeginPlay()`.
- Fixed various wrong Kismet script names and their class exports.
- Fixed the display name for various overloads of the Blueprint-exposed function `Queue Command Vibro Level` to expose sensible display names.
- Some Android UPL tweaks, permission, and build fixes.
- Many other large and small fixes and improvements that might not be listed here.
- A few small bugfixes that have already been backported to the v2.0.x series.
- A few small bugfixes that have already been backported to the `v2.0.x` series.
### Changed
- Now, if bValidateIfDefaultClassesAreSGCompliant option from FSGInitializationSettings is enabled (default) the SenseGlove plugin checks for default SenseGlove-compliant GameMode, GameInstance, etc, at module initialization and tries to set to default, native SenseGlove classes, if any of those default classes are not a SenseGlove or a SenseGlove-derived class.
- The USGSettings has been fully revamped with more customizations added and categorized in a different manner adding many new structs and removing some, in order to have fine-grained control over the various aspects and functionality of the plugin components.
- The USGSettings constructor visibility has been changed from public to private.
- The Settings override system has been overhauled as well affecting how we override settings from the USGVirtualHandComponent and USGWristTrackerComponent.
- The SenseGlove libraries have been updated to v2.104.1-55fddbd2.
- GetHandPose() has been replaced by GetMotionControllerData inside USGVirtualHandComponent (see the relevant entry in the Added and Removed sections).
- Many functions inside USGVirtualHandComponent for retrieving bone names or reference transforms has been renamed to return different data types; e.g. GetLeftHandFingerBoneNames(), GetRightHandFingerBoneNames(), GetLeftHandFingerBoneName(), and GetRightHandFingerBoneName() renamed to GetLeftHandBoneNames(), GetRightHandBoneNames(), GetLeftHandBoneName(), and GetRightHandBoneName() respectively.
- bHiddenInGameIfNoGloveDetected UPROPERTY from USGVirtualHandComponent has been renamed to bVisibleWhenHandDataUnavailable and accordingly all of its getters and setters; bVisibleWhenHandDataUnavailable = false now acts as bHiddenInGameIfNoGloveDetected = true, and vice-versa.
- USGWristTrackerComponent now uses FXRMotionControllerData for wrist tracking instead of calculating the wrist location by calling the SenseGlove API.
- FSGVirtualHandAnimInstanceProxy now relies on FXRMotionControllerData to animate the hands instead of a TMap of bone names and rotations which allows it to also apply the bone locations.
- Now, if `bValidateIfDefaultClassesAreSGCompliant` option from `FSGInitializationSettings` is enabled (default) the SenseGlove plugin checks for default SenseGlove-compliant `GameMode`, `GameInstance`, etc, at module initialization and tries to set to default, native SenseGlove classes, if any of those default classes are not a SenseGlove or a SenseGlove-derived class.
- The`USGSettings` has been fully revamped with more customizations added and categorized in a different manner adding many new structs and removing some, in order to have fine-grained control over the various aspects and functionality of the plugin components.
- The `USGSettings` constructor visibility has been changed from public to private.
- The Settings override system has been overhauled as well affecting how we override settings from the `USGVirtualHandComponent` and `USGWristTrackerComponent`.
- The SenseGlove libraries have been updated to `v2.104.1-55fddbd2`.
- `GetHandPose()` has been replaced by `GetMotionControllerData()` inside `USGVirtualHandComponent` (see the relevant entry in the Added and Removed sections).
- Many functions inside `USGVirtualHandComponent` for retrieving bone names or reference transforms has been renamed to return different data types; e.g. `GetLeftHandFingerBoneNames()`, `GetRightHandFingerBoneNames()`, `GetLeftHandFingerBoneName()`, and `GetRightHandFingerBoneName()` renamed to `GetLeftHandBoneNames()`, `GetRightHandBoneNames()`, `GetLeftHandBoneName()`, and `GetRightHandBoneName()` respectively.
- `bHiddenInGameIfNoGloveDetected` uproperty from `USGVirtualHandComponent` has been renamed to `bVisibleWhenHandDataUnavailable` and accordingly all of its getters and setters; `bVisibleWhenHandDataUnavailable = false` now acts as `bHiddenInGameIfNoGloveDetected = true`, and vice-versa.
- `USGWristTrackerComponent` now uses `FXRMotionControllerData` for wrist tracking instead of calculating the wrist location by calling the SenseGlove API.
- `FSGVirtualHandAnimInstanceProxy` now relies on `FXRMotionControllerData` to animate the hands instead of a `TMap` of bone names and rotations which allows it to also apply the bone locations.
- The new OpenXR animation system now takes into account the mesh bone's transforms for a more reliable hand animation.
- FSGDebugVirtualHand::Draw now accepts a FXRMotionControllerData parameter instead of all WristLocation, WristRotation, JointPositions, and JointRotations parameters.
- FSGDebugVirtualHandSettings has been renamed to FSGVirtualHandDebuggingSettings.
- The value for USGGrabComponent's AttachmentSocketName uproperty now defaults to the value of the plugin's GrabAttachPointSocketName instead of Name_NONE.
- The USGGrabComponent now enables `bGravityEnabled`, `bSimulatePhysics`, and calls `WakeRigidBody` on its owning actor at `BeginPlay()` if `bAffectPhysicsState` is enabled.
- `FSGDebugVirtualHand::Draw()` now accepts a `FXRMotionControllerData` parameter instead of all `WristLocation`, `WristRotation`, `JointPositions`, and `JointRotations` parameters.
- `FSGDebugVirtualHandSettings` has been renamed to `FSGVirtualHandDebuggingSettings`.
- The value for `USGGrabComponent`'s `AttachmentSocketName` uproperty now defaults to the value of the plugin's `GrabAttachPointSocketName` instead of `Name_NONE`.
- The `SGGrabComponent` now enables `bGravityEnabled`, `bSimulatePhysics`, and calls `WakeRigidBody` on its owning actor at `BeginPlay()` if `bAffectPhysicsState` is enabled.
- Updated the Directory Structure section of the main README file to reflect the latest toolchain support status.
- The `/CHANGELOG.md` file has been migrated to `/Handbook/src/overview/changelog.md`
- The `/LICENSE.md` file has been migrated to `/Handbook/src/license/senseglove-unreal-engine-plugin.md`
@@ -226,19 +449,19 @@ This is a minor release focusing mainly on bringing OpenXR-compatible hand track
### Removed
- Dropped support for Unreal Engine 5.1 and Epic Native Toolchain v20 (used to build UE 5.0 and 5.1 Linux dependencies).
- Dropped support for Unreal Engine `5.1` and Epic Native Toolchain `v20` (used to build UE `5.0` and `5.1` Linux dependencies).
- Removed the Allbreaker virtual hand model as it's no longer compatible with the SenseGlove plugin.
- Removed ASGVirtualHandActor as it was experimental and we no longer maintain it and haven't been doing so for a long time.
- Removed FSGVirtualHandAnimInstanceProxy::GetBonesRotations().
- Removed USGVirtualHandComponent::GetHandPose() and it's no longer possible to get the hand pose data from USGVirtualHandComponent as GetHandPose() has been removed. If you need it, you could always use the SenseGlove low-level API to retrieve it from the glove.
- Removed also GetFingerBoneName(), GetFingerBoneRefTransform(), GetFingerBoneRefRotation() and GetFingerBoneRefRotation() from USGVirtualHandComponent.
- Removed some remnants of UE 5.1 and older releases from the C++ code.
- Removed `ASGVirtualHandActor` as it was experimental and we no longer maintain it and haven't been doing so for a long time.
- Removed `FSGVirtualHandAnimInstanceProxy::GetBonesRotations()`.
- Removed `USGVirtualHandComponent::GetHandPose()` and it's no longer possible to get the hand pose data from `USGVirtualHandComponent` as `GetHandPose()` has been removed. If you need it, you could always use the SenseGlove low-level API to retrieve it from the glove.
- Removed also `GetFingerBoneName()`, `GetFingerBoneRefTransform()`, `GetFingerBoneRefRotation()` and `GetFingerBoneRefRotation()` from `USGVirtualHandComponent`.
- Removed some remnants of UE `5.1` and older releases from the C++ code.
- Removed the `pack` utility branch and merge it to the plugin's source code at `/Packager`.
### Known Issues
- With the new OpenXR release, the separation of the real and virtual hand rendering is broken. The reason is the animation system now uses the OpenXR data in the world transforms which yields better animations, but comes at the cost of overriding the the hand position set by the wrist tracker component's position and rotation. If `FXRMotionControllerData` is invalid and `bVisibleWhenHandDataUnavailable` is enabled for example, the system works as expected, since the animation system won't proceed to animate the hand meshes without valid `FXRMotionControllerData`. Since the animation system is only aware of the hand mesh it's animating versus the real hand and virtual hand meshes it means either it should become aware of the physics events like begin and end overlap events and also the real vs virtual hands, or it should resort back to animating the virtual hand meshes in local or component space. This release marks this feature as broken for now until we come up with a reasonable solution in the future.
- The `UXRDeviceVisualizationComponent` provided by Unreal Engine is used in the SGPawn class as ControllerVisualizerLeft and ControllerVisualizerRight for implementing the wrist tracking hardware visualization feature. However, it is not compatible with the new OpenXR system in certain scenarios. For instance, when the motion controllers serve as wrist tracking hardware since the SenseGlove plugin is now introduced to the engine as an `OpenXRHandTracking` system, it causes the UXRDeviceVisualizationComponent to visualize the wrist tracking hardware at coordinates (0.0f, 0.0f, 0.0f) instead of their actual location and rotation in the world. This happens because the component incorrectly registers them as inactive, possibly because it's assumed hand tracking and motion controllers cannot be in use at the same time. Currently, we use this feature solely for debugging, and we have an alternative in the form of wrist-tracking debug gizmos, which can be toggled on or off via the settings system. In future releases, we might remove this feature due to its incompatibility, unless we find a solution to make the `UXRDeviceVisualizationComponent` work with the new system. Alternatively, we may develop our own version of the `UXRDeviceVisualizationComponent`.
- The `UXRDeviceVisualizationComponent` provided by Unreal Engine is used in the `SGPawn` class as `ControllerVisualizerLeft` and `ControllerVisualizerRight` for implementing the wrist tracking hardware visualization feature. However, it is not compatible with the new OpenXR system in certain scenarios. For instance, when the motion controllers serve as wrist tracking hardware since the SenseGlove plugin is now introduced to the engine as an `OpenXRHandTracking` system, it causes the `UXRDeviceVisualizationComponent` to visualize the wrist tracking hardware at coordinates (`0.0f`, `0.0f`, `0.0f`) instead of their actual location and rotation in the world. This happens because the component incorrectly registers them as inactive, possibly because it's assumed hand tracking and motion controllers cannot be in use at the same time. Currently, we use this feature solely for debugging, and we have an alternative in the form of wrist-tracking debug gizmos, which can be toggled on or off via the settings system. In future releases, we might remove this feature due to its incompatibility, unless we find a solution to make the `UXRDeviceVisualizationComponent` work with the new system. Alternatively, we may develop our own version of the `UXRDeviceVisualizationComponent`.
- Although the SenseGlove OpenXR implementation is fully compatible with the `IOpenXRHMD` interface and the `FOpenXRHMD` `XRTrackingSystem`, it is not compatible with the `FOculusXRHMD` backend provided by the Meta XR plugin. The same issue likely applies to the VIVE OpenXR plugin. So, if these plugins are enabled in your project, the SenseGlove OpenXR will not function as intended, effectively breaking the plugin's functionality. It seems these plugins are necessary in order to make the fallback to the hand-tracking feature work on Android. While we may add support and compatibility with Meta XR and VIVE OpenXR plugins in the future, for the time being, if your project requires these plugins, we advise continuing with the `v2.0.x` release of the SenseGlove Unreal Engine plugin until this issue is addressed.
## [2.0.8] - 2024-07-15
@@ -247,23 +470,23 @@ This is a bugfix release that contains a somewhat important bugfix backported fr
### Fixed
- Fix a bug where the SGPawn right-hand grab colliders' default size is mistakenly set to the default value for the left-hand grab colliders at CDO initialization time.
- Fix a bug where the `SGPawn` right-hand grab colliders' default size is mistakenly set to the default value for the left-hand grab colliders at CDO initialization time.
## [2.0.7] - 2024-05-29
This is a bugfix release with no actual plugin code changes, only fixing issues with binary assets incompatible with UE versions earlier than 5.4.
This is a bugfix release with no actual plugin code changes, only fixing issues with binary assets incompatible with UE versions earlier than `5.4`.
### Fixed
- Make the Allbreaker assets compatible with UE5.1+ again as the v2.0.5 update breaks compatibility with UE versions earlier than 5.4, thus leaving the engine unable to load those assets.
- Make the Allbreaker assets compatible with UE5.1+ again as the `v2.0.5` update breaks compatibility with UE versions earlier than `5.4`, thus leaving the engine unable to load those assets.
## [2.0.6] - 2024-05-29
This is a bugfix release with no actual plugin code changes, only removing development/test assets from UE 5.3 that were never meant to be shipped.
This is a bugfix release with no actual plugin code changes, only removing development/test assets from UE `5.3` that were never meant to be shipped.
### Removed
- Removed the dev/test virtual hand models that leaked into the 5.3 branch.
- Removed the dev/test virtual hand models that leaked into the `5.3` branch.
### Fixed
@@ -282,21 +505,21 @@ This is a bugfix release with no actual plugin's code change.
### Fixed
- Fix our in-house Unreal Engine Marketplace submission tool's configurations where the Content folder (containing the Allbreaker hand model) is mistakenly ignored during the submission. This release reintroduces the Virtual Hand Model and its material missing from the previous release.
- Fix the SenseGlove.uproject's wrong versioning submitted to the Unreal Engine Marketplace.
- Fix the `SenseGlove.uproject`'s wrong versioning submitted to the Unreal Engine Marketplace.
## [2.0.3] - 2024-05-15
This is a bugfix release addressing mostly RunUAT build issues on Unreal Engine 5.4.
This is a bugfix release addressing mostly RunUAT build issues on Unreal Engine `5.4`.
### Fixed
- Fix UE 5.4 RunUAT build issue: "Asking CppCompileEnvironment for a single Architecture, but it has multiple Architectures (arm64, x64)", affecting SenseGloveConnectImpl and SenseGloveCoreImpl modues.
- Improved target platform detection when building SenseGloveConnectImpl and SenseGloveCoreImpl modules and also distinguishing the x64 builds from arm64 on Microsoft Windows.
- Fix other UE 5.4 RunUAT build issues, mostly caused by missing headers.
- Fix UE `5.4` RunUAT build issue: "Asking CppCompileEnvironment for a single Architecture, but it has multiple Architectures (arm64, x64)", affecting `SenseGloveConnectImpl` and `SenseGloveCoreImpl` modues.
- Improved target platform detection when building `SenseGloveConnectImpl` and `SenseGloveCoreImpl` modules and also distinguishing the `x64` builds from `arm64` on Microsoft Windows.
- Fix other UE `5.4` RunUAT build issues, mostly caused by missing headers.
### Removed
- Removed support for Android armeabi-v7a and x86 architectures as they are no longer supported by the supported engine versions.
- Removed support for Android `armeabi-v7a` and `x86` architectures as they are no longer supported by the supported engine versions.
## [2.0.2] - 2024-04-25
@@ -304,11 +527,11 @@ This is a patch release with no code changes.
### Added
- Introduce official Unreal Engine 5.4 support to the Unreal Engine Marketplace.
- Introduce official Unreal Engine `5.4` support to the Unreal Engine Marketplace.
### Changed
- Updated the Platform Support Matrix with the latest changes. This is the last release to support Unreal Engine 5.1 as we no longer are able to push updates for this release to the Unreal Engine Marketplace. The v2.0.1 release for Unreal Engine 5.1 can be obtained from the Unreal Engine Marketplace, and v2.0.2 through our Microsoft Azure DevOps repositories. Please note that there are no actual code changes between these two releases and in terms of functionality they are almost identical.
- Updated the Platform Support Matrix with the latest changes. This is the last release to support Unreal Engine `5.1` as we no longer are able to push updates for this release to the Unreal Engine Marketplace. The `v2.0.1` release for Unreal Engine `5.1` can be obtained from the Unreal Engine Marketplace, and `v2.0.2` through our Microsoft Azure DevOps repositories. Please note that there are no actual code changes between these two releases and in terms of functionality they are almost identical.
## [2.0.1] - 2024-04-15
@@ -316,15 +539,15 @@ This is a bugfix release.
### Fixed
- Fix a bug inside both SGVirtualHandComponent and SGWristTrackerComponent where the connected glove's UObject instance gets destroyed and re-instantiated every frame. With this fix now the glove instance will be created or destroyed only when a glove connects to or disconnects from the system.
- Fix a bug inside both `SGVirtualHandComponent` and `SGWristTrackerComponent` where the connected glove's `UObject` instance gets destroyed and re-instantiated every frame. With this fix now the glove instance will be created or destroyed only when a glove connects to or disconnects from the system.
- Update the outdated Platform Support Matrix and its remarks section to reflect the latest status information.
- Fix the wrong header file description sections for the header files inside `SenseGloveKismet/Public/SGKismet/`.
### Changed
- SenseGlove libraries have been updated to v2.102.0-35d4de3f.
- Together, SenseGlove libraries v2.102.0-35d4de3f and SenseCom v1.6.1 remove the need to call ResetCalibration every time and are able to store and load calibration profiles from disk.
- SesenGloveBackend module is no longer calling FSGHandLayer::ResetCalibration on every backend initialization.
- SenseGlove libraries have been updated to `v2.102.0-35d4de3f`.
- Together, SenseGlove libraries `v2.102.0-35d4de3f` and SenseCom `v1.6.1` remove the need to call ResetCalibration every time and are able to store and load calibration profiles from disk.
- SesenGloveBackend module is no longer calling `FSGHandLayer::ResetCalibration()` on every backend initialization.
## [2.0.0] - 2024-03-22
@@ -335,37 +558,37 @@ This is the second major release of the SenseGlove Unreal Engine Plugin adding s
- Added support for the SenseGlove Nova 2 devices.
- Added support for Quest 3 controllers.
- Various classes have been added to the API in order to implement the new functionalities and features from the latest upstream SenseGlove libraries.
- Added initial support for the upcoming Unreal Engine 5.4 release.
- Added initial support for the upcoming Unreal Engine `5.4` release.
- Added a pair of default production-ready virtual hand meshes for the left and right hands, courtesy of [Allbreaker LLC Columbia](https://www.allbreaker.co/). For usage and redistribution, please consult the [LICENSE-THIRD-PARTY.md](LICENSE-THIRD-PARTY.md) file.
### Fixed
- A few critical bug fixes that have already been backported to the v1.x.x series through v1.9.3 to v1.9.8 releases.
- Revamped the way we do FVector <-> SGVect3D, FQuat <-> SGQuat, and SenseGlove <-> Unreal Engine angles conversions in order to properly translate between the SenseGlove and Unreal Engine coordinate systems.
- A few critical bug fixes that have already been backported to the `v1.x.x` series through `v1.9.3` to `v1.9.8` releases.
- Revamped the way we do `FVector` <-> `SGVect3D`, `FQuat` <-> `SGQuat`, and SenseGlove <-> Unreal Engine angles conversions in order to properly translate between the SenseGlove and Unreal Engine coordinate systems.
- Allow the C++ compiler the opportunity to perform RVO/NRVO if applicable.
- Fix the modules' order inside the .uplugin file.
- Fix a build issue inside FSGArrayUtils::FromStdVector introduced by newer MVSC updates due to stricter implicit uint64 to int32 conversions.
- Fix a build issues inside FSGArrayUtils when performing non-Unity builds due to the missing <string> header.
- Fix other build issues in USGDevice, USGNovaGloveSensorData, FSGDeviceImpl, and FSGSenseGloveVarsImpl when performing non-Unity builds due to the missing relevant headers.
- Fix the modules' order inside the `.uplugin` file.
- Fix a build issue inside `FSGArrayUtils::FromStdVector()` introduced by newer MVSC updates due to stricter implicit `uint64` to `int32` conversions.
- Fix a build issues inside `FSGArrayUtils` when performing non-Unity builds due to the missing `<string>` header.
- Fix other build issues in `USGDevice`, `USGNovaGloveSensorData`, `FSGDeviceImpl`, and `FSGSenseGloveVarsImpl` when performing non-Unity builds due to the missing relevant headers.
- Fix changelog formatting.
- Some other improverment and fixes.
### Changed
- SenseGlove libraries have been updated to v2.101.12-62b1be11.
- SenseGlove libraries have been updated to `v2.101.12-62b1be11`.
- The SenseGlove Unreal Engine Plugin now declares the OpenXR plugin as a dependency, so that the OpenXR plugin will be enabled automatically as soon as the SenseGlove Unreal Engine Plugin gets enabled.
- Various classes and parts of the API have been changed in order to reflect and adhere to upstream SenseGlove libraries.
- Reverse the Platform Support Matrix order from newer Unreal Engine versions to the older ones.
- Clarify the engine support policy in the main readme file by adding the corresponding references from the Epic Marketplace Guidelines and a URL to their guidelines page.
- The SGTouchComponent uproperties BuzzDuration and BuzzLevel now utilize different different names in order to correspond to the underlying API changes. They have been renamed to VibrotactileDuration and VibrotacktileLevel.
- The SGTouchComponent uproperties ForceFeedbackLevel and BuzzLevel (now VibrotacktileLevel) parameters type have changed from int32 to float with the value range varying between 0.0f to 1.0f instead of 1 to 100 in order to correspond to the underlying API changes.
- The SGVirtualHandComponent now assumes the default grab point's name as GenericGrabPoint instead of GrabPoint as default if not specified in the Unreal Blueprint Editor.
- The SGPawn on UE 5.2+ now utilizes UXRDeviceVisualizationComponent in order to properly display the controller meshes shipped with Unreal Engine's OpenXR plugin, or a user-provided mesh. On UE 5.1 this could still be set on the WristTrackerLeft and WristTrackerRight components. Please note that despite the fact that on UE 5.2+ it's still possible to utilize the WristTrackerLeft and WristTrackerRight for setting the controller meshes, this has been deprecated in UE 5.2+ and is no longer supported.
- The `SGTouchComponent` uproperties BuzzDuration and BuzzLevel now utilize different different names in order to correspond to the underlying API changes. They have been renamed to `VibrotactileDuration` and `VibrotactileLevel`.
- The `SGTouchComponent` uproperties ForceFeedbackLevel and BuzzLevel (now `VibrotactileLevel`) parameters type have changed from `int32` to `float` with the value range varying between `0.0f` to `1.0f` instead of `1` to `100` in order to correspond to the underlying API changes.
- The `SGVirtualHandComponent` now assumes the default grab point's name as `GenericGrabPoint` instead of `GrabPoint` as default if not specified in the Unreal Blueprint Editor.
- The `SGPawn` on UE `5.2+` now utilizes `UXRDeviceVisualizationComponent` in order to properly display the controller meshes shipped with Unreal Engine's OpenXR plugin, or a user-provided mesh. On UE `5.1` this could still be set on the `WristTrackerLeft` and `WristTrackerRight` components. Please note that despite the fact that on UE `5.2+` it's still possible to utilize the `WristTrackerLeft` and `WristTrackerRight` for setting the controller meshes, this has been deprecated in UE `5.2+` and is no longer supported.
### Removed
- Various classes and parts of the API have been removed in order to reflect and adhere to upstream SenseGlove libraries.
- Removed the redundant SGIC_int32_Ref interop type.
- Removed the redundant `SGIC_int32_Ref` interop type.
## [1.9.8] - 2024-03-12
@@ -374,14 +597,14 @@ This is a bugfix release that contains bugfixes backported from the next major r
### Fixed
- Fix a bug where the right-hand mesh is always hidden inside the game no matter whether the right glove is connected or not.
- Fix a crash inside the USGHandPose::FromHandAngles method.
- Some performance optimizations by utilizing MoveTemp in return statements.
- Fix a crash inside the `USGHandPose::FromHandAngles()` method.
- Some performance optimizations by utilizing `MoveTemp` in return statements.
- Some improvements applied to the source code.
- Some other minor fixes.
### Changed
- The BonesRotations TMap is no longer a public field of FSGVirtualHandAnimInstanceProxy and instead could be retrieved by calling the GetBonesRotations() method.
- The BonesRotations TMap is no longer a public field of `FSGVirtualHandAnimInstanceProxy` and instead could be retrieved by calling the `GetBonesRotations()` method.
## [1.9.7] - 2024-02-18
@@ -389,8 +612,8 @@ This is a bugfix release that contains bugfixes backported from the next major r
### Fixed
- Fix various bugs inside the SGPlayerController which occur when the thumb and pinky fingers are simultaneously touching different SGTouchComponents, or only one of them is in touch with such a component. In this case pinky's buzz and force-feedback levels are determined from the SGTouchComponent that is in collision with the thumb instead of the one that is touched by the pinky. Or, the pinky could ignore the buzz and force-feedback level if the thumb is not in collision with an SGTouchComponent. Or, the pinky could have reacted with a buzz or force feedback while only the thumb is in contact with an SGTouchComponent.
- Fix the BuzzDuration UPROPERTY range in order not to get clamped at 100.0f and also use float values for ClampMin and UIMin specifiers instead of integer values.
- Fix various bugs inside the `SGPlayerController` which occur when the thumb and pinky fingers are simultaneously touching different `SGTouchComponents`, or only one of them is in touch with such a component. In this case pinky's buzz and force-feedback levels are determined from the `SGTouchComponent` that is in collision with the thumb instead of the one that is touched by the pinky. Or, the pinky could ignore the buzz and force-feedback level if the thumb is not in collision with an `SGTouchComponent`. Or, the pinky could have reacted with a buzz or force feedback while only the thumb is in contact with an `SGTouchComponent`.
- Fix the `BuzzDuration` uproperty range in order not to get clamped at `100.0f` and also use `float` values for `ClampMin` and `UIMin` specifiers instead of integer values.
## [1.9.6] - 2024-02-14
@@ -398,7 +621,7 @@ This is a bugfix release.
### Fixed
- Fix a few critical bugs inside the NovaGlove class where the higher levels of the API including constructors, Parse, and NewNovaGlove methods mistakenly instantiate a SenseGloveImpl class instead of a NovaGloveImpl class.
- Fix a few critical bugs inside the `NovaGlove` class where the higher levels of the API including constructors, Parse, and `NewNovaGlove` methods mistakenly instantiate a `SenseGloveImpl` class instead of a `NovaGloveImpl` class.
## [1.9.5] - 2024-02-09
@@ -406,7 +629,7 @@ This is a bugfix release.
### Fixed
- Fix a wrong type-casting inside SGDeviceModel::ParseFirmware where OutMainVersion and OutSubVersion arguments are getting passed to the lower levels of the API. This could potentially result in a segfault at the FFI boundary between lower and higher levels of the API.
- Fix a wrong type-casting inside `SGDeviceModel::ParseFirmware()` where `OutMainVersion` and `OutSubVersion` arguments are getting passed to the lower levels of the API. This could potentially result in a segfault at the FFI boundary between lower and higher levels of the API.
## [1.9.4] - 2024-02-08
@@ -414,7 +637,7 @@ This is a bugfix release addressing mostly Blueprint API issues with ABI breakin
### Fixed
- Fix the Blueprint Parse function signature for the NovaGloveInfoKismetLibrary where the OutGloveInfo passed by the caller was never actually assigned as it was not getting passed by reference.
- Fix the Blueprint Parse function signature for the `NovaGloveInfoKismetLibrary` where the `OutGloveInfo` passed by the caller was never actually assigned as it was not getting passed by reference.
- Changelog formatting.
## [1.9.3] - 2024-02-03
@@ -423,15 +646,15 @@ This is a hotfix release addressing a few critical issues that might result in c
### Fixed
- Fix a potential memory corruption inside one of the SGBasicHandModel constructors where the StartPositions parameter gets passed as the StartRotations parameter to lower levels of the API.
- Fix a potential memory corruption inside one of the SGSenseGloveInfo constructors where the StartPositions parameter gets passed as the Functions parameter to lower levels of the API.
- Fix a potential memory corruption where inside the SGHapticGloveCalibrationSequence::GetCurrentInstruction method, the return statement of the function is getting assigned to the const parameter NextStepKey, thus the return statement of the function will always be empty as well.
- Fix a potential memory corruption where inside one of the overloads of the SGSenseGloveImpl::GetGlovePose method, the out parameter of the method is getting passed as the SensorData parameter to the lower levels of the API.
- Fix multiple Equals methods for a few classes such as SGInterpolationSet, SGNovaGloveHandProfile, SGNovaGloveInfo, SGSenseGloveHandProfile, SenseGloveInfo, SenseGlovePose, where the Equal method compares the current instance against itself instead of the other instance passed to as the parameter to the method.
- Removed a redundant code statement inside the SGNovaGloveImpl::GetSubFirmwareVersion method.
- Fix a potential memory corruption inside one of the `SGBasicHandModel` constructors where the StartPositions parameter gets passed as the StartRotations parameter to lower levels of the API.
- Fix a potential memory corruption inside one of the `SGSenseGloveInfo` constructors where the StartPositions parameter gets passed as the Functions parameter to lower levels of the API.
- Fix a potential memory corruption where inside the `SGHapticGloveCalibrationSequence::GetCurrentInstruction()` method, the return statement of the function is getting assigned to the const parameter `NextStepKey`, thus the return statement of the function will always be empty as well.
- Fix a potential memory corruption where inside one of the overloads of the `SGSenseGloveImpl::GetGlovePose()` method, the out parameter of the method is getting passed as the SensorData parameter to the lower levels of the API.
- Fix multiple Equals methods for a few classes such as `SGInterpolationSet`, `SGNovaGloveHandProfile`, `SGNovaGloveInfo`, `SGSenseGloveHandProfile`, `SenseGloveInfo`, `SenseGlovePose`, where the Equal method compares the current instance against itself instead of the other instance passed to as the parameter to the method.
- Removed a redundant code statement inside the `SGNovaGloveImpl::GetSubFirmwareVersion()` method.
- Some minor const correctness fixes.
- Some other minor code fixes and improvements.
- Fix the wrong version numbers inside the paltform support matrix and the main .uplugin file.
- Fix the wrong version numbers inside the paltform support matrix and the main `.uplugin` file.
- Minor changelog fixes.
- Bumped the copyright years.
@@ -443,69 +666,69 @@ This is a hotfix release addressing a few critical issues that might result in c
### Fixed
- A bug where the released actor is going to be NULL whenever the OnActorReleased event fires.
- A bug where the released actor is going to be `NULL` whenever the `OnActorReleased` event fires.
## [1.9.1] - 2023-10-11
### Fixed
- Add the missing Unreal Engine C++ header to files that rely on the ENGINE\_\*\_VERSION macros in order to fix the Epic Store build failures on UE 5.3.
- Add the missing Unreal Engine C++ header to files that rely on the `ENGINE_*_VERSION` macros in order to fix the Epic Store build failures on UE `5.3`.
## [1.9.0] - 2023-10-10
### Changed
- The BlueprintImplementableEvent UFUNCTION specifier for the OnGrabStateUpdated, OnTouchStateUpdated, OnActorGrabbed, OnActorReleased, OnActorBeginTouch, and OnActorEndTouch events have been changed to BlueprintNativeEvent in order to allow them to be implemented from the child C++ classes as well. This won't break any existing Blueprint code that relies on the previous BlueprintImplementableEvent signature.
- The `BlueprintImplementableEvent` ufunction specifier for the `OnGrabStateUpdated`, `OnTouchStateUpdated`, `OnActorGrabbed`, `OnActorReleased`, `OnActorBeginTouch`, and `OnActorEndTouch` events have been changed to BlueprintNativeEvent in order to allow them to be implemented from the child C++ classes as well. This won't break any existing Blueprint code that relies on the previous BlueprintImplementableEvent signature.
### Fixed
- Add a missing release note entry for the v1.8.0 release to the changelog file.
- Add a missing release note entry for the `v1.8.0` release to the changelog file.
## [1.8.0] - 2023-10-10
### Added
- Introduced new SGPawn events: OnActorGrabbed, OnActorReleased, OnActorBeginTouch, and OnActorEndTouch.
- Exposed OnGrabStateUpdated, OnTouchStateUpdated, OnActorGrabbed, OnActorReleased, OnActorBeginTouch, and OnActorEndTouch events to Blueprint as BlueprintImplementableEvent.
- Introduced new `SGPawn` events: `OnActorGrabbed`, `OnActorReleased`, `OnActorBeginTouch`, and `OnActorEndTouch`.
- Exposed `OnGrabStateUpdated`, `OnTouchStateUpdated`, `OnActorGrabbed`, `OnActorReleased`, `OnActorBeginTouch`, and `OnActorEndTouch` events to Blueprint as `BlueprintImplementableEvent`.
### Fixed
- Fix a bug where the OnTouchStateUpdated event is mistakenly triggered instead of the OnGrabStateUpdated when the right thumb fingertip grab collider overlaps with a grabbable actor.
- Fix the DECLARE_EVENT macro signature for OnGrabStateUpdated and OnTouchStateUpdated events.
- Fix a bug where the `OnTouchStateUpdated` event is mistakenly triggered instead of the `OnGrabStateUpdated` when the right thumb fingertip grab collider overlaps with a grabbable actor.
- Fix the `DECLARE_EVENT` macro signature for `OnGrabStateUpdated` and `OnTouchStateUpdated` events.
## [1.7.0] - 2023-09-14
### Added
- Introduce SGGameInstance, a customized SenseGlove game instance for future use.
- Added the new SenseGloveBackend and SenseGloveBackendKismet modules.
- Added SG_CPP20 C++ macro for C++20 detection, which is now default from UE 5.3 onwards.
- Added SG_CAPTURE_THIS C++ macro as a workaround for error C4855: implicit capture of 'this' via '[=]' is deprecated in /std:c++20 in order to build the same lambda captures without extra #ifdefs on all supported engine versions.
- Introduce `SGGameInstance`, a customized SenseGlove game instance for future use.
- Added the new `SenseGloveBackend` and `SenseGloveBackendKismet` modules.
- Added `SG_CPP20` C++ macro for C++20 detection, which is now default from UE `5.3` onwards.
- Added `SG_CAPTURE_THIS` C++ macro as a workaround for `error C4855: implicit capture of 'this' via '[=]' is deprecated in /std:c++20` in order to build the same lambda captures without extra `#ifdef`s on all supported engine versions.
### Changed
- SenseGlove libraries have been updated to v2.12.0-19c9854.
- SGCoreImpl/SGPlatform has been moved to SGBuildHacks/SGPlatform.
- SenseGlove libraries have been updated to `v2.12.0-19c9854`.
- `SGCoreImpl`/`SGPlatform` has been moved to `SGBuildHacks`/`SGPlatform`.
### Fixed
- Proper initialization of the SenseGlove backend in order to fix a bug in certain situations where SGConnect::Init() gets called every frame.
- Proper initialization of the SenseGlove backend in order to fix a bug in certain situations where `SGConnect::Init()` gets called every frame.
- Some other minor fixes and improvements.
## [1.6.1] - 2023-08-14
### Fixed
- Fix Unreal Engine 5.0 build issues.
- Fix Unreal Engine `5.0` build issues.
- Minor documentation fixes.
## [1.6.0] - 2023-08-14
### Added
- Added support for the upcoming Unreal Engine 5.3.
- Added support for the upcoming Unreal Engine `5.3`.
- Now, the hand's velocity is applied to grabbed actors after being released from the hand.
- Introduce the real hands to the SenseGlove module (SGPawn) API.
- Introduce the real hands to the `SenseGlove` module (`SGPawn`) API.
- Added separation of the virtual and real hand rendering.
### Fixed
@@ -515,7 +738,7 @@ This is a hotfix release addressing a few critical issues that might result in c
### Changed
- SenseGlove libraries have been updated to v2.11.0-b775a05.
- SenseGlove libraries have been updated to `v2.11.0-b775a05`.
## [1.5.3] - 2023-07-19
@@ -527,7 +750,7 @@ This is a hotfix release mostly addressing Android Bluetooth performance issues.
### Changed
- SenseGlove libraries have been updated to v2.10.1-3b0e7c9.
- SenseGlove libraries have been updated to `v2.10.1-3b0e7c9`.
## [1.5.2] - 2023-07-19
@@ -535,7 +758,7 @@ This is a hotfix release mostly addressing Android-related issues.
### Fixed
- Fix a build issue with Android shipping builds due to sgconnect.jar not getting copied automatically in the AFSProject which is compiled for shipping builds when AndroidFileServer (AFS) is enabled.
- Fix a build issue with Android shipping builds due to `sgconnect.jar` not getting copied automatically in the AFSProject which is compiled for shipping builds when `AndroidFileServer (AFS)` is enabled.
- Minor changelog fixes and some source code formatting fixes.
## [1.5.1] - 2023-07-13
@@ -555,7 +778,7 @@ This release breaks ABI/API compatibility with the previous versions in some are
- Added HTC VIVE Focus 3 positional tracking hardware enum.
- Added support for the Meta Quest Pro, HTC VIVE, and HTC VIVE Focus 3 positional tracking hardware.
- Added two options to the wrist tracker settings (to the global plugin settings and the overrides in the wrist tracker component) in order to be able to specify a custom motion source for the left and right hands, so that it allows SteamVR-based trackers such as HTC VIVE or HTC VIVE Focus 3 to operate with the SGPawn.
- Added two options to the wrist tracker settings (to the global plugin settings and the overrides in the wrist tracker component) in order to be able to specify a custom motion source for the left and right hands, so that it allows SteamVR-based trackers such as HTC VIVE or HTC VIVE Focus 3 to operate with the `SGPawn`.
### Fixed
@@ -563,12 +786,12 @@ This release breaks ABI/API compatibility with the previous versions in some are
### Changed
- Fully refactored the top-level configurations in the settings system into USTRUCTs.
- SenseGlove libraries have been updated to v2.10.0-12133ac.
- Fully refactored the top-level configurations in the settings system into ustructs.
- SenseGlove libraries have been updated to `v2.10.0-12133ac`.
### Removed
- Dropped support for the Epic Native Toolchain v19, MSVC v141 (Visual Studio 2017), and thus Unreal Engine 4.27 as it has been marked as deprecated since v1.4.x.
- Dropped support for the Epic Native Toolchain `v19`, MSVC `v141` (Visual Studio 2017), and thus Unreal Engine `4.27` as it has been marked as deprecated since `v1.4.x`.
- Removed any kind of support for Oculus Touch (Oculus Rift S and Oculus Quest 1) positional tracking hardware, thus the enum as well.
- Removed any kind of support for Pico Neo 2 positional tracking hardware, thus the enum as well.
- Removed any kind of support for Pico Neo 3 positional tracking hardware, thus the enum as well.
@@ -588,7 +811,7 @@ This is a hotfix release addressing a few critical issues.
### Fixed
- Fix build issues with certain compilers when the Unreal Engine version is older than 5.2.
- Fix build issues with certain compilers when the Unreal Engine version is older than `5.2`.
- Reintroduced the Virtual Hand and the Wrist Tracker debug gizmos which have temporarily been disabled due to a bug in the settings system.
- Some minor changelog fixes.
@@ -611,19 +834,19 @@ This release breaks ABI/API compatibility with the previous versions.
### Added
- Added support for the stable release of Unreal Engine 5.2 (the preview release has been supported since v1.2.0).
- Added Linux AArch64 platform support.
- Added support for the stable release of Unreal Engine `5.2` (the preview release has been supported since `v1.2.0`).
- Added Linux `AArch64` platform support.
- Added a new Grab component that can turn any actor into a grabbable object.
- Added a new Touch component that enables haptic feedback such as Buzz and Force-Feedback commands.
- Added an optional feature in order to automatically stop all haptics on the EndPlay event, wherever the virtual hand component is used. By default, it's enabled.
### Fixed
- Fix Blueprint signatures for USGVirtualHandComponentKismetLibrary and make all the Blueprint exposed functions static.
- Fix Blueprint signatures for `USGVirtualHandComponentKismetLibrary` and make all the Blueprint exposed functions static.
### Changed
- SenseGlove libraries have been updated to v2.7.1-965f90c with support for Linux AArch64.
- SenseGlove libraries have been updated to `v2.7.1-965f90c` with support for Linux `AArch64`.
- The Virtual Hand and the Wrist Tracker debug gizmos (the intended use is only for SenseGlove developers for really low-level stuff; thus won't affect the users of the plugin at all) have been disabled and will be ignored due to an esoteric bug in the settings systems which has been scheduled to be fixed in the future releases.
### Removed
@@ -632,7 +855,7 @@ This release breaks ABI/API compatibility with the previous versions.
### Deprecated
- This is the last release to support Unreal Engine 4.27 and please keep in mind that the current release is not obtainable through the Unreal Engine Marketplace. The latest published version on the Marketplace for 4.27 is v1.3.1. Per Epic's Marketplace policy regarding Code Plugins, 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.
- This is the last release to support Unreal Engine `4.27` and please keep in mind that the current release is not obtainable through the Unreal Engine Marketplace. The latest published version on the Marketplace for `4.27` is `v1.3.1`. Per Epic's Marketplace policy regarding Code Plugins, we are only able to distribute or update the SenseGlove plugin for the last three 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.
## [1.3.1] - 2023-04-28
@@ -658,9 +881,9 @@ This release breaks ABI/API compatibility with the previous versions in addition
### Changed
- Breaking API/ABI changes in the Settings and the main SenseGlove module due to some settings refactoring.
- Breaking API/ABI changes in the Settings and the main `SenseGlove` module due to some settings refactoring.
- Breaking changes in the SenseGlove/Unreal coordinates systems conversions due to underlying changes in the SenseGlove Core Libraries.
- SenseGlove libraries have been updated to v2.6.0-aac3d56.
- SenseGlove libraries have been updated to `v2.6.0-aac3d56`.
## [1.2.1] - 2023-03-30
@@ -674,29 +897,29 @@ This release breaks ABI/API compatibility with the previous versions.
### Added
- Android / Oculus on-device glove calibration.
- Android/Oculus on-device glove calibration.
- Introduced the animated Virtual Hand Model (as a set of virtual hand and wrist tracker components and an actor) with in-editor animation availability.
- Introduced SGPawn, SGPlayerController, SGGameModeBase, etc classes.
- Added an internal SenseGloveCoreTypes module in order to share common SenseGloveCore types between various modules.
- Segregated Android binaries for NDK r21e (UE 4.27 and 5.0) and r25b (UE 5.1, 5.2).
- Introduced `SGPawn`, `SGPlayerController`, `SGGameModeBase`, etc classes.
- Added an internal `SenseGloveCoreTypes` module in order to share common SenseGloveCore types between various modules.
- Segregated Android binaries for NDK `r21e` (UE `4.27` and `5.0`) and `r25b` (UE `5.1`, `5.2`).
- Fully functional and stable Linux development support.
- Fully functional and stable Unreal Engine 5.2 preview support has been added.
- Fully functional and stable Unreal Engine `5.2` preview support has been added.
- Added a Plugin's settings manager and two new modules SenseGloveSettings and SenseGloveSettingsKismet.
### Changed
- SenseGlove libraries have been updated to the Linux-aware version: v2.5.0-8069342.
- SenseGlove libraries have been updated to the Linux-aware version: `v2.5.0-8069342`.
- API has changed to use degrees instead of radians.
- SGCoordinates utility class name has been changed to SGAngles and now the plugin API uses degrees in contrast of SenseGlove libraries by default.
- SGCoordinates utility class name has been changed to `SGAngles` and now the plugin API uses degrees in contrast of SenseGlove libraries by default.
- Migrate common nested array types into the SenseGloveTypes module from the SenseGloveCore module.
### Removed
- Removed a few thousand lines of archaic pre-public-release dead code.
- Dropped Android NDK r21b binaries used by the older engine versions.
- Purged the dead code for dropped engine versions by v1.1.1 (4.22, 4.23, 4.24, 4.25, and 4.26) that carried over to the current version.
- Removed redundant SGConnectImpl/SGPlatform.
- Removed redundant SGTypes/SGConnectTypes.
- Dropped Android NDK `r21b` binaries used by the older engine versions.
- Purged the dead code for dropped engine versions by `v1.1.1` (`4.22`, `4.23`, `4.24`, `4.25`, and `4.26`) that carried over to the current version.
- Removed redundant `SGConnectImpl`/`SGPlatform`.
- Removed redundant `SGTypes`/`SGConnectTypes`.
### Known Issues
@@ -706,8 +929,8 @@ This release breaks ABI/API compatibility with the previous versions.
### Added
- Initial support for the upcoming Unreal Engine 5.2.
- Add support for Android armeabi-v7a with neon, x86-64, and x86 builds in addition to arm64-v8a.
- Initial support for the upcoming Unreal Engine `5.2`.
- Add support for Android `armeabi-v7a` with `neon`, `x86-64`, and `x86` builds in addition to `arm64-v8a`.
### Fixed
@@ -716,7 +939,7 @@ This release breaks ABI/API compatibility with the previous versions.
### Changed
- Bump SenseGlove libraries to v2.1.2-95ec6e7.
- Bump SenseGlove libraries to `v2.1.2-95ec6e7`.
## [1.1.0] - 2023-02-03
@@ -724,7 +947,7 @@ This release breaks ABI/API compatibility with the previous versions.
- Whitelist Android as a target platform.
- Introduce Android support.
- Add third-party library SGConnect for Android v1.1.0.
- Add third-party library SGConnect for Android `v1.1.0`.
### Fixed
@@ -732,12 +955,12 @@ This release breaks ABI/API compatibility with the previous versions.
### Changed
- SGConnect and SGCore libraries have been updated to v2.1.1-0569c74.
- SGConnect and SGCore libraries have been updated to `v2.1.1-0569c74`.
### Removed
- Removed the enum utils class due to ANY_PACKAGE deprecation warnings in Unreal Engine 5.1.
- Support for older versions of the Engine (namely, 4.22, 4.23, 4.24, 4.25, and 4.26) has been dropped.
- Removed the enum utils class due to `ANY_PACKAGE` deprecation warnings in Unreal Engine `5.1`.
- Support for older versions of the Engine (namely, `4.22`, `4.23`, `4.24`, `4.25`, and `4.26`) has been dropped.
## [1.0.4] - 2022-12-02
@@ -745,11 +968,11 @@ This is a minor release focusing mostly on adherence to the Unreal Engine Market
### Added
- Added support for MSVC 2017
- Added support for MSVC 2017.
### Changed
- Updated SenseGlove libraries (SGCore/SGConnect) to v2.0.4.
- Updated SenseGlove libraries (SGCore/SGConnect) to `v2.0.4`.
## [1.0.3] - 2022-11-29
@@ -765,7 +988,7 @@ This is a minor release focusing on adherence to the Unreal Engine Marketplace G
### Added
- Added the newly acquired Unreal Engine Market Place Offer ID to the .uplugin file.
- Added the newly acquired Unreal Engine Market Place Offer ID to the `.uplugin` file.
- List the dotfiles inside the FilterPlugin.ini file as well.
- Add the copyright notice to the source files missing it.
- Add the SenseGlove SDK license to the third-party license file.
+111 -61
View File
@@ -62,6 +62,10 @@
└── ThirdParty (3rd-party dependencies)
├── android (.jar file Java libraries for Android)
│ │
│ ├── debug
│ │
│ └── release
├── include (header files)
│ │
@@ -69,71 +73,117 @@
│ │
│ ├── SenseGlove
│ │ │
│ │ ├── BLE (SGBLE headers)
│ │ │
│ │ ├── Connect (SGConnect headers)
│ │ │
│ │ └── Core (SGCoreCpp headers)
│ │
│ └── serial
── lib (platform-specific pre-built binary dependencies)
├── android
│ │
│ └── r25b (Android NDK r25b dependencies for UE 5.1+)
│ │
│ ├── arm64 (64-bit ARM variant of Android)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ └── x64 (64-bit x86-64 variant of Android)
│ │
│ ├── debug
│ │
│ └── release
├── 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
├── msvc142 (Microsoft Visual Studio 2019 dependencies)
│ │
│ ├── debug
│ │
│ └── release
└── msvc143 (Microsoft Visual Studio 2022 dependencies)
├── debug
└── release
── lib (platform-specific pre-built binary dependencies)
├── android
│ │
│ └── r25b (Android NDK r25b dependencies for UE 5.1+)
│ │
│ ├── arm64 (64-bit ARM variant of Android)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ └── x64 (64-bit x86-64 variant of Android)
│ │
│ ├── debug
│ │
│ └── release
├── linux
│ │
│ ├── rustc (GNU/Linux binary dependencies built with Rust)
│ │ │
│ │ ├── aarch64 (dependencies targeting GNU/Linux AArch64 architecture)
│ │ │ │
│ │ │ ├── debug
│ │ │ │
│ │ │ └── release
│ │ │
│ │ └── x86-64 (dependencies targeting GNU/Linux x86-64 architecture)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
── v22 (UE 5.3 and 5.4 GNU/Linux dependencies)
├── aarch64 (dependencies targeting GNU/Linux AArch64 architecture)
│ │
│ ├── debug
│ │
│ └── release
└── x86-64 (dependencies targeting GNU/Linux x86-64 architecture)
├── debug
└── release
│ │
│ │ ── v23 (UE 5.5 GNU/Linux dependencies)
├── aarch64 (dependencies targeting GNU/Linux AArch64 architecture)
│ │
│ ├── debug
│ │
│ └── release
└── x86-64 (dependencies targeting GNU/Linux x86-64 architecture)
├── debug
└── release
│ │ │
│ │ └── v25 (UE 5.6 GNU/Linux dependencies)
│ │ │
│ │ ├── aarch64 (dependencies targeting GNU/Linux AArch64 architecture)
│ │ │ │
│ │ │ ├── debug
│ │ │ │
│ │ │ └── release
│ │ │
│ │ └── x86-64 (dependencies targeting GNU/Linux x86-64 architecture)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ └── win64
│ │
│ ├── msvc142 (Microsoft Visual Studio 2019 dependencies)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ ├── msvc143 (Microsoft Visual Studio 2022 dependencies)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ └── rustc (Microsoft Windows binary dependencies built with Rust)
│ │
│ ├── debug
│ │
│ └── release
├── SGBleThirdPartyLibs (Third-party module providing SGBLE headers and libraries)
├── SGConnectThirdPartyHeaders (Third-party module providing SGConnect headers)
├── SGConnectThirdPartyLibs (Third-party module providing SGConnect headers and libraries)
├── SGCoreThirdPartyLibs (Third-party module providing SGCore headers and libraries)
└── SGSerialThirdPartyLibs (Third-party module providing github.com/wjwwood/serial headers and libraries)
```
+23
View File
@@ -9,6 +9,11 @@ There are various resources available for older versions of the SenseGlove Unrea
- [Example C++ API Project (only compatible with early v1.x.x releases)](https://dev.azure.com/SenseGlove/_git/SenseGlove-Unreal-SGPlaygroundCpp)
- [Example Blueprint API Project (only compatible with early v1.x.x releases)](https://dev.azure.com/SenseGlove/_git/SenseGlove-Unreal-SGPlaygroundBP)
### Third-Party OpenXR Integration Demos
- [A VRExpansionPlugin Integration Demo for UE `5.4`](https://dev.azure.com/SenseGlove/_git/SGVRETemplate)
- [Documentation](../advanced-topics/openxr/third-party-integrations/)
## Tutorials
- [Finding out your SenseGlove plugin version](https://youtu.be/iF0JU2kpNhw)
@@ -25,3 +30,21 @@ There are various resources available for older versions of the SenseGlove Unrea
- [Setting up VIVE Focus 3 & VIVE Wrist Trackers in Unreal Engine](https://youtu.be/SGmQevkzsY4)
- [SGBasicDemo: setup throwing objects and physics settings for the real and virtual hands](https://youtu.be/K9Qr_LqgTcY)
- [SGBasicDemo v2: upgrading your projects to the SenseGlove Unreal Engine Plugin v2.0.0](https://youtu.be/VbWfoep-Hsg)
## Third-Party Tutorials
### OpenXR Tutorials
- [Introduction to Virtual Reality, OpenXR Hand-Tracking, and Gesture Detection in Unreal Engine](https://youtu.be/67v-sEhidvM)
- [Procedural Virtual Hand Mesh Animation Using OpenXR Hand-Tracking Data - Part 1](https://youtu.be/TPEA1GJr_kU)
- [Procedural Virtual Hand Mesh Animation Using OpenXR Hand-Tracking Data - Part 2](https://youtu.be/xEnuephuNmw)
- [Unreal Engine OpenXR Hand-Tracking on Android with Meta XR (Quest 3S/3/Pro/2) and HTC VIVE OpenXR (Focus Vision/XR Elite/Focus 3) Plugins](https://youtu.be/BWd3MwtfTJE)
### Android (Meta Quest / HTC VIVE) Tutorials
- [Build & Deploy Unreal Engine 5.5 Projects APK to Android & Meta Quest 3S/3/Pro/2 in Standalone Mode](https://youtu.be/EClbEbNcl4k)
- [Unreal Engine OpenXR Hand-Tracking on Android with Meta XR (Quest 3S/3/Pro/2) and HTC VIVE OpenXR (Focus Vision/XR Elite/Focus 3) Plugins](https://youtu.be/BWd3MwtfTJE)
### VR Optimization
- [Optimizing Unreal Engine VR Projects for Higher Framerates (Meta Quest, HTC VIVE, FFR, ETFR, NVIDIA DLSS, AMD FSR, and Intel XeSS Tips Included!)](https://youtu.be/67CZqMrAOns)
@@ -1,6 +1,6 @@
## Planned Features Completion Status
### Implemented as of v2.2.x
### Implemented as of v2.6.x
- [X] Full SenseGlove low-level core API access through Unreal C++.
- [X] Full SenseGlove low-level core API access through Blueprint.
@@ -13,9 +13,10 @@
- [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 Oculus Quest 2, Oculus Quest Pro, Oculus Quest 3, and Oculus Quest 3s.
- [X] Support for HTC VIVE Pro, HTC VIVE Focus 3, HTC XR Elite, and HTC VIVE Focus Vision.
- [X] Support for HTC VIVE Trackers and HTC VIVE Wrist Trackers.
- [X] Support for both Bluetooth Serial and Bluetooth Low Energy.
- [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.
@@ -38,8 +39,10 @@
- [X] The SenseGlove grab/touch sockets one-click-setup ability on any Epic-compliant virtual hand mesh from within the Unreal Editor's Content Browser, Skeleton Editor, or Skeletal Mesh Editor.
- [X] A flexible virtual hand animation system that can take the mesh bone's transforms into account for a more reliable hand animation.
- [X] Ability to manage the Engine Scalability Settings through the SenseGlove plugin in order to change the graphics settings on the fly.
- [X] Ability to automatically ask for the required permissions on Android when the plugin is enabled in any UE project.
- [X] `ViveOpenXR` plugin compatibility.
### Upcoming features planned for the v2.3.x release
### Upcoming features planned for the v2.6.x release
### Planned features long-term
@@ -1,19 +1,20 @@
## Platform Support Matrix
| | **Windows (MSVC 2017)** | **Windows (MSVC 2019)** | **Windows (MSVC 2022)** | **Linux x86-64 (Native Toolchain)** | **Linux AArch64 (Native Toolchain)** | **Meta Quest Stand-alone (Android NDK)** | **HTC VIVE Stand-alone (Android NDK)** | **Fab** | **Azure DevOps Version** |
|:--------:|:-----------------------:|:-----------------------:|:-----------------------:|:-----------------------------------:|:------------------------------------:|:----------------------------------------:|:--------------------------------------:|:--------:|:------------------------:|
| **5.5** | ❌ | ❌ | ✅ v2.2.x | ✅ v2.2.x | ✅ v2.2.x | ✅ v2.2.x (r25b) | ❓ | | ✅ v2.2.2 |
| **5.4** | ❌ | ❌ | ✅ v2.2.x | ✅ v2.2.x | ✅ v2.2.x | ✅ v2.2.x (r25b) | ❓ | ✅ v2.2.2 | ✅ v2.2.2 |
| **5.3** | ❌ | ✅ v2.2.x | ✅ v2.2.x | ✅ v2.2.x | ✅ v2.2.x | ✅ v2.2.x (r25b) | | ✅ v2.2.2 | ✅ v2.2.2 |
| **5.2** | ❌ | ✅ v2.2.x | ✅ v2.2.x | ✅ v2.2.x | ✅ v2.2.x | ✅ v2.2.x (r25b) | | ✅ v2.2.2 | ✅ v2.2.2 |
| **5.1** | ❌ | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x (r25b) | ❓ | ⚠️ v2.0.0 | ⚠️ 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 |
| | **Windows (MSVC 2017)** | **Windows (MSVC 2019)** | **Windows (MSVC 2022)** | **Linux x86-64 (Native Toolchain)** | **Linux AArch64 (Native Toolchain)** | **Meta Quest Standalone (Android NDK)** | **HTC VIVE Standalone (Android NDK)** | **Fab** | **Azure DevOps Version** |
|:--------:|-------------------------|-------------------------|-------------------------|:-----------------------------------:|:------------------------------------:|:---------------------------------------:|:-------------------------------------:|:--------:|:------------------------:|
| **5.6** | ❌ | ❌ | ✅ v2.6.x | ✅ v2.6.x | ✅ v2.6.x | ✅ v2.6.x (r25b) | ❓ | ✅ v2.6.3 | ✅ v2.6.3 |
| **5.5** | ❌ | ❌ | ✅ v2.6.x | ✅ v2.6.x | ✅ v2.6.x | ✅ v2.6.x (r25b) | ❓ | ✅ v2.6.3 | ✅ v2.6.3 |
| **5.4** | ❌ | | ✅ v2.6.x | ✅ v2.6.x | ✅ v2.6.x | ✅ v2.6.x (r25b) | ✅ v2.6.x (r25b) | ✅ v2.6.3 | ✅ v2.6.3 |
| **5.3** | ❌ | ✅ v2.6.x | ✅ v2.6.x | ✅ v2.6.x | ✅ v2.6.x | ✅ v2.6.x (r25b) | ✅ v2.6.x (r25b) | ✅ v2.6.3 | ✅ v2.6.3 |
| **5.2** | ❌ | ⚠️ v2.4.x | ⚠️ v2.4.x | ⚠️ v2.4.x | ⚠️ v2.4.x | ⚠️ v2.4.x (r25b) | ❓ | ⚠️ v2.4.2 | ⚠️ v2.4.2 |
| **5.1** | ❌ | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x | ⚠️ v2.0.x (r25b) | ❓ | ⚠️ v2.0.0 | ⚠️ 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 |
* <code>✅</code> Supported
* <code>⚠️</code> Not supported by the latest release and might be lacking features
@@ -26,3 +27,5 @@ Remarks:
* 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.
* 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.
* Meta Quest PCVR-mode support is only provided through the [Epic OpenXR plugin](../getting-started/enabling-xr-ext-hand-tracking-vr-headsets/pcvr-mode/#meta-quest). Furthermore, the Standalone-mode support is also provided through the [Epic OpenXR plugin](..//getting-started/enabling-xr-ext-hand-tracking-vr-headsets/standalone-mode/#meta-quest) only. Please note that enabling the Meta XR plugin will result in crashes or unexpected behavior. Meta XR plugin compatibility is being worked on at the moment and might be supported in the future.
* While HTC VIVE PCVR-mode support is only provided through the [Epic OpenXR plugin](../getting-started/enabling-xr-ext-hand-tracking-vr-headsets/pcvr-mode/#htc-vive), the standalone-mode support is only provided through the [official HTC `ViveOpenXR` plugin](../getting-started/enabling-xr-ext-hand-tracking-vr-headsets/standalone-mode/#htc-vive) and no other plugin is supported.
@@ -1,41 +1,20 @@
# Enabling XR_EXT_hand_tracking OpenXR extension on VR Headsets
# Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets
> [!IMPORTANT]
> Starting from version `v2.1.0`, the SenseGlove Unreal Engine Plugin requires
> the `XR_EXT_hand_tracking` OpenXR extension to function. Without this
> OpenXR extension the plugin won't output any glove data.
Starting from version `v2.1.0`, the SenseGlove Unreal Engine Plugin requires the `XR_EXT_hand_tracking` OpenXR extension to function. If you are streaming from your PC to your VR headset, to enabling `XR_EXT_hand_tracking` support, might require additional settings depending on the vendor.
Since version `v2.1.0`, the SenseGlove Unreal Engine Plugin requires the `XR_EXT_hand_tracking` OpenXR extension to function. Whether you are streaming your immersive 3D VR application from your PC to your VR headset, or deploying it to your VR headset in standalone mode, enabling `XR_EXT_hand_tracking` support, might require additional plugins or settings depending on the HMD's vendor or model.
For Meta Quest headsets, enable the `Developer runtime features` under the `Settings > Beta` section:
## PCVR Mode
![Meta Quest Link - Developer Runtime Features - Enabling XR_EXT_hand_tracking](meta-quest-link-developer-runtime-features.png "Meta Quest Link - Developer Runtime Features - Enabling XR_EXT_hand_tracking")
For instructions on [how to setup `XR_EXT_hand_tracking` support in PCVR mode](pcvr-mode/) please refer to the relevant section.
> [!CAUTION]
> Streaming to Meta Quest headsets from SteamVR is no longer supported because
> the migration to OpenXR has caused controller offsets for Meta Quest HMDs to
> break on SteamVR. One possible reason is that
> [SteamVR lists `XR_FB_hand_tracking` as an unsupported feature](https://steamcommunity.com/app/250820/discussions/8/3121550424355682585/).
> Further investigation is needed to identify the exact underlying cause.
## Standalone Mode
For VIVE headsets relying on VIVE Business Streaming, ensure the Hand Tracking settings under `Input` are enabled:
For instructions on [how to setup `XR_EXT_hand_tracking` support in standalone mode on Android](standalone-mode/) please refer to the relevant section.
![VIVE Business Streaming - Hand tracking - Enabling XR_EXT_hand_tracking](vive-business-streaming-hand-tracking.png "VIVE Business Streaming - Hand tracking - Enabling XR_EXT_hand_tracking")
## Third-Party Tutorials
> [!NOTE]
> Tracking and accessing `FXRMotionControllerData` output from SenseGlove
> devices do not require Hand and Body Tracking to be enabled on the HMD device.
> Enabling this feature is only necessary if you wish to use hand-tracking as a
> fallback option when no glove is connected to your PC.
As mentioned in the `v2.1.0` release changelog, enabling the Meta XR plugin—and potentially the VIVE OpenXR plugin—alongside the SenseGlove Unreal Engine Plugin in the same project will disrupt the OpenXR functionality provided by the SenseGlove Plugin, rendering it unusable.
> [!CAUTION]
> As noted in the
> [v2.1.0 release changelog](../../appendix/changelog.html), since this release
> enabling the Meta XR plugin, —and potentially the VIVE OpenXR plugin—
> alongside the SenseGlove Unreal Engine Plugin in the same project will disrupt
> the OpenXR functionality provided by the SenseGlove Unreal Engine Plugin,
> rendering it unusable.
>
> `Although the SenseGlove OpenXR implementation is fully compatible with the IOpenXRHMD interface and the FOpenXRHMD XRTrackingSystem, it is not compatible with the FOculusXRHMD backend provided by the Meta XR plugin. The same issue likely applies to the VIVE OpenXR plugin. So, if these plugins are enabled in your project, the SenseGlove OpenXR will not function as intended, effectively breaking the plugin's functionality. It seems these plugins are necessary in order to make the fallback to the hand-tracking feature work on Android. While we may add support and compatibility with Meta XR and VIVE OpenXR plugins in the future, for the time being, if your project requires these plugins, we advise continuing with the v2.0.x release of the SenseGlove Unreal Engine plugin until this issue is addressed.`
As a part of [this OpenXR comprehensive tutorial series](third-party-tutorials/), you will learn how to enable the developer runtime features, set up the OpenXR runtime, and the `XR_EXT_hand_tracking` support in PCVR mode. Furthermore, it will show you how to enable hand-tracking on Android (standalone mode) using the Meta XR and VIVE OpenXR plugins.
@@ -0,0 +1,77 @@
# Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in PCVR Mode
Starting from version `v2.1.0`, the SenseGlove Unreal Engine Plugin requires the `XR_EXT_hand_tracking` OpenXR extension to function. If you are streaming your immersive 3D VR application from your PC to your VR headset, enabling `XR_EXT_hand_tracking` support, requires additional plugins and settings depending on the HMD's vendor or model.
## Enabling OpenXR Plugin and Disabling OpenXRHandTracking Plugin
Regardless of the type or vendor of the HMD you have in mind for development or deployment purposes, the `OpenXR` plugin is required as a prerequisite. Also, ensure the `OpenXRHandTracking` is disabled as it conflicts with the SenseGlove Unreal Engine Plugin since both implement the same `XR_EXT_hand_tracking` OpenXR extension.
Though [enabling the SenseGlove Unreal Engine Plugin](../../plugin-verify-version-enable/) should enable the `OpenXR` plugin automatically, it is recommended to ensure this plugin is enabled, and most importantly `OpenXRHandTracking` is disabled, by navigating to `Edit > Plugins` in the Unreal Editor menus.
![Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in PCVR Mode - Enabling OpenXR and OpenXRHandTracking Plugins](../enable-openxr-disable-openxrhandtracking-plugins.png "Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in PCVR Mode - Enabling OpenXR and OpenXRHandTracking Plugins")
The `OpenXRHandTracking` plugin implements the `XR_EXT_hand_tracking` OpenXR extension.
## Meta Quest
To set up `XR_EXT_hand_tracking` support on Meta Quest HMDs in PCVR mode, depending on your project requirements (e.g. whether you rely on the `Meta XR` plugin or not), additional setup steps are required.
## Meta Quest Link App
For Meta Quest headsets, enable the `Developer runtime features` under the `Settings > Beta` section inside the Meta Quest Link app:
![Meta Quest Link - Developer Runtime Features - Enabling XR_EXT_hand_tracking](meta-quest-link-developer-runtime-features.png "Meta Quest Link - Developer Runtime Features - Enabling XR_EXT_hand_tracking")
> [!IMPORTANT]
> Enabling `Developer runtime features` in the Meta Quest Link requires a
> [Meta Developer Account](https://developers.facebook.com/docs/development/register/).
> If you are not signed in using a Meta Developer Account, this option won't
> be shown to you inside Meta Quest Link.
> [!CAUTION]
> Streaming to Meta Quest headsets from SteamVR is no longer supported because
> the migration to OpenXR has caused controller offsets for Meta Quest HMDs to
> break on SteamVR. One possible reason is that
> [SteamVR lists `XR_FB_hand_tracking` as an unsupported feature](https://steamcommunity.com/app/250820/discussions/8/3121550424355682585/).
> Further investigation is needed to identify the exact underlying cause.
### Meta XR Plugin
> [!CAUTION]
> Please note that enabling the `Meta XR` plugin alongside the SenseGlove plugin
> will result in crashes or unexpected behavior. `Meta XR` plugin compatibility
> is being worked on and might be supported in the future.
## HTC VIVE
To set up `XR_EXT_hand_tracking` support on HTC VIVE HMDs in PCVR mode, additional plugins or configuration steps are required.
### OpenXRViveTracker Plugin
To enable VIVE Trackers support ensure the `OpenXRViveTracker` plugin is enabled by navigating to `Edit > Plugins` in the Unreal Editor menus. This plugin should be enabled, or wrist tracking won't function on VIVE devices at all.
![Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in PCVR Mode - Enabling OpenXRViveTracker Plugin](enable-openxrvivetracker-plugin.png "Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in PCVR Mode - Enabling OpenXRViveTracker Plugin")
The `OpenXRViveTracker` plugin implements the `XR_HTCX_vive_tracker_interaction` OpenXR extension which is necessary to use VIVE Trackers or to [emulate the VIVE Wrist Trackers as VIVE Trackers on Windows](#vive-business-streaming-app).
### VIVE Business Streaming App
For VIVE headsets relying on the VIVE Business Streaming application, ensure the Hand Tracking settings under `Input` are enabled and `XR_HTCX_vive_tracker_interaction` is enabled for VIVE Wrist Trackers by enabling `Emulate VIVE Wrist Tracker as VIVE Tracker`:
![VIVE Business Streaming - Hand tracking - Enabling XR_EXT_hand_tracking and Emulating VIVE Wrist Tracker as VIVE Tracker](vive-business-streaming-hand-tracking.png "VIVE Business Streaming - Hand tracking - Enabling XR_EXT_hand_tracking and Emulating VIVE Wrist Tracker as VIVE Tracker")
> [!NOTE]
> Tracking and accessing `FXRMotionControllerData` output from SenseGlove
> devices do not require Hand and Body Tracking to be enabled on the HMD device.
> Enabling this feature is only necessary if you wish to use hand-tracking as a
> fallback option when no glove is connected to your PC.
### SteamVR App
After enabling the [OpenXRViveTracker plugin](#openxrvivetracker-plugin) and [enabling `Emulate VIVE Wrist Tracker as VIVE Tracker` for VIVE HMDs relying on the VIVE Business Streaming](#vive-business-streaming-app), you need to perform one final setup in the SteamVR app for the SenseGlove Unreal Engine Plugin to be able to retrieve the correct wrist-tracking offsets. Once you have paired your VIVE Trackers or VIVE Wrist Trackers, navigate to `SteamVR Settings > Controllers > MANAGE TRACKERS` and make sure your left tracker is set to `LEFT FOOT` and the right tracker is set to `RIGHT FOOT`:
![SteamVR - Manage Trackers - Setting the motion source for left and right hands](steamvr-manage-trackers.png "SteamVR - Manage Trackers - Setting the motion source for left and right hands")
## SenseGlove Wrist Tracking Settings
Once you have set up everything, it's time to adjust the [SenseGlove Wrist Tracking Settings](../../setup-wrist-tracking-hardware/) inside the project-wide plugin's settings. For detailed information, please visit [the Wrist Tracking Hardware and HMD auto-detection configuration section](../../../plugin-configuration/plugin-settings/tracking/wrist-tracking/) as well.
@@ -0,0 +1,87 @@
# Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode
Starting from version `v2.1.0`, the SenseGlove Unreal Engine Plugin requires the `XR_EXT_hand_tracking` OpenXR extension to function. If you are deploying your immersive 3D VR application to your VR headset in standalone mode, enabling `XR_EXT_hand_tracking` support, requires additional plugins and settings depending on the HMD's vendor or model.
## Enabling OpenXR Plugin and Disabling OpenXRHandTracking Plugin
Regardless of the type or vendor of the HMD you have in mind for development or deployment purposes, the `OpenXR` plugin is required as a prerequisite. Also, ensure the `OpenXRHandTracking` is disabled as it conflicts with the SenseGlove Unreal Engine Plugin since both implement the same `XR_EXT_hand_tracking` OpenXR extension.
Though [enabling the SenseGlove Unreal Engine Plugin](../../plugin-verify-version-enable/) should enable the `OpenXR` plugin automatically, it is recommended to ensure this plugin is enabled, and most importantly `OpenXRHandTracking` is disabled, by navigating to `Edit > Plugins` in the Unreal Editor menus.
![Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - Enabling OpenXR and OpenXRHandTracking Plugins](../enable-openxr-disable-openxrhandtracking-plugins.png "Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - Enabling OpenXR and OpenXRHandTracking Plugins")
The `OpenXRHandTracking` plugin implements the `XR_EXT_hand_tracking` OpenXR extension.
## Meta Quest
To set up `XR_EXT_hand_tracking` support on Meta Quest HMDs in Standalone mode, depending on your project requirements (e.g. whether you rely on the `Meta XR` plugin or not), additional setup steps are required.
> [!IMPORTANT]
> Although, the SenseGlove plugin does not require the `Meta XR` plugin to
> function, and relying solely on the `OpenXR` and `OpenXRHandTracking` plugins
> would suffice for functional glove data retrieval using OpenXR,
> [hand-tracking as a fallback mechanism](../../../plugin-configuration/plugin-settings/tracking/#bfallbacktohandtrackingifnoglovedetected)
> won't work on Android without the `Meta XR` plugin availability.
### Meta XR Plugin
> [!CAUTION]
> Please note that enabling the `Meta XR` plugin alongside the SenseGlove plugin
> will result in crashes or unexpected behavior. `Meta XR` plugin compatibility
> is being worked on and might be supported in the future.
## HTC VIVE
To set up `XR_EXT_hand_tracking` support on HTC VIVE HMDs in Standalone mode, additional plugins or configuration steps are required.
### OpenXRViveTracker Plugin
Unlike the [PCVR-mode on Windows](../pcvr-mode/), the `OpenXRViveTracker` plugin is not required on Android since it only provides an implementation of the `XR_HTCX_vive_tracker_interaction` OpenXR extension which is necessary when we use VIVE Trackers on Windows or we [emulate the VIVE Wrist Trackers as VIVE Trackers on Windows](../pcvr-mode/#vive-business-streaming-app). Instead, we require the `XR_HTCX_vive_wrist_tracker_interaction` OpenXR extension to be able to use VIVE Wrist Trackers on Android, which is provided by the [`ViveOpenXR` plugin](#viveopenxr-plugin). So, you can safely ignore enabling this plugin for Android standalone deployments.
### ViveOpenXR Plugin
To enable VIVE Wrist Trackers support ensure the `ViveOpenXR` plugin is enabled by navigating to `Edit > Plugins` in the Unreal Editor menus. This plugin should be enabled, or wrist tracking won't function on VIVE devices at all.
![Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - Enabling ViveOpenXR Plugin](enable-openxr-viveopenxr-plugins.png "Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - Enabling ViveOpenXR Plugin")
The `ViveOpenXR` plugin implements the `XR_HTCX_vive_wrist_tracker_interaction` OpenXR extension.
> [!IMPORTANT]
> Without the `ViveOpenXR` plugin deploying an immersive 3D VR application to
> your HTC VIVE in Standalone mode won't be possible, whether you enable
> `bStartInVR`, or not. Without it your app will be deployed and recognized as
> a 2D app.
By default, the `ViveOpenXR` plugin settings located in `Edit > Project Settings > Plugins > Vive OpenXR` look something like these:
![Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - Default ViveOpenXR Plugin Settings](viveopenxr-plugin-default-settings-001.png "Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - Default ViveOpenXR Plugin Settings")
![Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - Default ViveOpenXR Plugin Settings](viveopenxr-plugin-default-settings-002.png "Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - Default ViveOpenXR Plugin Settings")
The following settings control the availability of hand-tracking when the `ViveOpenXR` plugin is enabled:
- **Enable Hand Interaction**: This enables the hand interactions with the OpenXR hand interaction extension `XR_HTC_hand_interaction`. Changing this setting will prompt you to restart the engine to apply the new settings. This setting should be enabled.
![Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - ViveOpenXR Plugin Settings - Enable Hand Interaction Editor Restart Prompt](viveopenxr-plugin-settings-enable-hand-interaction-editor-restart-prompt.png "Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - ViveOpenXR Plugin Settings - Enable Hand Interaction Editor Restart Prompt")
- **Use HTC Hand Interaction**: This selects which OpenXR hand interaction extension to use. If enabled, `XR_HTC_hand_interaction` will be used, effectively breaking SenseGlove glove and hand-tracking data output. If disabled, `XR_EXT_hand_interaction` will be used, which is compatible with the SenseGlove Unreal Engine Plugin. Changing this setting will prompt you to restart the engine to apply the new settings. This setting should be disabled.
The following settings control the availability of wrist-tracking when the `ViveOpenXR` plugin is enabled:
- **Enable Wrist Tracker**: This option controls the `XR_HTC_vive_wrist_tracker_interaction` OpenXR extension. If enabled, in turn, it enables the use of HTC Wrist Tracker interaction profiles in OpenXR. Changing this setting will prompt you to restart the engine to apply the new settings.
![Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - ViveOpenXR Plugin Settings - Enable Wrist Tracker Editor Restart Prompt](viveopenxr-plugin-settings-enable-wrist-tracker-editor-restart-prompt.png "Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - ViveOpenXR Plugin Settings - Enable Wrist Tracker Editor Restart Prompt")
- **Enable Ultimate Tracker (Beta)**: This option controls the `XR_HTC_path_enumeration` and `XR_HTC_vive_xr_tracker_interaction` OpenXR extensions. If enabled, in turn, they enable the use of HTC Xr Tracker interaction profiles in OpenXR. Changing this setting will prompt you to restart the engine to apply the new settings.
- **Enable Ultimate Tracker Pogo Pin Inputs (Beta)**: Enables or disables the input options for Unreal's Enhanced Input System. Changing this setting will prompt you to restart the engine to apply the new settings.
The following setup demonstrates a functional immersive 3D VR application with the minimum `ViveOpenXR` required features enabled to make it compatible with the SenseGlove Unreal Engine Plugin:
![Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - ViveOpenXR Plugin Settings - The SenseGlove Unreal Engine Compatible Settings](viveopenxr-plugin-settings-senseglove-compatible-001.png "Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - ViveOpenXR Plugin Settings - The SenseGlove Unreal Engine Compatible Settings")
![Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - ViveOpenXR Plugin Settings - The SenseGlove Unreal Engine Compatible Settings](viveopenxr-plugin-settings-senseglove-compatible-002.png "Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets in Standalone Mode - ViveOpenXR Plugin Settings - The SenseGlove Unreal Engine Compatible Settings")
## SenseGlove Wrist Tracking Settings
Once you have set up everything, it's time to adjust the [SenseGlove Wrist Tracking Settings](../../setup-wrist-tracking-hardware/) inside the project-wide plugin's settings. For detailed information, please visit [the Wrist Tracking Hardware and HMD auto-detection configuration section](../../../plugin-configuration/plugin-settings/tracking/wrist-tracking/) as well.
@@ -0,0 +1,17 @@
# Third-Party Tutorials: XR_EXT_hand_tracking Setup
## Introduction to Virtual Reality, OpenXR Hand-Tracking, and Gesture Detection in Unreal Engine
A part of this comprehensive tutorial will guide you through setting up the OpenXR runtime and enabling developer runtime features:
<div style="margin: 0 auto; width: 560px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/67v-sEhidvM" frameborder="0" allowfullscreen></iframe>
</div>
## Unreal Engine OpenXR Hand-Tracking on Android with Meta XR (Quest 3S/3/Pro/2) and HTC VIVE OpenXR (Focus Vision/XR Elite/Focus 3) Plugins
A part of this comprehensive tutorial will guide you through setting up the Meta XR and VIVE OpenXR plugins for Android standalone-mode deployment:
<div style="margin: 0 auto; width: 560px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/BWd3MwtfTJE" frameborder="0" allowfullscreen></iframe>
</div>
@@ -2,6 +2,14 @@
SenseCom (short for SenseGlove Communications) is a background program that runs alongside your Unreal Engine application. Its primary function is to discover, and connect to SenseGlove devices on your system, exchanging data with them, much like a "SteamVR for Haptic Gloves." The SenseGlove Unreal Engine Plugin relies on SenseCom to communicate with any SenseGlove hardware.
Communication between your application and the physical gloves are possible via either [Bluetooth Low Energy (a.k.a. Bluetooth LE, colloquially BLE, formerly marketed as Bluetooth Smart)](bluetooth-low-energy/), or [Bluetooth Serial (a.k.a. BT Serial)](bluetooth-serial/) depending on the type and model of your glove, or the firmware version.
> [!IMPORTANT]
> Some glove models support firmware upgrades from a Bluetooth Serial firmware
> to a BLE-compatible firmware version. For more information, refer to the
> [relevant documentation here](https://senseglove.gitlab.io/SenseGloveDocs/nova-2.html?highlight=firmware#updating-your-nova-2-0-firmware),
> as this topic is beyond the scope of this handbook.
> [!NOTE]
> SenseCom is required only for communication on Windows or Linux. For
> standalone Android devices, the communication functionality is embedded
@@ -10,4 +18,4 @@ SenseCom (short for SenseGlove Communications) is a background program that runs
> [!NOTE]
> For more detailed information and troubleshooting, consult the
> [SenseCom documentation page on SGDocs](https://senseglove.gitlab.io/SenseGloveDocs/sensecom/overview.html),
> please.
> please.
@@ -0,0 +1,18 @@
# SenseCom (Bluetooth Low Energy)
Up to SenseCom `v1.7.x`, the only supported Bluetooth protocol for communication was Bluetooth Serial. However, starting with the `v1.8.x` series, SenseCom introduced support for Bluetooth Low Energy, which is now the preferred method of communication.
> [!IMPORTANT]
> If SenseCom fails to recognize your gloves with Bluetooth Low Energy firmware,
> it may be because the `Legacy Connections` option is enabled. In that case
> SenseCom is only able to discover gloves with a Bluetooth Serial firmware.
> Enabling this option should allow SenseCom to discover and connect to your
> glove.
>
> ![SenseCom on Microsoft Windows - SenseCom v1.8.x+ Settings - Legacy Connections](microsoft-windows-sensecom-settings-legacy-connections.png "SenseCom on Microsoft Windows - SenseCom v1.8.x+ Settings - Legacy Connections")
> [!IMPORTANT]
> Some glove models support firmware upgrades from a Bluetooth Serial firmware
> to a BLE-compatible firmware version. For more information, refer to the
> [relevant documentation here](https://senseglove.gitlab.io/SenseGloveDocs/nova-2.html?highlight=firmware#updating-your-nova-2-0-firmware),
> as this topic is beyond the scope of this handbook.
@@ -0,0 +1,10 @@
# SenseCom on Android (Bluetooth Low Energy)
Unlike PCVR-mode on Windows or Linux, there's no separate SenseCom application available for Standalone-mode on Android; instead, the communication functionality is integrated into your application.
As a result, in Standalone-mode, unlike PCVR-mode where BLE gloves do not require pairing at the operating system level and connections are managed by SenseCom, you need to pair your desired gloves through your operating system's Bluetooth settings before launching any applications that rely on [the SenseGlove Unreal Engine Plugin](https://www.fab.com/listings/62bcdd2a-0bb1-4f34-b7b8-c5e7c9313099). These instructions vary depending on the vendor and model of your Head-Mounted Display device. Please refer to the official documentation for detailed instructions:
- [Meta Quest: Connect a compatible Bluetooth device to Meta Quest headsets](https://www.meta.com/en-gb/help/quest/3263186127339632/)
- [HTC VIVE: Pairing Bluetooth devices](https://www.vive.com/eu/support/vive-xr/category_howto/pairing-bluetooth-devices.html)
If you are using a different kind of HMD, ensure you consult the vendor-specific instructions to properly pair your gloves with your HMD of choice in Standalone-mode.
@@ -0,0 +1,115 @@
# SenseCom on GNU/Linux (Bluetooth Low Energy)
Follow these steps to quickly set up and run SenseCom on GNU/Linux:
1. First, obtain the SenseCom binaries from its [GitHub repository](https://github.com/Adjuvo/SenseCom).
![SenseCom on GNU/Linux - Downloading from GitHub](../sensecom-github-download.png "SenseCom on GNU/Linux - Downloading from GitHub")
2. Extract the SenseCom `.zip` file to a location on your computer.
```sh
$ unzip SenseCom-main.zip -d /some/path/
```
3. Navigate to the `SenseCom_Linux_Latest` folder containing the SenseCom binaries for GNU/Linux:
```sh
$ cd /some/path/SenseCom-main/Linux/SenseCom_Linux_Latest/
```
4. List the files and check the executable permissions for the main SenseCom binary, `SenseCom.x86_64`:
```sh
$ ls -ahl
total 20M
drwxr-xr-x 3 mamadou mamadou 5 Apr 10 11:24 .
drwxr-xr-x 3 mamadou mamadou 5 Apr 10 11:24 ..
drwxr-xr-x 7 mamadou mamadou 34 Apr 10 11:24 SenseCom_Data
-rw-r--r-- 1 mamadou mamadou 15K Apr 10 11:24 SenseCom.x86_64
-rw-r--r-- 1 mamadou mamadou 33M Apr 10 11:24 UnityPlayer.so
```
5. As seen above the `SenseCom.x86_64` binary does not have the executable permission. Run the following command to set the executable permission for all users:
```sh
$ chmod a+x SenseCom.x86_64
```
6. Veirfy the executable permission has been set on `SenseCom.x86_64`:
```sh
$ ls -l SenseCom.x86_64
-rwxr-xr-x 1 mamadou mamadou 14720 Apr 10 11:24 SenseCom.x86_64
```
7. Make sure the glove is powered on.
8. Time to run the SenseCom executable:
```
$ ./SenseCom.x86_64
[UnityMemory] Configuration Parameters - Can be set up in boot.config
"memorysetup-bucket-allocator-granularity=16"
"memorysetup-bucket-allocator-bucket-count=8"
"memorysetup-bucket-allocator-block-size=4194304"
"memorysetup-bucket-allocator-block-count=1"
"memorysetup-main-allocator-block-size=16777216"
"memorysetup-thread-allocator-block-size=16777216"
"memorysetup-gfx-main-allocator-block-size=16777216"
"memorysetup-gfx-thread-allocator-block-size=16777216"
"memorysetup-cache-allocator-block-size=4194304"
"memorysetup-typetree-allocator-block-size=2097152"
"memorysetup-profiler-bucket-allocator-granularity=16"
"memorysetup-profiler-bucket-allocator-bucket-count=8"
"memorysetup-profiler-bucket-allocator-block-size=4194304"
"memorysetup-profiler-bucket-allocator-block-count=1"
"memorysetup-profiler-allocator-block-size=16777216"
"memorysetup-profiler-editor-allocator-block-size=1048576"
"memorysetup-temp-allocator-size-main=4194304"
"memorysetup-job-temp-allocator-block-size=2097152"
"memorysetup-job-temp-allocator-block-size-background=1048576"
"memorysetup-job-temp-allocator-reduction-small-platforms=262144"
"memorysetup-temp-allocator-size-background-worker=32768"
"memorysetup-temp-allocator-size-job-worker=262144"
"memorysetup-temp-allocator-size-preload-manager=262144"
"memorysetup-temp-allocator-size-nav-mesh-worker=65536"
"memorysetup-temp-allocator-size-audio-worker=65536"
"memorysetup-temp-allocator-size-cloud-worker=32768"
"memorysetup-temp-allocator-size-gfx=262144"
Loading in SingleInstance mode
```
![SenseCom on GNU/Linux - Running SenseCom](gnu-linux-run-sensecom.png "SenseCom on GNU/Linux - Running SenseCom")
9. After running SenseCom, it will not automatically connect to your gloves unless you have already paired them. To pair your devices, navigate to the hamburger menu and select `Pair Devices`.
![SenseCom on GNU/Linux - SenseCom Hamburger Menu - Pair Devices](gnu-linux-sensecom-pair-devices-hamburger-menu.png "SenseCom on GNU/Linux - SenseCom Hamburger Menu - Pair Devices")
10. Once inside the `Pair Devices` section, in case your gloves are already turned on, you should be able to spot them inside the `Nearby Devices` list.
![SenseCom on GNU/Linux - Pair Devices - Nearby Devices](gnu-linux-sensecom-pair-devices-nearby.png "SenseCom on GNU/Linux - Pair Devices - Nearby Devices")
> [!IMPORTANT]
> If SenseCom fails to recognize your gloves with Bluetooth Low Energy firmware,
> it may be because the `Legacy Connections` option is enabled. In that case
> SenseCom is only able to discover gloves with a Bluetooth Serial firmware.
> Enabling this option should allow SenseCom to discover and connect to your
> glove.
>
> ![SenseCom on GNU/Linux - SenseCom v1.8.x+ Settings - Legacy Connections](gnu-linux-sensecom-settings-legacy-connections.png "SenseCom on GNU/Linux - SenseCom v1.8.x+ Settings - Legacy Connections")
11. Clicking on any glove within the `Nearby Devices` list will prompt a pairing confirmation. If this is the desired glove you wish to pair, proceed by clicking the `Confirm` button.
![SenseCom on GNU/Linux - Pair Devices - Paring Confirmation](gnu-linux-sensecom-pair-devices-confirmation.png "SenseCom on GNU/Linux - Pair Devices - Paring Confirmation")
12. After pairing all gloves, you can return to the main SenseCom window by pressing the `< Back` button. If needed, you can always revisit the `Paired Devices` list to unpair any gloves.
![SenseCom on GNU/Linux - Pair Devices - List and Unpair functionality](gnu-linux-sensecom-pair-devices-list.png "SenseCom on GNU/Linux - Pair Devices - List and Unpair functionality")
13. If you have followed all the steps correctly, upon returning to the main SenseCom window, you should see that your gloves are connected
![SenseCom on GNU/Linux - Connected Bluetooth Low Energy Gloves](gnu-linux-sensecom-connected-gloves.png "SenseCom on GNU/Linux - Connected Bluetooth Low Energy Gloves")
@@ -0,0 +1,46 @@
# SenseCom on Microsoft Windows (Bluetooth Low Energy)
Follow these steps to quickly set up and run SenseCom on Microsoft Windows:
1. First, obtain the SenseCom binaries from its [GitHub repository](https://github.com/Adjuvo/SenseCom).
![SenseCom on Microsoft Windows - Downloading from GitHub](../sensecom-github-download.png "SenseCom on Microsoft Windows - Downloading from GitHub")
2. Extract the SenseCom `.zip` file to a location on your computer after downloading it.
3. Ensure any glove you would like to pair with and connect to your system is not paired, or connected to any other device, such as another PC or VR headset.
4. Make sure the glove is powered on.
5. Now, it's time to run SenseCom. Navigate to the folder where you extracted SenseCom and go to `/path/to/extracted/SenseCom/directory/Win/SenseCom_Win_Latest`, and then run the executable `SenseCom.exe`.
![SenseCom on Microsoft Windows - Running SenseCom](microsoft-windows-run-sensecom.png "SenseCom on Microsoft Windows - Running SenseCom")
6. After running SenseCom, it will not automatically connect to your gloves unless you have already paired them. To pair your devices, navigate to the hamburger menu and select `Pair Devices`.
![SenseCom on Microsoft Windows - SenseCom Hamburger Menu - Pair Devices](microsoft-windows-sensecom-pair-devices-hamburger-menu.png "SenseCom on Microsoft Windows - SenseCom Hamburger Menu - Pair Devices")
7. Once inside the `Pair Devices` section, in case your gloves are already turned on, you should be able to spot them inside the `Nearby Devices` list.
![SenseCom on Microsoft Windows - Pair Devices - Nearby Devices](microsoft-windows-sensecom-pair-devices-nearby.png "SenseCom on Microsoft Windows - Pair Devices - Nearby Devices")
> [!IMPORTANT]
> If SenseCom fails to recognize your gloves with Bluetooth Low Energy firmware,
> it may be because the `Legacy Connections` option is enabled. In that case
> SenseCom is only able to discover gloves with a Bluetooth Serial firmware.
> Enabling this option should allow SenseCom to discover and connect to your
> glove.
>
> ![SenseCom on Microsoft Windows - SenseCom v1.8.x+ Settings - Legacy Connections](microsoft-windows-sensecom-settings-legacy-connections.png "SenseCom on Microsoft Windows - SenseCom v1.8.x+ Settings - Legacy Connections")
8. Clicking on any glove within the `Nearby Devices` list will prompt a pairing confirmation. If this is the desired glove you wish to pair, proceed by clicking the `Confirm` button.
![SenseCom on Microsoft Windows - Pair Devices - Paring Confirmation](microsoft-windows-sensecom-pair-devices-confirmation.png "SenseCom on Microsoft Windows - Pair Devices - Paring Confirmation")
9. After pairing all gloves, you can return to the main SenseCom window by pressing the `< Back` button. If needed, you can always revisit the `Paired Devices` list to unpair any gloves.
![SenseCom on Microsoft Windows - Pair Devices - List and Unpair functionality](microsoft-windows-sensecom-pair-devices-list.png "SenseCom on Microsoft Windows - Pair Devices - List and Unpair functionality")
10. If you have followed all the steps correctly, upon returning to the main SenseCom window, you should see that your gloves are connected
![SenseCom on Microsoft Windows - Connected Bluetooth Low Energy Gloves](microsoft-windows-sensecom-connected-gloves.png "SenseCom on Microsoft Windows - Connected Bluetooth Low Energy Gloves")
@@ -0,0 +1,17 @@
# SenseCom (Bluetooth Serial)
Up to SenseCom `v1.7.x`, the only supported Bluetooth protocol for communication was Bluetooth Serial. However, starting with the `v1.8.x` series, SenseCom introduced support for Bluetooth Low Energy, which is now the preferred method of communication.
> [!IMPORTANT]
> If you are using SenseCom `v1.8.x+` and it fails to recognize your gloves with
> a Bluetooth Serial firmware, it may be because the `Legacy Connections` option
> is disabled, which is the default. Enabling this option should allow SenseCom
> to discover and connect to your glove.
>
> ![SenseCom on Microsoft Windows - SenseCom v1.8.x+ Settings - Legacy Connections](microsoft-windows-sensecom-settings-legacy-connections.png "SenseCom on Microsoft Windows - SenseCom v1.8.x+ Settings - Legacy Connections")
> [!IMPORTANT]
> Some glove models support firmware upgrades from a Bluetooth Serial firmware
> to a BLE-compatible firmware version. For more information, refer to the
> [relevant documentation here](https://senseglove.gitlab.io/SenseGloveDocs/nova-2.html?highlight=firmware#updating-your-nova-2-0-firmware),
> as this topic is beyond the scope of this handbook.
@@ -0,0 +1,10 @@
# SenseCom on Android (Bluetooth Serial)
Unlike PCVR-mode on Windows or Linux, there's no separate SenseCom application available for Standalone-mode on Android; instead, the communication functionality is integrated into your application.
As a result, you need to pair your desired gloves through your operating system's Bluetooth settings before launching any applications that rely on [the SenseGlove Unreal Engine Plugin](https://www.fab.com/listings/62bcdd2a-0bb1-4f34-b7b8-c5e7c9313099). These instructions vary depending on the vendor and model of your Head-Mounted Display device. Please refer to the official documentation for detailed instructions:
- [Meta Quest: Connect a compatible Bluetooth device to Meta Quest headsets](https://www.meta.com/en-gb/help/quest/3263186127339632/)
- [HTC VIVE: Pairing Bluetooth devices](https://www.vive.com/eu/support/vive-xr/category_howto/pairing-bluetooth-devices.html)
If you are using a different kind of HMD, ensure you consult the vendor-specific instructions to properly pair your gloves with your HMD of choice in Standalone-mode.
@@ -1,10 +1,10 @@
# SenseCom on GNU/Linux
# SenseCom on GNU/Linux (Bluetooth Serial)
Follow these steps to quickly set up and run SenseCom on GNU/Linux:
1. First, obtain the SenseCom binaries from its [GitHub repository](https://github.com/Adjuvo/SenseCom).
![SenseCom on GNU/Linux - Downloading from GitHub](../sensecom-github-download.png "SenseCom on GNU/Linux - Downloading from GitHub")
![SenseCom on GNU/Linux - Downloading from GitHub](../../sensecom-github-download.png "SenseCom on GNU/Linux - Downloading from GitHub")
2. Extract the SenseCom `.zip` file to a location on your computer.
@@ -85,6 +85,14 @@ Loading in SingleInstance mode
![SenseCom on GNU/Linux - A successful SenseCom and Nova Glove connection](successful-senscom-nova-glove-connection.png "SenseCom on GNU/Linux - A successful SenseCom and Nova Glove connection")
> [!IMPORTANT]
> If you are using SenseCom `v1.8.x+` and it fails to recognize your gloves with
> a Bluetooth Serial firmware, it may be because the `Legacy Connections` option
> is disabled, which is the default. Enabling this option should allow SenseCom
> to discover and connect to your glove.
>
> ![SenseCom on GNU/Linux - SenseCom v1.8.x+ Settings - Legacy Connections](sensecom-settings-legacy-connections.png "SenseCom on GNU/Linux - SenseCom v1.8.x+ Settings - Legacy Connections")
> [!NOTE]
> For more detailed information and troubleshooting, consult the
> [SenseCom documentation page on SGDocs](https://senseglove.gitlab.io/SenseGloveDocs/sensecom/overview.html),
@@ -1,4 +1,4 @@
# Connect to Nova gloves using Blueman Bluetooth Manager
# Connect to Nova gloves using Blueman Bluetooth Manager (Bluetooth Serial)
Follow these steps to pair a Nova glove with your PC on GNU/Linux usng the Blueman Bluetooth Manager:
@@ -1,4 +1,4 @@
# Connect to Nova gloves using Command-line
# Connect to Nova gloves using Command-line (Bluetooth Serial)
Follow these steps to pair a Nova glove to your PC on GNU/Linux usng command-line and Bluez:
@@ -1,10 +1,10 @@
# SenseCom on Microsoft Windows
# SenseCom on Microsoft Windows (Bluetooth Serial)
Follow these steps to quickly set up and run SenseCom on Microsoft Windows:
1. First, obtain the SenseCom binaries from its [GitHub repository](https://github.com/Adjuvo/SenseCom).
![SenseCom on Microsoft Windows - Downloading from GitHub](sensecom-github-download.png "SenseCom on Microsoft Windows - Downloading from GitHub")
![SenseCom on Microsoft Windows - Downloading from GitHub](../sensecom-github-download.png "SenseCom on Microsoft Windows - Downloading from GitHub")
2. Extract the SenseCom `.zip` file to a location on your computer after downloading it.
@@ -38,7 +38,7 @@ Follow these steps to quickly set up and run SenseCom on Microsoft Windows:
![SenseCom on Microsoft Windows - Bluetooth settings paired devices list](microsoft-windows-bluetooth-settings-paired-devices-list.png "SenseCom on Microsoft Windows - Bluetooth settings paired devices list")
12. After successfully paring your glove, it's time to run SenseCom. Navigate to the folder where you extracted SenseCom and go to to `/path/to/extracted/SenseCom/directory/Win/SenseCom_Win_Latest`.
12. After successfully paring your glove, it's time to run SenseCom. Navigate to the folder where you extracted SenseCom and go to `/path/to/extracted/SenseCom/directory/Win/SenseCom_Win_Latest`, and then run the executable `SenseCom.exe`.
![SenseCom on Microsoft Windows - Running SenseCom](microsoft-windows-run-sensecom.png "SenseCom on Microsoft Windows - Running SenseCom")
@@ -51,9 +51,17 @@ Follow these steps to quickly set up and run SenseCom on Microsoft Windows:
![SenseCom on Microsoft Windows - A successful SenseCom and Nova Glove connection](microsoft-windows-successful-senscom-nova-glove-connection.png "SenseCom on Microsoft Windows - A successful SenseCom and Nova Glove connection")
> [!IMPORTANT]
> If you are using SenseCom `v1.8.x+` and it fails to recognize your gloves with
> a Bluetooth Serial firmware, it may be because the `Legacy Connections` option
> is disabled, which is the default. Enabling this option should allow SenseCom
> to discover and connect to your glove.
>
> ![SenseCom on Microsoft Windows - SenseCom v1.8.x+ Settings - Legacy Connections](microsoft-windows-sensecom-settings-legacy-connections.png "SenseCom on Microsoft Windows - SenseCom v1.8.x+ Settings - Legacy Connections")
> [!NOTE]
> For more detailed information and troubleshooting, consult the
> [SenseCom documentation page on SGDocs](https://senseglove.gitlab.io/SenseGloveDocs/sensecom/overview.html),
> please.
14. At this stage, SenseCom is ready and you should be able to connect to and communicate with SenseGlove devices from inside your Unreal Engine applications.
14. At this stage, SenseCom is ready and you should be able to connect to and communicate with SenseGlove devices from inside your Unreal Engine applications.
View File
@@ -3,3 +3,47 @@
To enable the SenseGlove Unreal Engine Plugin to track the gloves position and rotation in the world, you need to specify a positional tracking hardware, referred to as Wrist Tracking Hardware within the plugin. By default, if the Wrist Tracking Hardware is not explicitly set, the plugin will attempt to automatically detect it by identifying your Head-mounted display (HMD) hardware. However, this auto-detection feature may not be entirely reliable, as it is still experimental, and it may occasionally fail.
For detailed information, please visit [the Wrist Tracking Hardware and HMD auto-detection configuration section](../../plugin-configuration/plugin-settings/tracking/wrist-tracking/).
## Prerequisites
Before you even consider setting up the Wrist Tracking Settings for the SenseGlove Unreal Engine Plugin, please make sure that you have already taken all the necessary steps in the [Enabling XR_EXT_hand_tracking OpenXR Extension on VR Headsets](../enabling-xr-ext-hand-tracking-vr-headsets/) section for [PCVR](../enabling-xr-ext-hand-tracking-vr-headsets/pcvr-mode/) or [Standalone](../enabling-xr-ext-hand-tracking-vr-headsets/standalone-mode/) modes. Otherwise, there's no guarantee that the plugin can access the location data from the wrist-tracking hardware of your choice. So, as the first troubleshooting measure, we always recommend double-checking the relevant prerequisite guides above.
## Meta Quest 2 Controller
For the Meta Quest 2, whether in PCVR or Standalone mode, the functional wrist-tracking settings looks something like this:
![Setting Up the Wrist Tracking Hardware - Meta Quest 2 Controller](senseglove-wrist-tracking-settings-meta-quest-2-controller-openxr.png "Setting Up the Wrist Tracking Hardware - Meta Quest 2 Controller")
## Meta Quest Pro Controller
For the Meta Quest 3, whether in PCVR or Standalone mode, the functional wrist-tracking settings looks something like this:
![Setting Up the Wrist Tracking Hardware - Meta Quest Pro Controller](senseglove-wrist-tracking-settings-meta-quest-pro-controller-openxr.png "Setting Up the Wrist Tracking Hardware - Meta Quest Pro Controller")
## Meta Quest 3 Controller
For the Meta Quest 3, whether in PCVR or Standalone mode, the functional wrist-tracking settings looks something like this:
![Setting Up the Wrist Tracking Hardware - Meta Quest 3 Controller](senseglove-wrist-tracking-settings-meta-quest-3-controller-openxr.png "Setting Up the Wrist Tracking Hardware - Meta Quest 3 Controller")
## HTC VIVE Tracker
For the HTC VIVE Pro using VIVE Trackers, which only supports the PCVR mode, the functional wrist-tracking settings looks something like this:
![Setting Up the Wrist Tracking Hardware - HTC VIVE Tracker](senseglove-wrist-tracking-settings-htc-vive-tracker-openxrvivetracker.png "Setting Up the Wrist Tracking Hardware - HTC VIVE Tracker")
## HTC VIVE Focus 3 Wrist Tracker
The wrist-tracking settings for the HTC VIVE Focus Vision, VIVE XR Elite, and VIVE Focus 3, when using VIVE Wrist Trackers, will vary depending on the platform and configuration in use.
### PCVR Mode
When running in PCVR mode, the functional wrist-tracking settings looks something like this:
![Setting Up the Wrist Tracking Hardware - HTC VIVE Focus 3 Wrist Tracker (PCVR Mode)](senseglove-wrist-tracking-settings-htc-vive-focus-3-wrist-tracker-openxrvivetracker.png "Setting Up the Wrist Tracking Hardware - HTC VIVE Focus 3 Wrist Tracker (PCVR Mode)")
### Standalone Mode
When running in Standalone mode, the functional wrist-tracking settings looks something like this:
![Setting Up the Wrist Tracking Hardware - HTC VIVE Focus 3 Wrist Tracker (Standalone Mode)](senseglove-wrist-tracking-settings-htc-vive-focus-3-wrist-tracker-openxrvivewristtracker.png "Setting Up the Wrist Tracking Hardware - HTC VIVE Focus 3 Wrist Tracker (Standalone Mode)")
+3 -1
View File
@@ -3,6 +3,8 @@
```
SENSEGLOVE SDK LICENSE
Copyright (c) 2020 - 2025 SenseGlove
Purchase of the Product does not entitle you to ownership or a license to any
software generated by SenseGlove for use with the Product (the “Software”).
To the extent that SenseGlove, in its sole discretion, grants you access to any
@@ -29,4 +31,4 @@ conditions as to quality, fitness for purpose, non-infringement, performance or
correspondence with description and we do not offer any warranties or guarantees
in relation to the Software installation, configuration or error/defect
correction.
```
```
@@ -5,6 +5,8 @@ The SenseGlove Unreal Engine Handbook is licensed under the terms of the CC BY (
```
Attribution 4.0 International
Copyright (c) 2020 - 2025 SenseGlove
=======================================================================
Creative Commons Corporation ("Creative Commons") is not a law firm and
@@ -398,4 +400,4 @@ the avoidance of doubt, this paragraph does not form part of the
public licenses.
Creative Commons may be contacted at creativecommons.org.
```
```
@@ -5,7 +5,7 @@ The SenseGlove Unreal Engine Plugin is licensed under the terms of the MIT Licen
```
MIT License
Copyright (c) 2020 - 2024 SenseGlove
Copyright (c) 2020 - 2025 SenseGlove
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -26,4 +26,4 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
Please note that while the SenseGlove Unreal Engine Plugin is made available under the MIT License, 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 [the third-party licenses](third-party.md), please.
Please note that while the SenseGlove Unreal Engine Plugin is made available under the MIT License, 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 [the third-party licenses](third-party.md), please.
@@ -0,0 +1,34 @@
# SGBLE and SGBLExx Rust Dependency Licenses
SGBLE and SGBLExx, components of the SenseGlove SDK, are built using the Rust programming language. These libraries rely on a variety of open-source Rust crates. To ensure commercial developers can use our SDK without licensing concerns, we strictly rely on crates with **permissive licenses at runtime**.
Some dependencies, like `r-efi`, are dual-licensed and allow permissive use. The **only copyleft tool** used is `cbindgen`, which is solely a **build-time dependency**. It is employed to automatically generate C FFI bindings for SGBLE, which is implemented in pure Rust. Since `cbindgen` is not required at runtime and acts more like a transpiler (source-to-source compiler), it does **not introduce any licensing risks** for commercial applications.
Below is a comprehensive list of all third-party crates and their corresponding licenses used in SGBLE and SGBLExx:
```
(MIT OR Apache-2.0) AND OFL-1.1 AND Ubuntu-font-1.0 (1): epaint_default_fonts
(MIT OR Apache-2.0) AND Unicode-3.0 (1): unicode-ident
0BSD OR Apache-2.0 OR MIT (1): adler2
Apache-2.0 (15): ab_glyph, ab_glyph_rasterizer, accesskit_winit, codespan-reporting, dpi, gethostname, gl_generator, glutin, glutin_egl_sys, glutin_glx_sys, glutin_wgl_sys, khronos_api, owned_ttf_parser, spirv, winit
Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT (7): linux-raw-sys, linux-raw-sys, rustix, rustix, wasi, wasi, wit-bindgen-rt
Apache-2.0 OR BSD-2-Clause OR MIT (4): zerocopy, zerocopy, zerocopy-derive, zerocopy-derive
Apache-2.0 OR BSD-3-Clause OR MIT (3): btleplug, num_enum, num_enum_derive
Apache-2.0 OR BSL-1.0 (1): ryu
Apache-2.0 OR LGPL-2.1-or-later OR MIT (1): r-efi
Apache-2.0 OR MIT (286): accesskit, accesskit_atspi_common, accesskit_consumer, accesskit_macos, accesskit_unix, accesskit_windows, addr2line, ahash, android-activity, android_log-sys, android_logger, android_system_properties, anstream, anstyle, anstyle-parse, anstyle-query, anstyle-wincon, arboard, arrayvec, as-raw-xcb-connection, ash, async-broadcast, async-channel, async-executor, async-fs, async-io, async-lock, async-process, async-recursion, async-signal, async-task, async-trait, atomic-waker, atspi, atspi-common, atspi-connection, atspi-proxies, autocfg, backtrace, bit-set, bit-vec, bitflags, bitflags, block-buffer, blocking, bluez-async, bluez-generated, bumpalo, cc, cesu8, cfg-if, cgl, clap, clap_builder, clap_lex, colorchoice, concurrent-queue, core-foundation, core-foundation, core-foundation-sys, core-graphics, core-graphics-types, cpufeatures, crc32fast, crossbeam-utils, crypto-common, ctor, ctor-proc-macro, dbus, dbus-tokio, digest, displaydoc, document-features, downcast-rs, dtor, dtor-proc-macro, ecolor, eframe, egui, egui-wgpu, egui-winit, egui_glow, either, emath, enumflags2, enumflags2_derive, env_filter, env_logger, epaint, equivalent, errno, event-listener, event-listener-strategy, fastrand, fdeflate, flate2, foreign-types, foreign-types-macros, foreign-types-shared, form_urlencoded, futures, futures-channel, futures-core, futures-executor, futures-io, futures-lite, futures-macro, futures-sink, futures-task, futures-util, getrandom, getrandom, gimli, gpu-alloc, gpu-alloc-types, gpu-descriptor, gpu-descriptor-types, hashbrown, heck, heck, hermit-abi, hermit-abi, hex, home, humantime, idna, idna_adapter, image, immutable-chunkmap, indexmap, is_terminal_polyfill, itertools, itoa, jni, jni, jni-sys, jobserver, jpeg-decoder, js-sys, khronos-egl, lazy_static, libc, libdbus-sys, litrs, lock_api, log, memmap2, metal, naga, ndk, ndk-context, ndk-sys, ndk-sys, nohash-hasher, num-traits, object, once_cell, ordered-stream, parking, parking_lot, parking_lot_core, paste, percent-encoding, pin-project, pin-project-internal, pin-project-lite, pin-utils, piper, pkg-config, png, polling, ppv-lite86, pretty_env_logger, proc-macro-crate, proc-macro2, profiling, quote, rand, rand, rand_chacha, rand_chacha, rand_core, rand_core, regex, regex-automata, regex-syntax, renderdoc-sys, rustc-demangle, rustc-hash, rustversion, scoped-tls, scopeguard, serde, serde_derive, serde_json, serde_repr, serde_spanned, sha1, shlex, signal-hook-registry, smallvec, smol_str, socket2, stable_deref_trait, static_assertions, syn, tempfile, thiserror, thiserror, thiserror-impl, thiserror-impl, thread_local, toml, toml_datetime, toml_edit, ttf-parser, type-map, typenum, unicode-segmentation, unicode-width, unicode-xid, url, utf16_iter, utf8_iter, utf8parse, uuid, version_check, wasm-bindgen, wasm-bindgen-backend, wasm-bindgen-futures, wasm-bindgen-macro, wasm-bindgen-macro-support, wasm-bindgen-shared, web-sys, web-time, webbrowser, weezl, wgpu, wgpu-core, wgpu-hal, wgpu-types, winapi, winapi-i686-pc-windows-gnu, winapi-x86_64-pc-windows-gnu, windows, windows, windows-core, windows-core, windows-implement, windows-implement, windows-interface, windows-interface, windows-result, windows-result, windows-strings, windows-sys, windows-sys, windows-sys, windows-targets, windows-targets, windows-targets, windows_aarch64_gnullvm, windows_aarch64_gnullvm, windows_aarch64_gnullvm, windows_aarch64_msvc, windows_aarch64_msvc, windows_aarch64_msvc, windows_i686_gnu, windows_i686_gnu, windows_i686_gnu, windows_i686_gnullvm, windows_i686_msvc, windows_i686_msvc, windows_i686_msvc, windows_x86_64_gnu, windows_x86_64_gnu, windows_x86_64_gnu, windows_x86_64_gnullvm, windows_x86_64_gnullvm, windows_x86_64_gnullvm, windows_x86_64_msvc, windows_x86_64_msvc, windows_x86_64_msvc, write16, x11rb, x11rb-protocol
Apache-2.0 OR MIT OR Zlib (12): bytemuck, bytemuck_derive, cursor-icon, glow, miniz_oxide, objc2-app-kit, objc2-core-bluetooth, objc2-core-foundation, objc2-core-graphics, objc2-io-surface, raw-window-handle, xkeysym
BSD-2-Clause (1): arrayref
BSD-3-Clause (3): jni-utils, tiny-skia, tiny-skia-path
BSL-1.0 (2): clipboard-win, error-code
CC0-1.0 (1): hexf-parse
ISC (1): libloading
MIT (91): android-properties, block, block2, block2, bytes, calloop, calloop-wayland-source, cfg_aliases, combine, dashmap, dispatch, dlib, endi, generic-array, glutin-winit, is-terminal, libredox, malloc_buf, memoffset, mio, nix, objc, objc-sys, objc2, objc2, objc2-app-kit, objc2-cloud-kit, objc2-contacts, objc2-core-data, objc2-core-image, objc2-core-location, objc2-encode, objc2-foundation, objc2-foundation, objc2-link-presentation, objc2-metal, objc2-quartz-core, objc2-symbols, objc2-ui-kit, objc2-uniform-type-identifiers, objc2-user-notifications, orbclient, ordered-float, quick-xml, quick-xml, redox_syscall, redox_syscall, sctk-adwaita, serde-xml-rs, simd-adler32, slab, smithay-client-toolkit, smithay-clipboard, strict-num, strsim, strum, strum_macros, synstructure, tiff, tokio, tokio-macros, tokio-stream, tokio-util, tracing, tracing-attributes, tracing-core, uds_windows, wayland-backend, wayland-client, wayland-csd-frame, wayland-cursor, wayland-protocols, wayland-protocols-plasma, wayland-protocols-wlr, wayland-scanner, wayland-sys, winnow, x11-dl, xcursor, xdg-home, xkbcommon-dl, xml-rs, zbus, zbus-lockstep, zbus-lockstep-macros, zbus_macros, zbus_names, zbus_xml, zvariant, zvariant_derive, zvariant_utils
MIT OR Unlicense (7): aho-corasick, byteorder-lite, memchr, same-file, termcolor, walkdir, winapi-util
MPL-2.0 (1): cbindgen
N/A (2): sgble, sgblueman
Unicode-3.0 (19): icu_collections, icu_locid, icu_locid_transform, icu_locid_transform_data, icu_normalizer, icu_normalizer_data, icu_properties, icu_properties_data, icu_provider, icu_provider_macros, litemap, tinystr, writeable, yoke, yoke-derive, zerofrom, zerofrom-derive, zerovec, zerovec-derive
Zlib (2): foldhash, slotmap
```
For detailed terms of use, please refer to the license files in each project's upstream repository.
+1
View File
@@ -5,6 +5,7 @@ Please note that while the SenseGlove Unreal Engine Plugin is made available und
The following third-party software are used and shipped with the SenseGlove Unreal Engine Plugin:
- [The SenseGlove SDK (a.k.a. SenseGlove Backend Libraries, or SenseGlove Core Libraries)](senseglove-sdk.md)
- [SGBLE and SGBLExx Rust Dependencies](sgble-sgblexx-rust-dependencies.md)
- [The Boost C++ Libraries](boost-cpp-libraries.md)
- [The Serial Communication Library](serial-communication-library.md)
@@ -17,16 +17,17 @@ Here are a few important notes to consider:
</div>
> [!CAUTION]
> As noted in the
> [v2.1.0 release changelog](../../appendix/changelog.html), since this release
> enabling the Meta XR plugin, —and potentially the VIVE OpenXR plugin—
> alongside the SenseGlove Unreal Engine Plugin in the same project will disrupt
> the OpenXR functionality provided by the SenseGlove Unreal Engine Plugin,
> rendering it unusable.
>
> `Although the SenseGlove OpenXR implementation is fully compatible with the IOpenXRHMD interface and the FOpenXRHMD XRTrackingSystem, it is not compatible with the FOculusXRHMD backend provided by the Meta XR plugin. The same issue likely applies to the VIVE OpenXR plugin. So, if these plugins are enabled in your project, the SenseGlove OpenXR will not function as intended, effectively breaking the plugin's functionality. It seems these plugins are necessary in order to make the fallback to the hand-tracking feature work on Android. While we may add support and compatibility with Meta XR and VIVE OpenXR plugins in the future, for the time being, if your project requires these plugins, we advise continuing with the v2.0.x release of the SenseGlove Unreal Engine plugin until this issue is addressed.`
>
> This also means that although the SenseGlove Unreal Engine Plugin is able to
> produce FXRMotionControllerData for SenseGlove devices just fine, the
> hand-tracking on Android won't work. So, the fallback to hand-tracking
> mechanism on Android is broken at the moment.
> As of the `v2.1.0` release of the SenseGlove Unreal Engine Plugin, the
> `XR_EXT_hand_tracking` OpenXR extension is required for the plugin to
> function. Without this OpenXR extension, the plugin won't output any glove
> data.
> Unreal Engine provides `XR_EXT_hand_tracking` support through the `OpenXR`
> and `OpenXRHandTracking` plugins. However, for this to function on Android
> in standalone mode in conjunction with other plugins such as `Meta XR` or
> `ViveOpenXR` plugins, or
> [hand-tracking as a fallback mechanism when no glove data is available](../../plugin-configuration/plugin-settings/tracking/#bfallbacktohandtrackingifnoglovedetected),
> [extra configuration steps and considerations are required](../../getting-started/enabling-xr-ext-hand-tracking-vr-headsets/standalone-mode/).
## Third-Party Tutorials
This [Android Standalone Mode Deployment tutorials series](third-party-tutorials/) covers how to build and deploy Unreal Engine `5.5` Projects APK to Android and Meta Quest 3S/3/Pro/2 in standalone mode. Furthermore, it covers the how-to on enabling OpenXR hand-tracking on Android with Meta XR (Quest 3S/3/Pro/2) and HTC VIVE OpenXR (Focus Vision/XR Elite/Focus 3) plugins.
@@ -0,0 +1,29 @@
# Third-Party Tutorials: Android Standalone Mode Deployment
## Build & Deploy Unreal Engine 5.5 Projects APK to Android & Meta Quest 3S/3/Pro/2 in Standalone Mode
This video will guide you through the process of building and deploying an Unreal Engine 5.5 project (or any version newer than `4.24`) to Android Standalone Mode for Meta Quest 2 and Quest 3 devices. The steps outlined here should also apply to other Android-based VR headsets.
It will show you where and how to download and install the necessary prerequisites, such as the Android SDK, NDK, Java Development Kit (JDK), and Microsoft Visual Studio. Next, it will configure both the development environment and Unreal Engine for a successful build. Finally, it will walk you through deploying your project to your VR headset and troubleshooting common errors to ensure a smooth experience.
<div style="margin: 0 auto; width: 560px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/EClbEbNcl4k" frameborder="0" allowfullscreen></iframe>
</div>
## Unreal Engine OpenXR Hand-Tracking on Android with Meta XR (Quest 3S/3/Pro/2) and HTC VIVE OpenXR (Focus Vision/XR Elite/Focus 3) Plugins
The OpenXR hand-tracking provided by Epic won't work out of the box on Android when projects are deployed in standalone mode to HMDs such as Meta Quest or HTC VIVE devices.
In this tutorial you'll learn how to deploy your Unreal Engine projects to Android with functional hand-tracking on the following head-mounted displays:
- Meta Quest 3S
- Meta Quest 3
- Meta Quest Pro
- Meta Quest 2
- HTC VIVE Focus Vision
- HTC VIVE XR Elite
- HTC VIVE Focus 3
<div style="margin: 0 auto; width: 560px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/BWd3MwtfTJE" frameborder="0" allowfullscreen></iframe>
</div>
+1
View File
@@ -5,6 +5,7 @@
| Handbook Revision | {{ #sg-handbook-revision }} |
| Handbook Revision URL | [{{ #sg-handbook-revision-url }}]({{ #sg-handbook-revision-url }}) |
| Handbook PDF URL | [{{ #sg-handbook-pdf-url }}]({{ #sg-handbook-pdf-url }}) |
| Handbook ePub URL | [{{ #sg-handbook-epub-url }}]({{ #sg-handbook-epub-url }}) |
| Git Branch | {{ #sg-git-branch }} |
| Git Tag | {{ #sg-git-tag }} |
| Git Commit | {{ #sg-git-commit }} |
@@ -30,6 +30,167 @@ When streaming from a PC to Meta Quest devices, the default refresh rate is set
![Meta Quest Link - Framerate settings for the Unreal project](project-rendering-settings-framerate.png "Meta Quest Link - Framerate settings for the Unreal project")
## HTC VIVE Specific Optimizations in Standalone Mode
Headsets like the HTC VIVE Focus 3 and Focus Vision have larger framebuffers, higher eye-buffer size, wider fields of view (FOV), and varying refresh rates compared to HMDs like the Meta Quest series. As a result, performance can differ when running the same content across these devices.
### Setting a Custom Pixel Density
If performance on the Focus 3 or Focus Vision is lower than on the Quest, we recommend adjusting the **Pixel Density** to approximately `0.8` (or a value suited to your content). This reduces the eye buffer size, and matches the resolution of Quest 2, hence increasing FPS:
![HTC VIVE Specific Optimizations in Standalone Mode - Setting a custom pixel density](htc-vive-specific-optimizations-standalone-mode-set-pixel-density.png "HTC VIVE Specific Optimizations in Standalone Mode - Setting a custom pixel density")
### Setting a Lower Refresh Rate
The `ViveOpenXR` plugin provides various Blueprint functions to query the supported refresh rates and adjust the current refresh rate according to your needs:
![HTC VIVE Specific Optimizations in Standalone Mode - ViveOpenXR plugin refresh rate Blueprint functions](htc-vive-specific-optimizations-standalone-mode-viveopenxr-refresh-rate-blueprint-functions.png "HTC VIVE Specific Optimizations in Standalone Mode - ViveOpenXR plugin refresh rate Blueprint functions")
But, before you'd be able to make these adjustments you have to enable the relevant settings by navigating to `Edit > Project Settings > Plugins > Vive OpenXR` and ensure the `Enable Display Refresh Rate` option is checked. This option enables the OpenXR extension `XR_FB_display_refresh_rate` support which allows your application to dynamically adjust the display refresh rate in order to improve the overall user experience. Please note that You need to restart the engine to apply new settings after changing this setting.
![HTC VIVE Specific Optimizations in Standalone Mode - Enable Display Refresh Rate Editor Restart Prompt](htc-vive-specific-optimizations-standalone-mode-enable-display-refresh-rate-editor-restart-prompt.png "HTC VIVE Specific Optimizations in Standalone Mode - Enable Display Refresh Rate Editor Restart Prompt")
In order to query all the available display refresh rates use the Blueprint function `Enumerate Display Refresh Rates`:
![HTC VIVE Specific Optimizations in Standalone Mode - Enumerating the available display refresh rates](htc-vive-specific-optimizations-standalone-mode-enumerate-display-refresh-rates.png "HTC VIVE Specific Optimizations in Standalone Mode - Enumerating the available display refresh rates")
At the moment with most devices it returns `75.0` and `90.0` hz values.
To change the current display refresh rate use the Blueprint function `Request Display Refresh Rate`:
![HTC VIVE Specific Optimizations in Standalone Mode - Changing the current display refresh rate](htc-vive-specific-optimizations-standalone-mode-request-display-refresh-rate.png "HTC VIVE Specific Optimizations in Standalone Mode - Changing the current display refresh rate")
To obtain the current display refresh rate use the Blueprint function `Get Display Refresh Rate`:
![HTC VIVE Specific Optimizations in Standalone Mode - Obtaining the current display refresh rate](htc-vive-specific-optimizations-standalone-mode-get-display-refresh-rate.png "HTC VIVE Specific Optimizations in Standalone Mode - Obtaining the current display refresh rate")
If you're looking to squeeze more performance out of your HTC VIVE HMD in standalone mode, consider lowering the target refresh rate from `90hz` to `75hz`. This can help reduce GPU workload and improve overall stability while still maintaining a somewhat smooth experience.
### HTC VIVE Optimal Rendering Settings
As a last resort consider adding the following rendering settings to your project's `DefaultEngine.ini` under the `/Script/Engine.RendererSettings` section and experiment with them until you obtain your desired results:
```ini
[/Script/Engine.RendererSettings]
r.Mobile.DisableVertexFog=True
r.Mobile.AllowDitheredLODTransition=False
r.Mobile.AllowSoftwareOcclusion=False
r.Mobile.VirtualTextures=False
r.DiscardUnusedQuality=False
r.AllowOcclusionQueries=True
r.MinScreenRadiusForLights=0.030000
r.MinScreenRadiusForDepthPrepass=0.030000
r.MinScreenRadiusForCSMDepth=0.010000
r.PrecomputedVisibilityWarning=False
r.TextureStreaming=True
Compat.UseDXT5NormalMaps=False
r.VirtualTextures=False
r.VirtualTexturedLightmaps=False
r.VT.TileSize=128
r.VT.TileBorderSize=4
r.vt.FeedbackFactor=16
r.VT.EnableCompressZlib=True
r.VT.EnableCompressCrunch=False
r.ClearCoatNormal=False
r.ReflectionCaptureResolution=128
r.ReflectionEnvironmentLightmapMixBasedOnRoughness=True
r.ForwardShading=True
r.VertexFoggingForOpaque=True
r.AllowStaticLighting=True
r.NormalMapsForStaticLighting=False
r.GenerateMeshDistanceFields=False
r.DistanceFieldBuild.EightBit=False
r.GenerateLandscapeGIData=False
r.DistanceFieldBuild.Compress=False
r.TessellationAdaptivePixelsPerTriangle=48.000000
r.SeparateTranslucency=True
r.TranslucentSortPolicy=0
TranslucentSortAxis=(X=0.000000,Y=-1.000000,Z=0.000000)
r.CustomDepth=1
r.CustomDepthTemporalAAJitter=True
r.PostProcessing.PropagateAlpha=2
r.DefaultFeature.Bloom=False
r.DefaultFeature.AmbientOcclusion=False
r.DefaultFeature.AmbientOcclusionStaticFraction=True
r.DefaultFeature.AutoExposure=False
r.DefaultFeature.AutoExposure.Method=0
r.DefaultFeature.AutoExposure.Bias=1.000000
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.EyeAdaptation.EditorOnly=False
r.DefaultFeature.MotionBlur=False
r.DefaultFeature.LensFlare=False
r.TemporalAA.Upsampling=False
r.SSGI.Enable=False
r.AntiAliasingMethod=3
r.DefaultFeature.LightUnits=1
r.DefaultBackBufferPixelFormat=4
r.Shadow.UnbuiltPreviewInGame=True
r.StencilForLODDither=False
r.EarlyZPass=3
r.EarlyZPassOnlyMaterialMasking=False
r.DBuffer=True
r.ClearSceneMethod=1
r.VelocityOutputPass=0
r.Velocity.EnableVertexDeformation=0
r.SelectiveBasePassOutputs=False
bDefaultParticleCutouts=False
fx.GPUSimulationTextureSizeX=1024
fx.GPUSimulationTextureSizeY=1024
r.AllowGlobalClipPlane=False
r.GBufferFormat=1
r.MorphTarget.Mode=True
r.GPUCrashDebugging=False
vr.InstancedStereo=True
r.MobileHDR=False
vr.MobileMultiView=True
r.Mobile.UseHWsRGBEncoding=True
vr.RoundRobinOcclusion=False
vr.ODSCapture=False
r.MeshStreaming=False
r.WireframeCullThreshold=5.000000
r.RayTracing=False
r.RayTracing.UseTextureLod=False
r.SupportStationarySkylight=True
r.SupportLowQualityLightmaps=True
r.SupportPointLightWholeSceneShadows=True
r.SupportAtmosphericFog=True
r.SupportSkyAtmosphere=True
r.SupportSkyAtmosphereAffectsHeightFog=False
r.SkinCache.CompileShaders=False
r.SkinCache.DefaultBehavior=1
r.SkinCache.SceneMemoryLimitInMB=128.000000
r.Mobile.EnableStaticAndCSMShadowReceivers=True
r.Mobile.EnableMovableLightCSMShaderCulling=True
r.Mobile.AllowDistanceFieldShadows=True
r.Mobile.AllowMovableDirectionalLights=True
r.MobileNumDynamicPointLights=4
r.MobileDynamicPointLightsUseStaticBranch=True
r.Mobile.EnableMovableSpotlights=False
r.Mobile.EnableMovableSpotlightsShadow=False
r.GPUSkin.Support16BitBoneIndex=False
r.GPUSkin.Limit2BoneInfluences=False
r.SupportDepthOnlyIndexBuffers=True
r.SupportReversedIndexBuffers=True
r.LightPropagationVolume=False
r.Mobile.AmbientOcclusion=False
r.GPUSkin.UnlimitedBoneInfluences=False
r.GPUSkin.UnlimitedBoneInfluencesThreshold=8
r.Mobile.PlanarReflectionMode=0
bStreamSkeletalMeshLODs=(Default=False,PerPlatform=())
bDiscardSkeletalMeshOptionalLODs=(Default=False,PerPlatform=())
VisualizeCalibrationColorMaterialPath=None
VisualizeCalibrationCustomMaterialPath=None
VisualizeCalibrationGrayscaleMaterialPath=None
r.Mobile.AntiAliasing=3
r.Mobile.FloatPrecisionMode=2
r.OpenGL.ForceDXC=0
r.DynamicGlobalIlluminationMethod=1
r.ReflectionMethod=1
r.Shadow.Virtual.Enable=0
r.Lumen.TranslucencyReflections.FrontLayer.EnableForProject=False
```
## Game User Settings and Engine Scalability Settings
Unreal Engine offers predefined graphics quality profiles known as Engine Scalability Settings, which can be easily adjusted to optimize performance. These settings can be modified directly within the Unreal Editor through the Settings menu on the toolbar or dynamically at runtime using code. Importantly, these settings are universal, meaning changes made in the Unreal Editor will apply to the game when run in PIE (Play In Editor) mode, and settings adjusted via code will also affect the editor itself.
@@ -0,0 +1,20 @@
# Third-Party Tutorials: Optimizing Your Project for Higher FPS
## Optimizing Unreal Engine VR Projects for Higher Framerates (Meta Quest, HTC VIVE, FFR, ETFR, NVIDIA DLSS, AMD FSR, and Intel XeSS Tips Included!)
This beginner-friendly tutorial, covers how to significantly boost the performance of your Unreal Engine VR projects, whether you're building for standalone (mobile) or PCVR (desktop) on devices such as Meta Quest, HTC VIVE, Varjo, or Valve Index.
It covers step-by-step how to:
- Convert a regular project into a VR-ready experience.
- Optimize for both standalone (Android) and PCVR (Windows) platforms.
- Tweak key rendering, lighting, and texture settings for smoother gameplay.
- Configure Meta XR and HTC VIVE OpenXR plugins to fine-tune settings for the best performance possible.
- Utilize and fine-tune engine scalability settings.
- Explore powerful optimization features like DLSS, FSR, XeSS, and Foveated Rendering
Even if youre new to VR development, this guide breaks it down with visuals, clear examples, and actionable tips to take your framerate from sluggish to silky smooth.
<div style="margin: 0 auto; width: 560px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/67CZqMrAOns" frameborder="0" allowfullscreen></iframe>
</div>

Some files were not shown because too many files have changed in this diff Show More