Vuforia Fusion

Vuforia Fusion is a set of technologies designed to provide the best possible AR experience on a wide range of devices.

Fusion solves the problem of fragmentation in AR-enabling technologies, including cameras, sensors, chipsets, and software frameworks such as ARKit, ARCore, Magic Leap, and Windows Holographic for HoloLens 2. It senses the capabilities of the underlying device and fuses them with Vuforia Engine features, allowing developers to rely on a single Vuforia Engine API for an optimal AR experience. Vuforia Fusion brings advanced Vuforia Engine features to devices that support ARKit and ARCore, in addition to other Android and iOS device models.

Features

Vuforia Fusion is used by several Vuforia Engine features such as:

  • Device Tracking - providing six-degree-of-freedom Device Pose.
  • Image Targets / Cylinder Targets / Multi Targets / VuMark – enabling reliable tracking.
  • Model Targets – enabling reliable tracking around large objects.
  • Area Targets - enabling tracking of entire spaces.
  • Ground Plane - Allowing virtual content to be placed on horizontal planes in the environment.

Fusion Technology Priority

The priority of technology used by Vuforia Fusion has been optimized to leverage the richest set of hardware/software enablers while also providing developers the widest possible device coverage. Refer to the image below for an illustration of how the Vuforia Engine leverages hardware and software enablers.

In practice, what the above diagram shows is that an AR experience created using the Vuforia Engine will attempt to use the topmost technology and work its way downward dependent on what is available on the device during runtime.

For example, a Vuforia App running on an ARKit enabled device, will automatically leverage ARKit for all features dependent on Vuforia Fusion. That same application running on an older iOS device - which does not support ARKit but has been calibrated by Vuforia - will automatically use Vuforia VISLAM for dependent features.

On Android devices, a Vuforia App running on an ARCore enabled device will leverage ARCore when it is included by the developer. That same application on a device that does not support ARCore will use Vuforia VISLAM if the device has the required sensors and has been calibrated by Vuforia.

Due to the addition of support for platform enablers, it is important that AR content, targets, and physical objects all have their coordinate scale in meters. Objects that do not have their scale set appropriately may not track well.

Devices

For a list of devices that support ARKit or ARCore, please refer to Apple's ARKit Site or Google's ARCore Page.

For a list of recommended devices for use with Vuforia Engine, refer to Vuforia Engine Recommended Devices.

Older Devices and Overheating

In an effort to offer developers access to the broadest range of devices, the Vuforia Engine supports various older devices. Developers targeting older devices should be aware that these devices may not always have the hardware specifications required to sustain augmented reality experiences for long periods of time. Therefore, developers targeting such devices are encouraged to design shorter experiences. Running augmented reality experiences on such devices for prolonged periods can cause the device to overheat and/or battery drain.

There are several safeguards in devices to prevent damage to the device or injury to users. One such safeguard is that the speed of the CPU and/or GPU are throttled in order to prevent the heat causing permanent damage. When the CPU and/or GPU is throttled, augmented reality experiences may not behave as expected. For instance, augmentations may fail to be properly anchored to the environment or objects.

Vuforia Engine offers various options for adjusting the video mode for better battery life or performance. See more at Device Performance Optimizations.

VISLAM Behavior

Visual-Inertial Simultaneous Localization And Mapping (VISLAM) is an algorithm implemented by Vuforia combining the benefits of Visual-Inertial Odometry (VIO) and Simultaneous Localization And Mapping (SLAM). Vuforia VISLAM has several benefits:

  • Works better in low-feature environments compared to SLAM based tracking,
  • Provides an estimate of the scale of the world (i.e., the Device Tracking motion estimate corresponds to the real-world motion), and
  • Provides robustness to recover when tracking is lost completely over VIO solutions.

When using Ground Plane, Vuforia Engine's VISLAM system will attempt to estimate the distance between the camera and the Ground Plane. To provide a smooth end-user-experience, Vuforia Engine will use the initial hints to scale based on height to the floor provided via developer API. The default of this hint is 1.4 meters - the average height of an adult holding a device in their hands. In some cases, you can see the scale-estimation at work in the initialization phase of your app when the augmentation is corrected in apparent size when placed onto the Ground Plane.

NOTE: For Vuforia projects that compile for or target Android API level 31 or above, you must add the permission android.permission.HIGH_SAMPLING_RATE_SENSORS to the manifest.xml file to ensure VISLAM can operate correctly. When using the Vuforia Unity extension version 10.7 or lower this must be done manually, for version 10.8 and higher this permission is included by the extension.

Fusion APIs

You can enable or disable the Fusion Provider-specific configuration data for the Vuforia Engine before initializing. Disabling the fusion provider will set Vuforia Engine to select the best choice between VISLAM or SLAM.

If enabled, Vuforia Engine will select the best Fusion provider automatically. Fusion Providers are prioritized as described above (platform enablers first, next is VISLAM then SLAM). If the Engine cannot set the platform fusion provider, Vuforia falls back to using a non-platform-based fusion provider.

For Unity

Set the Fusion Provider configuration with VuforiaApplication.Instance.Initialize(FusionProviderOption). The options can be PREFER_PLATFORM_FUSION_PROVIDER and VUFORIA_FUSION_ONLY. See Vuforia Engine lifecycle in Unity for a code snippet that applies the option or the Reference API library for details on the options.

Query

In the situation where you need to determine what is the current active Fusion provider, use the VuforiaRuntimeUtilities.GetActiveFusionProvider(). This returns the FusionProviderType that is being actively used by the Vuforia Engine. The return values are described in the reference library.

If the query returns PLATFORM_SENSOR_FUSION, you can then set FusionProviderOption to PREFER_PLATFORM_FUSION_PROVIDER to make use of tracking services by the underlying platform, such as ARKit, ARCore, and Windows Holographic.

For Native

Add a Vuforia Fusion Provider configuration to the engine config with vuEngineConfigSetAddFusionProviderConfig by setting VU_TRUE or VU_FALSE in the usePlatformFusionProvider from the VuFusionProviderConfig. The default value is VU_TRUE.

Query

In the situation where you need to determine what is the current active Fusion provider, use the vuPlatformControllerGetFusionProviderType() function. This returns the VuFusionProviderType that is being actively used by the Vuforia Engine. The return values are described in the reference library.

If the query returns VU_FUSION_PROVIDER_TYPE_PLATFORM_SENSOR_FUSION, you can then use vuPlatformControllerGetFusionProviderPlatformType to get the VuFusionProviderPlatformType to make use of tracking services by the underlying platform, such as ARKit, ARCore, and Windows Holographic. See more on platform functionalities in Using the Vuforia Fusion Platform Handle.

Continued AR Experiences

Vuforia offers developers a toolset to manage and create AR sessions that are sustained over application interrupts or pauses. By using Device Tracking and its reported pose status, you can regain tracking of all Vuforia targets upon resuming the AR session. See Best Practices for Continued AR Experiences page for detailed information on application continuity and Device Pose Behaviour statuses that are suitable for the different Vuforia Fusion platforms.

Relocalization

Relocalization allows a tracking system to recover tracking results after a short failure, without restarting the experience, by covering small gaps during the tracking function.

For Unity

To determine whether Vuforia Engine is attempting to relocalize, refer to the TargetStatus() and the values it returns. See Pose Status and Status Info.

In Vuforia Engine, relocalization behavior is highly dependent on the active Fusion Provider during a session.

When tracking is lost and FusionProviderType() returns VISION_ONLY, then the tracking system resets itself if it detects a previously unseen target. In this situation, the system starts tracking the new target and recovers additional targets as they come into view.

When tracking is lost and FusionProviderType() returns SENSOR_FUSION or VISION_ONLY, then augmentations may not appear where expected. In this situation, TargetStatus() returns LIMITED. To help the system recover and continue the experience, instruct the user to point the device back to a previously viewed target or location, depending on the nature of the experience.

For Native

To determine whether Vuforia Engine is attempting to relocalize, refer to the vuObservationGetPoseInfo() function and the values it returns. See Pose Status and Status Info.

In Vuforia Engine, relocalization behavior is highly dependent on the active Fusion Provider during a session.

When tracking is lost and vuPlatformControllerGetFusionProviderType() returns VU_FUSION_PROVIDER_TYPE_VISION_ONLY, then the tracking system resets itself if it detects a previously unseen target. In this situation, the system starts tracking the new target and recovers additional targets as they come into view.

When tracking is lost and vuPlatformControllerGetFusionProviderType() returns VU_FUSION_PROVIDER_TYPE_SENSOR_FUSION or VU_FUSION_PROVIDER_TYPE_VISION_ONLY, then augmentations may not appear where expected. In this situation, vuObservationGetPoseInfo() returns VU_OBSERVATION_POSE_STATUS_LIMITED. To help the system recover and continue the experience, instruct the user to point the device back to a previously viewed target or location, depending on the nature of the experience.

Can this page be better?
Share your feedback via our issue tracker