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 and ARCore. 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.
Vuforia Fusion is used by several Vuforia Engine features such as:
- Device Tracking - Providing six-degree-of-freedom Device Pose.
- Ground Plane - Allowing virtual content to be placed on horizontal planes in the environment.
- Area Targets - enabling tracking of entire spaces.
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 top most technology and work its way downward dependent on what is available on the device during runtime.
For example, a Vuforia App running on an iPhone X, 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.
The same scenario applies for Android devices. For example, a Vuforia App running on a Google Pixel 2 XL will leverage ARCore. 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 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.
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 to cause 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 offer various handles for adjusting the video mode for better battery life or performance. See more at Device Performance Optimizations.
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 DeviceTracker motion estimate will correspond 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.
You can enable or disable the Fusion Provider-specific configuration data for the Vuforia Engine. Disabling the fusion provider will set Vuforia Engine to select the best choice between VISLAM or SLAM
Add a Vuforia Fusion Provider configuration to the engine config with
DeviceTracker.FusionMode in Unity) by setting VU_TRUE or VU_FALSE in the
usePlatformFusionProvider from the
VuFusionProviderConfig. The default value is VU_TRUE.
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.
In the situation where you need to determine what is the current active Fusion provider, use the
VuforiaRuntimeUtilities.GetActiveFusionProvider() in Unity) 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
vuPlatformControllerGetFusionProviderPlatformTypeto 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 the VuDevicePoseObserver and its reported states, 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 Observer states that are suitable for the different Vuforia Fusion platforms.
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.
To determine whether Vuforia Engine is attempting to relocalize, refer to the
TargetStatus() (Unity) and
vuObservationGetPoseInfo (Native) functions.
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 an
uPlatformControllerGetFusionProviderType() returns VU_FUSION_PROVIDER_TYPE_SENSOR_FUSIONor VU_FUSION_PROVIDER_TYPE_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 more information on tracking state, refer to the Pose Status and Status Info.