ARDK 0.8.0 Release Notes 2021-05-12

Tl;dr

Depth Buffer is now in metric depth instead of disparity

Meshing performance improvements

We released a Meshing ‘Preview’ in 0.7—for 0.8, we’ve made several improvements including additions to our Meshing Unity examples, refinements to our processing, and bug fixes.

Device compatibility expansion for Context Awareness features (semantics, meshing, occlusion)

Added support for Pixel 3, Pixel 3 XL, Pixel 4, Pixel 4 XL, Samsung Galaxy S9 and S10 (Exynos models).

Various new Manager components that provide simple, Unity-friendly ways to access ARDK features

The core interface of ARDK is designed for expressivity and flexibility, and so mostly lives as C# code not directly tied into Unity. This means that there is a lot of C# code required to integrate features into a game; e.g. managing object lifetimes, configuring AR sessions, and passing data to game components. Managers provide a more streamlined interface for the ARDK features each component covers.

Authentication Changes

The authentication flow (Api keys) has been refactored. The ARDKAuthRegistrar component and Authentication Url have been deprecated. Instead, create an ArdkAuthConfig asset in a *Resources/ARDK *folder and input your Api Key there. The Api Key will be automatically loaded at startup. See Authentication in the ARDK User Manual.

Known Issue – [Playground App] Collisions behavior is broken

IARFrame.DepthPointCloud correctly contains points that represent the Depth buffer. However, index layout of the point cloud is incorrect, leading to visual oddities and unexpected gameplay behavior.

What’s New

  • [Basic AR] Added a helper for a UnityLifecycleDriver that automatically listens to ARSession updates

  • [Contextual Awareness] Depth buffer updated to contain “metric” depth instead of disparities

  • [Contextual Awareness] Added New ARDepthManager to easily handle enabling depth and processing the depth buffer

  • [Contextual Awareness] Added the IARSession.GetAwarenessInitializationStatus method to check the status of the initialization process required to run ContextAwareness features

  • [Developer Tools] Added documentation for each available ARDK-Examples scene

Improvements

  • [Basic AR] Replaced psd assets used in PlaneFindingGrid.mat with pngs

  • [Basic AR] Improved run-time memory consumption and reduced allocations by caching wrappers to native objects.

  • [Contextual Awareness] AR Session configurations with WorldAlignment set to GravityAndHeading will throw an exception if meshing or shared experience are enabled.

    • WorldAlignement.GravityAndHeading enables compass corrections, which negatively interact with the world coordinate space and ARDK’s processing

  • [Contextual Awareness] Added support for more Android devices (see note in Tl;dr)

  • [Contextual Awareness] Improvements made to the speed of mesh generation

  • [Contextual Awareness] Reduced download size of models

  • [Contextual Awareness] All device support checks will occur when ARSession.Run is called, instead of some happening then and some happening when the ARConfiguration value is set.

  • [Contextual Awareness] Improvements to GameBoard plane-fitting speed

  • [Developer Platform] [Playground App] Adding floor bounce mechanic with semantics and meshing.

Bug Fixes

  • [Basic AR] Fixed issue in which IARSession.CameraTrackingStateChanged would not trigger when tracking state was changed on Android platform

  • [Basic AR] Anchors will now be removed properly when re-running an AR Session with RunOptions.RemoveExistingAnchors on Android

  • [Multiplayer] Fixed incorrect API documentation about PeerPoseReceived events being raised for the local peer when, in reality, they are not

  • [Multiplayer] Fixed an exception in HlapiSession when caching unknown data

  • [Contextual Awareness] Fixed an issue where the GetBlockCoords() function in ARMeshManager would return the wrong object for given coordinates

  • [Developer Tools] GameObjects with the MockSceneConfiguration component will destroy themselves (instead of logging an error) when a non-Mock ARSession is initialized

  • [Developer Tools] Fixed an issue in Virtual Studio where mock scene elements could be incorrectly discovered multiple times

  • [Developer Platform] Fixed a race condition with ARLog and Unity’s Start that resulted in a null reference

Breaking Changes

  • [Basic AR] New ARInfoSource.Default value added, which may affect type casts of ARInfoSource values to ints

    • This may also have affected the values of fields of type ARInfoSource set through the Inspector

  • [Basic AR] ARPlaneManager refactored into a Feature Manager class

  • [Basic AR] ARSessionManager refactored into a Feature Manager class

  • [Basic AR] ARConfigProvider class removed

    • Instead, use Feature Manager components to quickly add ARDK features to AR sessions

  • [Basic AR] Removed the IImagePlane.GetBaseDataAddress method as it was not working as intended and would cause a crash

    • Please use NativeArrayUnsafeUtility and IImagePlane.Data (a NativeArray<byte>) to access the address of the data held by each IImagePlane

  • [Basic AR] IARVideoFormat is no longer disposable, as it is now a managed object

  • [Multiplayer] Removed the ARDKAuthRegistrar component for authentication

    • Add an ArdkAuthConfig asset to Resources/ARDK with your API key to automatically handle authentication for all scenes and builds

  • [Contextual Awareness] The ContextAwareness feature can no longer be downloaded through the IARDKFilePreloader API without an explicit URL

    • If the resource is not found in the app cache, the download will automatically happen when an ARSession runs if Context Awareness features are enabled

  • [Contextual Awareness] The awareness buffers surfaced by IARFrame.Depth and IARFrame.Semantics are no longer automatically oriented to the screen (they keep their orientation from ARKit/ARCore)

    • To orient the buffer, call the RotateToScreenRotation method

    • The FitToViewport method will also always return a buffer oriented to the screen

  • [Contextual Awareness] The awareness buffer surfaced by IARFrame.Depth has metric depth data instead of disparities

  • [Contextual Awareness] Refactored the DepthMeshOcclusionHelper to use the new ARDepthManager and ARSemanticSegmentationManager

  • [Contextual Awareness] New ARMeshManager class created to replace the MeshUpdater

  • [Contextual Awareness] Removed ArdkGlobalConfig’s DepthUrl related APIs

    • All awareness functionality now uses the ContextAwarenessUrl API

  • [Developer Platform] The ARDKAuthRegistrar component and Authentication Url have been deleted

    • Instead, create an ArdkAuthConfig asset in a *Resources/ARDK *folder and input your API Key there and the API Key will be automatically loaded at startup

Known Issues

  • [Contextual Awareness] IARFrame.DepthPointCloud correctly contains points that represent the Depth buffer, however the index layout of the point cloud is incorrect

  • [Contextual Awareness] Using the FilePreloader to check ExistsInCache or IsFinishedDownloading for the ContexualAwareness feature will result in a crash. Unless you are using the FilePreloader to explicitly download a specific model, it is better to remove the component and have ARDK natively handle model loading.

Released: May 12, 2021