Release 20.10.1

Version Info

Release date: 22.10.2020
Release info: General Release


This is a major update for VisionLib which adds:

  • ARFoundation integration. Learn more about this feature here: AR Foundation Support (Beta).
  • Support for industrial uEye cameras. Find more details here: Industrial uEye cameras.
  • Plane Constrained Mode. This feature can improve performance if the tracked object is located on a flat surface, while the tracking is extended by SLAM. Test the behaviour in the AdvancedModelTracking scene. To use it in a custom scene, add the VLPlaneConstrainedMode component to a GameObject.
  • Upgraded VLTrackingConfiguration component in Unity to hold the most important file references and to enable the use of URIs.

Thank you to all our users for giving feedback.



  • Added the ARFoundationModelTracking example scene to the Experimental package.
  • Added the UEyeCameraTracking example scene, which includes the possibility to calibrate the camera and to adjust some camera settings.
  • Added a checkbox to the AdvancedModelTracking scene to enable and disable the Plane Constrained Mode, while using external SLAM.
  • Added the voice commands Constrain to Plane and Disable Constraint to the HoloLens example scenes to enable and disable the Plane Constrained Mode.
  • Added the possibility to set the tracking configuration reference in the VLTrackingConfiguration component via an URI. This includes the possibility to use schemes and queries.
  • The license and calibration file can now be set via the VLTrackingConfiguration component. They can also be set using an URI.

Enhancements / Bugfixes


  • Improved the PosterTracker by reducing the number of false positives in detection and tracking.
  • Fixed a bug that the image timestamp in the PosterTracker wasn't set correctly.
  • Updated the internally used zlib version to the latest version (1.2.11).
  • Fixed a bug that caused a freeze instead of an error when loading a tracking configuration from an URI with a project-dir scheme.
  • Increased the default processing limitation from 20 fps to 30 fps in the native interface.
  • Reset Init Data will now clear all re-initialization data and not only the static one.
  • Fixed a bug that returned an VL_ERROR_LICENSE_INVALID_FEATURE issue when trying to use a device of type video.
  • Enhanced the precision of the camera calibration by internally working on images with a higher resolution.
  • Scheme names can now be used case insensitive.
  • Fixed a bug that project_dir wasn't set correctly when the query string contained / or \.
  • Fixed a bug that lead to augmentation mismatch when using multi model tracking, external slam (ARKit or ARCore) and models in a metric other then meters.


  • Added the scheme streaming-assets-dir which can be used to set the URI of the tracking configuration, license file or calibration relatively to the StreamingAssets folder. Find more information on URIs with schemes here: File Access
  • VLTrackingAnchors, that are used in multi model tracking, can now be enabled and disabled during runtime.
  • Added smoothTime parameter to VLTrackingAnchor to smoothly update anchor transforms (i.e. prevent / reduce jumping).
  • The SimpleCameraCalibration scene now provides a Start and Stop button and directly logs the calibration results to the console when pressing Calibrate.
  • Stopping the tracking will now result in a black image instead of a frozen camera image.
  • Starting tracking via an input selection will not log the complete deviceInfo anymore. Instead, the selected cameras name, deviceID and its available formats are logged.
  • The tracking will now be (re-)started when enabling the VLTrackingConfiguration on runtime while Auto Start Tracking is set.
  • Fixed a bug which scaled the background image wrongly when re-enabling VisionLib components during runtime.
  • Fixed a bug which created the VLBackgroundImage in the wrong scene when loading a VisionLib scene additively.


  • When setting the camera resolution to high on iOS using ARKit SLAM, the display image will no longer be scaled down.


  • Enabled selecting a resolution (e.g. 640x480 or high) inside the camera section of the tracking configuration on Windows. For details see Configuration File Reference.

Interface Changes


  • Changed the format of transformations returned by command getModelData from arrays to objects. Before: {"s": [1, 1, 1], "t": [0, 0, 0], "r": [0, 0, 0, 1]} Now: {"s": {"x":1, "y":1, "z":1}, "t": {"x":0, "y":0, "z":0}, "r":{"x":0, "y":0, "z":0, "w": 1}} Note: This change allows to directly deserialize to Unity Vector and Quaternion objects.


  • License, calibration and tracking configuration URIs set via the VLWorkerBehaviour can now contain schemes, e.g. local-storage-dir: or streaming-assets-dir:.
  • Removed the public VLWorkerBehaviour.baseDir parameter in the VLCamera and the VLHoloLensTracker.
  • Deprecated the use of relative paths to specify the tracking configuration, license and calibration URI. Use absolute paths and schemes instead. For more information see File Access.
  • Deprecated VLTrackingIssues. Please use VLIssues instead.
  • Deprecated OnTrackerInitializedWithIssues. Please use OnIssuesTriggered instead. This event will only be triggered, if an issue occurred.
  • Deprecated license and calibration related functions in VLAbstractApplicationWrapper. Please use corresponding functions of VLWorker instead.
  • Renamed LogLevel Log to Mute. While using LogLevel Mute, VisionLib will not log any message at all.
  • Renamed VLInitCameraBehaviour.overwriteOnLoad to VLInitCameraBehaviour.usePoseFromTrackingConfig.
  • VLUnitySdk.GetVersionString, VLUnitySdk.GetVersionHashString, and VLUnitySdk.GetVersionTimestampString now directly return the requested string and throw an InvalidOperationException on failure.
  • The CameraCalibrationExampleBehaviour will now make use of a VLTrackingConfiguration in the scene. If you have used this behaviour in a custom scene, please add a VLTrackingConfiguration component in the hierarchy and reference your used tracking configuration file in its public field to upgrade your scene. Check the Use Input Selection and Auto Start Tracking option to achieve the previous behaviour.


  • Added vlSDKUtil_registerScheme function to programmatically create schemes at runtime.
  • Renamed VLTrackingIssues to VLIssues and onTrackerInitializedWithWarningIssues to onIssuesTriggered in the Objective-C interface.
  • Deprecated vlAbstractApplicationWrapper. Please create the vlWorker using a nullptr instead of an vlAbstractApplication pointer.
  • Deprecated all vlAbstractApplicationWrapper related functions. Please use the corresponding commands or json commands of vlWorker instead.
  • The iOS and MacOS builds now come with a CMake config file, which makes it easier to use the vlSDK in a CMake project. Besides the vlSDK::vlSDK target, the config also defines a VLSDK_FRAMEWORK_DIR variable, which contains the full path to the vlSDK.framework directory. This can be used to copy the framework into the application bundle structure.
  • Fixed null pointer access at startup when using the vlSDK inside a Unix-style application on MacOS.
  • Changed the VL_LOG_LOG LogLevel enum value to VL_LOG_MUTE. While using LogLevel VL_LOG_MUTE, VisionLib will not log any message at all. If vlLog is called with LogLevel Mute, the message will not be logged.
  • The json string returned by vlAbstractApplicationWrapper_GetLicenseInformation and vlWorker_GetLicenseInformation will now be indented.
  • Removed vlSDKiOS.h from the Objective-C interface. If you included it before, include vlSDK_Apple.h instead.
  • Added new wrapper type vlSimilarityTransformWrapper_t to wrap similarity transforms. Such transforms have a scale factor in addition to rotation and translation in comparison to transforms represented by vlExtrinsicDataWrapper_t, that only rotate and translate.
  • Added vlWorker_AddNodeDataSimilarityTransformListener and vlWorker_RemoveNodeDataSimilarityTransformListener to add and remove node listeners for SimilarityTransform events.
  • Added vlWorker_AddWorldFromCameraTransformListener and vlWorker_RemoveWorldFromCameraTransformListener to register and unregister extrinsic data listeners for the transformation from world to camera coordinate system as provided by SLAM (like ARCore, ARKit or on HoloLens). If no SLAM approach is used, we assume that the camera is stationary and the models move in the world. We therefore set the WorldFromCameraTransform to identity in this case.
  • Added vlWorker_GetNodeSimilarityTransformSync and vlWorker_SetNodeSimilarityTransformSync for synchronous access to node SimilarityTransforms.
  • The functions vlWorker_SetNodeImageSync, vlWorker_SetNodeExtrinsicDataSync, vlWorker_SetNodeIntrinsicDataSync and vlWorker_SetNodeSimilarityTransformSync now also return false, if the node does not exist or the key has the wrong type. They previously returned true in those cases.
  • Added vlSDKUtil_getModelHash to create the model hash of the given model into a buffer. This function is useful for requesting a license for a specific model programmatically.
  • Removed vlWorker_AddAnchorToWorldTransformListener and vlWorker_RemoveAnchorToWorldTransformListener. Added vlWorker_AddWorldFromAnchorTransformListener and vlWorker_RemoveWorldFromAnchorTransformListener instead. Those transformations are also from anchor to world coordinate system, however they are represented as a vlSimilarityTransformWrapper_t.
  • Added function vlWorker_LoadPlugin to load a specified VisionLib plugin (e.g. VideoUEye)


Documentation Changes

  • Added a tutorial page that explains how to set up VisionLib Tracking in an ARFoundation Unity scene: AR Foundation Support (Beta).
  • Added a page that explains the usage of UEye cameras with VisionLib: Industrial uEye cameras.
  • Added a page that explains the file access in VisionLib via URIs and schemes: File Access.