Skip to main content

Release Notes 4.3.0

Highlights​

Features/Fixes​

Localization quality and user coaching​

Developers can optionally enable blur detection through VPS2. It evaluates camera-frame quality before upload and flags frames that may be too blurry to localize well. Apps can use the resulting frameFlagged localization request record to coach users to hold the device steady; flagged frames are still sent for localization. See Guide users during localization for configuration and platform-specific implementation guidance.

New API-based mesh streaming capabilities​

Developers can now stream a VPS map's mesh by asset ID in Unity, Swift, and Kotlin. Mesh downloads deliver mesh chunks incrementally, prioritizing chunks near a supplied latitude and longitude. Apps can also request associated texture-image bytes and set limits for chunk count and cumulative download size.

Scaniverse supports USDZ and meshes for 360 camera​

Scaniverse now supports generating both splats and meshes from 360 camera captures. An updated asset generation workflow lets users choose which assets to create, including splats, meshes, and VPS maps.

Generated splats and meshes can also be exported as USDZ files, making Scaniverse assets easier to use in workflows such as robotics simulation.

Scaniverse now supports 360 video uploads from the Insta360 X4 Air camera, in addition to the X4 and X5 cameras.

LLM and Skill support in docs​

You can now use the LLM documentation index to help AI assistants discover NSDK guides and API references when answering questions, generating code, or providing implementation guidance.

You can also use Niantic Spatial Setup Skills to help an AI assistant guide or automate NSDK installation and configuration in Unity, Swift, and Kotlin.

New Debugger Viewer tool for VPS​

You can now use the VPS Debugger Viewer web application to display live or logged events from a VPS Debugger and troubleshoot VPS2 localization issues, an incorrect geographic position, or incorrect anchor or content poses.

New Site and location VPS2 localization APIs​

Developers can now target VPS2 localization to a specific Site using localize(siteId:) in Swift, localize(siteId) in Kotlin, or TryLocalize(...) in Unity. The SDK localizes against the Site's production VPS assets without requiring an anchor payload.

Developers can also start VPS2 localization near a specified latitude and longitude using localize(latitude:longitude:radiusMeters:) in Swift, localize(latitude, longitude, radiusMeters) in Kotlin, or TryLocalize(...) in Unity. The SDK finds eligible VPS assets within the requested radius and submits them for localization.

Improved VPS2 event handling​

VPS2 now processes localization request and update events on its dedicated task thread. This improves the consistency and thread safety of VPS2 event handling, including telemetry and VPS Debugger events.

Breaking Changes​

  • Unity: ARVps2Manager.TryGetLatestLocalization now returns true whenever the subsystem exists, where it previously returned false while the tracking state was Unavailable. This surfaces the localization's new localized asset, which is valid independent of the tracking state: a VPS asset without a georeference localizes visually while the state stays Unavailable. The geolocation fields are only valid while the tracking state is not Unavailable, so callers that used the return value to decide whether the geolocation fields are usable must check XRVps2Localization.TrackingState instead. This matches the Swift and Kotlin SDKs, where the localization is always reported and the tracking state conveys geolocation validity.
  • Unity: VPS2 anchors are now served by the new ARVps2AnchorManager trackable manager, backed by the new XRVps2AnchorSubsystem. ARVps2Manager requires the anchor and asset managers next to it (adding them at runtime when missing) and keeps its anchor methods, trackables, and trackablesChanged, forwarding to the anchor manager, so calls through ARVps2Manager are source compatible. The other surfaces move:
    • ARVps2Manager is no longer an ARTrackableManager: casts and generic constraints against that base class, inherited members such as SetTrackablesActive, and protected override void Update() in subclasses no longer compile. Use the AnchorManager property to reach the trackable manager surface.
    • Scenes saved with an earlier version serialized the Inspector-wired trackablesChanged listeners and the Default Anchor Game Object prefab on ARVps2Manager; that data is not migrated. Add the ARVps2AnchorManager component to the scene in the editor (it is only added automatically at runtime), then re-assign the anchor prefab and re-wire the listeners on it.
    • Callers of the anchor methods and GetChanges on XRVps2Subsystem must move to XRVps2AnchorSubsystem: XRVps2Subsystem now covers only configuration, localization, and geolocation.

Known Issues​

  • Importing the NSDK UPM in a project started from Universal 3D template might cause a few build errors reported in the console. Restarting the editor should fix this.
  • On iPad Pro running iOS 17 in the Unity External Sample, rotating the device from landscape to portrait may cause a soft lock and screen flickering.