All notable changes to this package will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- REST: Added map copy, align and stitch requests
- REST: Added device model logging to improve future localization method development
- Core: Added configurable
solverType
to enable localization method selection - Core: Added new map construction parameters:
locFilter
, disabled by defaultfeatureFilter
, 0 by defaultmapCompression
, 0 by default
- Core: Android plugin; user validation (for real-time mapping and other Enterprise features)
- Unity to 2022.3.10f1
- Updated Unity packages
- Core: Updated plugin interface for
LocalizeImage()
, now returns a struct with the pose data and confidence value - Samples: Now use
TrackedPoseDriver
in favour of the deprecatedARPoseDriver
- Core: Added native plugins for Magic Leap 2 and HoloLens 2
- Developer Portal: Password reset functionality
- Core: On-server localization now works when the map construction has reached the
sparse
state
- Core: Map construction would sometimes fail with a dataset that worked with 1.18.1
- Samples: Changed all sample scenes to use the deprecated
ARPoseDriver
, until Unity fixes theTrackedPoseDriver
in AR Foundation - Samples: Sample scenes on Android sometimes start with a black screen, with errors in adb console: "Failed to begin a new frame, ProcessSkybox will not render the skybox. Skipped rendering frame because GfxDevice is in invalid state (device lost)". Deleting the Library folder in the Unity project seems to fix this. This problem is related to Unity 2022 and AR Foundation.
- Core: Real-time on-device mapping (requires Enterprise license)
- Core: optimized memory usage and speed
- Core: "Edit" map type for edited maps
- Samples: Magic Leap 2 samples (on-device localization and real-time mapping require Enterprise license)
- Samples: Added GeoPose localizer option to Mapper settings
- Samples: RealtimeMappingSample scene
- Samples: "Move AR Camera instead of AR Space" sample
- Support for Immersal China server
- Unity to 2022.3 LTS
- Removed Lumin plug-in and dropped Magic Leap 1 support
- Removed unused
param1..4
from the plug-in interface - Removed old Unity NavMeshComponents in favour of AI Navigation package
- Samples: Updated all sample scenes to use the new input system and XRRig
- Core: Handedness fix to GeoPose localizer
- Core: Minor memory leaks
- Core:
ARMap::FreeMap()
bugs with map handles, should now behave correctly in multi-scene scenarios and in Unity Editor - Core: REST requests now return the correct amount of bytes
- Samples: ContentPlacement sample crash at startup when no content.json file was present
- Samples: Removed Immersal logo from being a RaycastTarget
- Samples: Mapper didn't clear loaded maps on logout
ARMap::LoadMap()
problems and semi-random crashes in Unity Editor- Other minor bug fixes
- Samples: Auto-mapper max. images and interval to Mapper app's developer settings
- Samples:
ImmersalLogos
folder and examples in the scenes on how to use them
- Cloud Service: max. number of map IDs in localization requests is now 32 (was 8)
- Unity to 2021.3.17f1
- Core: Code signed macOS plugin
- Core/Cloud Service: Localization improvements, less false positives
- Cloud Service: Improved memory usage with large maps
- Core: Removed unnecessary TMPro reference from a script
- Core: Fixed editor scripts not to be included in builds on Unity 2022
- Core: Android x86_64 plugin for Magic Leap 2 (FOR ENTERPRISE LICENSE ONLY, contact sdk@immersal.com for licensing requests)
- Samples: iOS post process script to turn off bitcode
- Core:
LoadMap()
inARMap
now calls the plugin asynchronously to avoid UI freezes with large maps. The function doesn't returnmapHandle
anymore, but it's still available throughARMap.mapHandle
. - Samples: Updated Unity version to 2021.3.16f1 and AR Foundation to 4.2.7
- Samples: Cleaned up and updated some Unity packages
- Samples: ARMap errors in the Unity Editor, don't affect builds on device
- Cloud Service: Re-enabled dense & textured meshes
- Core: Memory usage fixes
- Core: Improved map construction and localization pipeline for large maps
- Core: Apple Silicon support in the macOS plugin
- REST: Map construction parameter
featureType
(0 == 1.16 and older, 2 == 1.17+) - REST: Get/set map access token
- Samples: MultiPlayer sample, because it was using the old UNet HLAPI not supported by Unity anymore
- Cloud Service: Dense and textured maps are currently not constructed for v1.17 maps
- Samples: Updated Unity version to 2021.3 LTS
- Samples: Updated AR Foundation packages to v4.2.6 to fix iOS 16 problems
- Core: Improved tracking quality measurement
- Core: Fixed OnPoseFound event not always firing
- Developer Portal: Support for uploading Leica BLK2GO .b2g files for map construction (FOR ENTERPRISE LICENSE ONLY, contact sdk@immersal.com for licensing requests)
- Core & Samples: A native UWP ARM64 plugin for HoloLens 2 +
HLLocalizer
sample (FOR ENTERPRISE LICENSE ONLY, contact sdk@immersal.com for licensing requests) - Mapper: Added license text
- Core: Refactored
ImmersalSDK.cs
to haveRegisterLocalizer()
andUnRegisterLocalizer()
functions
- Several bug fixes
- Cloud Service: Restoring map data to the workspace now supports additive restore keeping old data. This allows for easy combination of existing maps.
- Samples: Added a Debug Console to the Mapper app
- Samples: Added a warning to the Mapper app login screen if the device has no network connection
- Core: Fixed an issue with ARMap where maps were loaded twice
- Samples: Fixed a bug in the Mapper app when aligning maps without changing the root map
- Cloud Service: Now uses a right-handed coordinate system
- Core: Now uses a right-handed coordinate system
- Core: Core scripts now convert from right-handed coordinate system to Unity's left-handed coordinate system
- Samples: The Mapper app now only shows the 50 first maps in the Map Download List with an option to load more.
- v1.15.0 support for Nreal, HWAR, Magic Leap, and HoloLens will be updated shortly. These branches have not yet been updated at release.
- Samples:
Mapper
; 'automatic capture' experimental feature was on by default, fixed
- Core:
ARSpace
; addedOnDestroy()
housekeeping
- Samples: Job / queue system in
Mapper
and some other samples was broken, fixed
- Graduated Magic Leap plugin in the core SDK
- Developer Portal: WebXR viewing mode for Android Chrome (prerequisites: up-to-date Chrome,
chrome://flags/#webxr-incubations
'Enabled')
- Cloud Service: Faster map construction
- Core: Recompiled and minified plugins, re-added ARMv7 support for Android (useful for Mono builds)
- Samples: Updated to Unity 2020.3 LTS
- Mapper: VGPS was not working
- REST: On-server localization now returns the localization time on the server
- Core: Optimized plug-in sizes
- Samples: Cleaned navigation samples
- Core: Plugin image compression level (0..9)
- Core:
ARSpace
;LoadAndInstantiateARMap()
improvements, overloaded version for on-server localizer use cases - Samples:
Mapper
; added image limit warning - Samples:
Mapper
; tracker alignment support - Developer Portal: Metadata download
- Core: Removed
bank
and other unused stuff for the REST API - Core:
OnPoseFound/Lost
events are now public - Core: Removed
MapToEcecGet()
, now uses map metadata instead - Samples: Now uses a binary endpoint for loading the map data instead of Base64
- Developer Portal: allow max. 8 jobs for alignment/stitching
- Developer Portal: email address changed to user ID
- Core: REST API; Map load workaround for pre 1.12 servers
- Core:
ARMap
; fixed point cloud shader slowness with multiple points - Bug fixes and general SDK clean up
- Core: Updated point cloud shader to fix errors on some Android devices
- Developer Portal: UI improvements
- SDK uses
mapId
everywhere instead ofmapHandle
- Cloud Service: Map alignment stored in the new metadata as a Vector3(tx, ty, tz) and Quaternion(qw, qx, qy, qz). Old ecef endpoint will be deprecated later
- Cloud Service: Default map alignment based on captured GPS coordinates and stored in ECEF coordinates
- Cloud Service: Faster map stitching
- Core: Added Geo Pose localizer to
ARLocalizer
- Core: Removed old v1.10 localizer from the plugin to make it smaller
- Core: Made
CaptureImage()
faster - the image connectivity is not tested if not specified, was useless for on-server localization anyway - Core: Removed old pointcloud3d shader and support for it in scripts
- Samples: Unified
Mapper
to useARLocalizer
,ARMaps
andARSpace
like the rest of the samples - Samples: Unified
MapDownloadSample
, which also now supports loading multiple maps
- SDK: Lots of clean up and minor fixes
- Magic Leap: fixed compiling when using Unity 2020.2, AR Foundation 4 and ML XR Plugin 6
- Cloud Service: New map metadata stored with all new maps
- Cloud Service: New REST API endpoints to get and set metadata and reset map alignment in metadata
- Cloud Service: New Align Maps feature aligns maps and updates their metadata. Similar to stitching maps but with no new map as output
- Cloud Service: Coverage .json log file for map stiching and alignment jobs
- Core: New pointcloudDisk shader with adjustable point size and 2D/3D modes
- Core: Added a helper function
LoadAndInstantiateARMap()
inARSpace
for easier runtime map initialization - Core:
LoadMapAsync()
now fetches the map metadata - Core:
ARMap
functionality to load/save/reset map alignment metadata - Core: New
AR Map Downloader
tool to automatically download and set up maps in scenes - Samples: Added "Check image connectivity" toggle to
Mapper
workspace settings
- Core: Moved the point cloud shader resource to core from samples
- Core: Android plugin; removed armeabi-v7a support
- Core: Simplified REST API, more robust error handling
- Samples: Mapping App; "Use tracker poses" moved under Developer Settings
- Core: Fixed rotation mapping in
RotMapToEcef()
andRotEcefToMap()
. - Core:
ARLocalizer
now correctly fetches ECEF when the on-server localizer is used - Core:
RESTJobsAsync
; addeduseToken
inJobLoadMapAsync
andJobEcefAsync
to work with public maps
- Samples:
Mapper
had an unfinishedLocalizeGeoPose()
function, it has now been properly implemented. It is still an experimental feature and can be tested settingm_UseGeoPose
totrue
inMapperBase
(and switching to the on-server localizer in Mapper). This feature will be better supported in the upcoming v1.12 SDK release.
- Core: Fixed a minor compatibility problem with the latest GitHub samples
- Core: Updated all plugins again
- Core: Improvements to the on-server localizer in
ARLocalizer
andARMap
- Core: Updated all plugins
- Core: New default localizer with improved performance
- REST API: New functions using async/await instead of Unity coroutines
- Switched to
System.Net.HttpClient
everywhere, because of random problems withUnityWebRequest
on iOS - General bug fixes
- REST API: proper URI identifiers
- REST API: new endpoints for image capture and on-server localization, where the image payload can be sent as binary instead of a Base64-encoded string.
- Immersal Mapper / REST API: Use tracker poses (beta)
- Immersal Mapper: Smaller filesize in image uploads
- Immersal Mapper: Localization and capturing is now faster especially on older devices, such as iPhone 7 and beyond
- Samples: Magic Leap localization support and a reference Unity project, see here
- Core: OnPoseFound and OnPoseLost events in
ImmersalSDK
, OnFirstLocalization event inARMap
- Core:
ARLocalizer
now has start/stop/pause/resume methods
- Core: Localizer does not return the map id anymore. Instead, it returns a map handle like an earlier SDK version did.
- Immersal Mapper: Updated UI
- Samples: Restructured Unity core package and the Unity sample project.
ARMap
,ARLocalizer
, and other essential scripts are now part of the core package. This should make future SDK updates to new versions easier. - Samples: Code cleanup
- Samples: Reworked the
pointcloud3d
shader to support point size attribute on OpenGL, Vulkan and Metal platforms - Samples: Mapper app sample updated to the latest version
- Samples: Nreal Light localization support, see here
- Samples: Progress bar for map loading
- Samples: Huawei AR Engine support moved to its own branch
- Samples: Api Compatibility Level was errorneously set to .NET 4.x, switched back to .NET Standard 2.0
- Samples: Mapper now stores queued images into the persistent data directory to avoid out-of-memory crashes
- Samples: Updated to Unity 2019.4.9f1 LTS and AR Foundation 4.0.8
- Samples:
NativeBindings
errors in Unity Editor
- Core: Improved localization robustness
- Core: REST API clean-up; error, start, progress and complete callbacks
- Core: REST API; Map construct detail level
- Samples: Native double precision GPS coordinates for iOS and Android
- Samples: Image upload progress bar to Mapper UI
- Samples: Map construct detail level in Mapper
- Samples: Visual compass bearing in Mapper
- Core: Smaller plug-in size
- Core: Changed map hashes from MD5 to SHA256
- Samples: Updated to Unity 2019.4 LTS and AR Foundation 4
- Samples:
ARMap.cs
crash problems in Unity Editor - Samples: Bug fixes to Huawei AR sample scripts
- Server / Developer Portal: Support for textured meshes (both grayscale and RGB).
- Samples:
ARLocalizer.cs
,ARSpace.cs
&ARMap.cs
: support for uniform scaling of maps. - Samples:
ARLocalizer.cs
now hasMapChanged
andPoseFound
events.
- Plugin: image capturing is now a lot faster.
- Server / Developer Portal: Support for private/public maps, copying maps to other accounts, searching for public maps by user and/or GPS location, and resetting the private user token.
- Map file format is not compatible with v1.3 anymore. v1.5.0 plugin can still load maps done with v1.3.
- MD5 hashing of map files changed to SHA256
- MD5 hashing of map files
- Huawei AR Engine selection can be done at runtime.
- SDK and samples now support Huawei AR Engine SDK as an alternative to AR Foundation (not included, can be downloaded here.
ARLocalizer.cs
: Toggle to reset localizer filtering when the last localized map ID changes -- might be useful in a multimap scenario, where maps are not aligned to each other on purpose.ARLocalizer.cs
: MadelastLocalizedMapId
public.- Graph-based navigation example, initial version.
- Android now properly requests for location (GPS) permissions.
- Generated maps are now 80% smaller.
- The native plugins are now 75% smaller.
- Both the localization accuracy and speed have been improved.
- Plugin, Server, Mapper sample: GPS support. When the GPS toggle is on, the list of maps will be populated only by maps generated within a 200 meter radius. When mapping (taking pictures), the latitude/longitude/altitude is saved with the image and used to create a geopose for the constructed map. Also, the on-server localizer accepts lat/lon as parameters for faster retrieval of the map to relocalize against to.
- Plugin, Server, Mapper sample: Visual GPS (VGPS) / geopose support. If geopose data is saved with the map, the localize functions will return the device's geolocation (GPS latitude/longitude/altitude coordinates). This is approximately 10.000 times faster than satellite-based GPS, more accurate, and works indoors! As an added benefit, there is no need to have Location Services enabled. Geopose (geolocation with orientation) can also be calculated.
- On-server localizer now accepts RGB24 images, too. Might be useful with Web AR / headsets, if an 8-bit grayscale PNG is not available or is too costly to generate.
- Developer Portal and Mapper sample: Added support for a 'sparse' processing state. Generated maps are downloadable as
.bytes
andsparse.ply
files at this point and relocalization is possible. Thedense.ply
will be generated in the background and will be available on the Developer Portal when the processing state is "done". This will speed up the map generation a lot! - Increased the accuracy of dense map point cloud files.
ARLocalizer.cs
: "Burst mode" is now also run when the app enters foreground.ARLocalizer.cs
andARHelper.cs
: Fixed rotation for different screen orientations, so you can publish in portrait/landscape/auto.- Plugin: Localizer returns -1 handle if no maps are loaded.
- Renamed Immersal AR Cloud SDK to just Immersal SDK.
- Samples: Updated project to Unity 2019.2.20f1.
- Samples: Added dependency to AR Foundation 3.0.1.
- Changed
mapHandle
in the core and samples scripts tomapId
, as the localizer now returns the real database ID for the map (if available). - Map format: Maps generated with the SDK v1.3 are not compatible with earlier versions of the SDK. However, maps generated with older versions continue to work with v1.3.
- Developer Portal: Map stitching; you can select multiple maps and combine them into one new map (assuming the maps have overlapping features).
- Samples: Mapping App; continue updating older maps by restoring the map source data.
- Samples: Mapping App; you can now delete maps in the app.
- SDK: Mapping performance improvements.
- SDK: REST API updated and cleaned up.
- Samples: The "AR Cloud space" rotation and position can now be get from
ARSpace.cs
instead ofARLocalizer.cs
, which was buggy anyway and returned only the first map's pose, thus giving incorrect results when using multimaps. - Samples: Navigation and multiplayer samples fixed to work with multimaps.
- Samples: UI fixes
- Samples: Updated project to Unity 2019.2.8f1 and AR Foundation 3.0.0 preview.3, should continue to work just fine with older versions.
- Developer Portal: Updated EULA.
- A simple Multiplayer Sample using Unity Networking (Note: You need to enable Multiplayer in Unity Services).
- Variable lighting adaptation
- Android 64-bit support
- Map Download Sample (previously SampleScene) and
MapListController.cs
are back by popular demand. - On-server localization
- Gravity-based map alignment when constructing a new map.
- Mapping and localization now work on iPad Mini (probably fixes problems with various Android devices as well).
- Point cloud renderer and runtime map loading fixes.
- On-device localization was sometimes giving false results.
- Supported Unity version is now 2019.2.3f1+, should work on 2018 with corresponding AR Foundation packages.
- Android plugin is now an
.aar
file with both 32-bit and 64-bit binaries.
- Samples: Mapping App now notifies the user if sequential captured images can be connected by their matching feature points.
- Samples: C# API updated for AR Foundation 1.5 / 2.2.
- Samples: Point cloud preview bugs fixed.
- Samples: Now distributed in a separate GitHub repository.
- SDK: Requires Unity 2018.4 LTS.
- SDK: Now distributed as a .unitypackage (available on the Developer Portal).
- SDK: Improved multimap support in Unity Editor.
- SDK:
ARLocalizer.cs
finds the first pose much faster.
- Samples: Improved Mapping App with separate Workspace and Visualize modes.
- Samples: Changes to sample scenes to support multimap feature.
- SDK:
ARSpace.cs
functionality moved toARMap.cs
to clarify multimap workflow.
- Samples: Downsample option in
ARLocalizer.cs
. Uses less memory and is faster. - Samples: Multimap loading support in Mapping App.
- Samples: RGB Image Capture Toggle in Mapping App.
- Developer Portal: Delete map function.
- SDK: Initial multimap support.
- SDK: Fixed camera intrinsics calculation (fixes screen space Y offset bug on iOS devices).
- SDK:
ARCloud.cs
script removed,ARSpace.cs
has the same functionality. - Known issue in Samples: Removed the drop-down menu for dynamic map loading. It needs to be completely reworked to support multimaps.
- Samples: Persistent Content Placement Sample Scene.
- Samples: Pose Filtering in SampleScene.
- Developer Portal: Dense point cloud download.
- SDK: RGB Camera Capture option.
- Samples: Mapping App UI and UX improvements.
- SDK: Updated to OpenCV 4.
- SDK: Improved network bandwidth usage during mapping.
- Samples: Indoor Navigation Sample Scene.
- Samples: Tracking Quality Indicator PoseIndicator in SampleScene.
- Developer Portal: Sparse point cloud download.
- SDK: Feature Anchor sets map orientation.
- Samples: Option to switch between different maps in addition to the embedded one.
- Samples: Mapping App UI and UX improvements.
- Samples: Mapping App Capture Delay decreased from 0.5 seconds to 0.25 seconds.
- Unity Package: Project cleanup.
- Samples: Fixed crash when no debug text was assigned to ARLocalizer.
- SDK: Fixed a bug with setting the camera resolution. Now defaults to best possible.