Release 20.3.1

Version Info

Release date: 31.03.2020
Release info: General Release


This is a major update for VisionLib which adds:

  • Official support of HoloLens 2

Note: There are some changes coming with this release that might break existing projects. For a safe update process, please consult the Migration Guide.

Also, support for Unity versions below 2018.4 LTS has ended with this release.

Thank you to all our users for giving feedback.



  • Cameras can now be plugged in during runtime and will be available in the list of cameras at the next start.
  • Default folder for initialization data, calibration data, image recording and AutoInit has been changed to local_storage_dir:/VisionLib.


  • Changed default license path from Assets/StreamingAssets to Assets/StreamingsAssets/VisionLib.
  • A new scene for recording image sequences on HoloLens has been added. For details, see Record and Replay Image Sequences.
  • Introduced VLTrackingConfiguration component, which can be used as a central point for referencing the tracking configuration (.vl file) and to start tracking with several options. This component replaces AutoStart.cs and StartTrackingWithCameraSelectionBehaviour.cs, which have been deprecated.
  • A compatibility check between the UnitySDK and the native library has been introduced.


  • HoloLens 2 is now officially supported by providing ARM and ARM64 builds for the vlSDK. In Unity 2018, only the 32 bit build can be used; in Unity 2019, both 32 bit and 64 bit builds are supported (using the ARM64 build increases performance on HoloLens 2). Since Unity 2019 has not released an LTS version yet, some interfaces might change in future. We currently recommend Unity 2019.2 while developing for HoloLens 2.
  • The speed of writing image sequences has been improved to make it usable on HoloLens. To have easy access to the recorded files we recommend the use of capture_dir as file scheme (see /ref tracking-configuration-file) for writing the files.


  • When setting the camera resolution to high on iOS using ARKit SLAM, the display image will be scaled down to 1280 x 1024 or 1280 x 720 respectively to improve performance.

Enhancements / Bugfixes


  • A bug in AutoInit has been addressed, that lead to not recognizing objects if they where completely filling the camera image.
  • setProperty("modelURI", ...) can now be called without previously calling addModel or providing a model in the tracking configuration.
  • getProperty("modelURI") will return "" if no model has been added and not return an error as before.
  • Allowed using only input device(s) and no trackers by setting trackers: [] in the .vl file. This way it is possible to use the VisionLib to acquire images, camera intrinsics and slam extrinsics without tracking.
  • Removed several redundant log messages - especially in the context of unsuccessfully starting the tracker. Replaced with more speaking initialization issues, where possible.
  • Changes to normal- and laplace-threshold will now trigger resetting the tracking hypothesis cache. This allows users to change them during runtime (as in the advanced modeltracker example) and directly see the effect.


  • The use of the VLDebugImage has been changed internally, which lead to deleting VLDebugCameraBehaviour.cs, VLDebugImageBehaviourEditor.cs and the VLDebugCamera.prefab.
  • Replaced Start Extendible buttons in example scenes with a checkbox Extend Tracking With SLAM that uses the new VLTrackingConfiguration to set the extendible flag and restarts tracking on value changes.
  • Improved visualization of initialization issues. To achieve this, ShowInitWarningEventBehaviour.cs has been deprecated and replaced by VLInitIssueNotifications.cs
  • Also improved visualization of VL logs via the VLLogEventsBehaviour. In doing so, VLEventsNotification.cs has been deleted.
  • Error messages that origin in client code (called as callbacks or listeners) can now be traced back.
  • Created new scene ChangeModelURI to show how to change the models uri during runtime. This feature was previously a part of the AdvancedModelTracking scene.
  • Added description panels to all example scenes with links to the corresponding documentation (press in Play mode) to help understanding the shown VisionLib features.
  • Changed the default output folder for VisionLib related files to local_storage_dir:/VisionLib.
  • The staticScene parameter has been removed from all HoloLens related example tracking configurations, as it will be ignored by the HoloLens tracker.
  • Removed the possibility to access image sequence parameters when not using an image sequence as the input source.
  • Replaced the Caravan model with a better trackable version.


  • Suspending and resuming does now correctly restart the tracking.

Interface Changes


  • Default debugLevel has been changed from 1 to 0. During development of an application this value should be set to 1 in the tracking configuration (to have access to some debug output). For performance reasons one should remove this after finishing development.
  • The default image will no longer be replaced by the debug image, if the debugLevel is adjusted.
  • Added option lineModelRenderSize to ModelTracker parameters. See Configuration File Parameters.
  • Removed option downSample from PosterTracker parameters. Use Prevent automatic rescaling, that is available for all trackers instead.
  • Enhance the uri parameter functionality of ImageSequence image sources: It is now possible to specify single files, file patterns with a single * in it and lists of files and/or file patterns separated by ;.
  • The Inject device now by default does not undistort but scales down input images if they are too large. To enable undistortion, set undistort to true in the data section of the image source. To disable downsampling, set SmartDownsamplingDisabled to true in the data section of the image source.
  • Deprecated the usage of TALIC_LICENSE_FILE to set the path to the license file in the objective C interface. Please use the new licensePath and licenseData arguments to initTrackerWithURI instead.
  • In every interface, except the objective C interface, the formerly un-advertized environment variable TALIC_LICENSE_FILE can no longer be used. Please use vlAbstractApplicationWrapper_SetLicenseFilePath instead.



  • Added vlWorker_AddDebugImageListener to register a listener for debug images. This can only be executed correctly if debugLevel is greater then 0. Will return false without an error message, if the debugLevel is 0.
  • The behavior of setInitPose has changed. It is no longer possible to call it with only the translation or the rotation. Both have to be supplied.
  • Added functions vlImageWrapper_Clone, vlExtrinsicDataWrapper_Clone and vlIntrinsicDataWrapper_Clone that allow users to copy data they received from the vlSDK (via listener or getter). The pointers returned by those functions have to be released using vlDelete_XXX.
  • Removed previously obsolete non-json commands vlWorker_PushCommand. Use vlWorker_PushJsonCommand instead.
  • Removed functions to access private data (vlWorker_AddNamedImageListener, vlWorker_AddNamedExtrinsicDataListener, vlWorker_AddNamedIntrinsicDataListener, vlWorker_GetNamedImageSync, vlWorker_GetNamedIntrinsicDataSync and vlWorker_GetNamedExtrinsicDataSync). Instead, please use vlWorker_AddNodeDataImageListener, vlWorker_AddNodeDataExtrinsicDataListener, vlWorker_AddNodeDataIntrinsicDataListener, vlWorker_GetNodeImageSync, vlWorker_GetNodeExtrinsicDataSync and vlWorker_GetNodeIntrinsicDataSync. Beware that they use different keys, contact us for further details.
  • A camera calibration DB added via vlAbstractApplicationWrapper_AddCameraCalibrationDB will now automatically get removed when calling vlDelete_AbstractApplicationWrapper.


Documentation Changes