Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ARCore is (still) out there

ARCore is (still) out there

ARCore is the Android SDK for providing Augmented Reality experiences to our users. In the last 2 years Google seems to not put so much effort in it development, but at the last Google IO they showed new shining features and performance improvements thanks to ML usage. The most important one is the possibility to create georeferenced AR experiences without moving from our desk. In this session we will see these updates using ARFoundation, the Unity3D SDK that wraps ARCore and ARkit (for iOS)

Michelantonio Trizio

December 08, 2022
Tweet

More Decks by Michelantonio Trizio

Other Decks in Technology

Transcript

  1. 4 Intro Augmented Reality AR can bring anything to you.

    It adds computer-generated information and objects to your everyday world.
  2. 11 About ARCore Proprietary and Confidential Google’s developer platform for

    building mobile augmented reality (AR) experiences provides powerful immersion capabilities to help you integrate virtual content realistically on top of your live camera stream Image ARCore Overview
  3. ARCore Overview Augmented Reality history timeline 1962 Sensorama 1968 Head

    Mounted Display 2012 Google Glass 2014 Project Tango 2016 Microsoft Hololens 2017-2018 ARkit + ARCore
  4. 18 Motion Tracking Proprietary and Confidential By tracking the phone’s

    motion, virtual objects stay anchored in place Image Immersion 17% faster to first plane 15% less tracking reset Improvements
  5. 19 Motion Tracking Proprietary and Confidential New machine learning model

    added Even faster initialization Even fewer tracking resets Immersion Improvements + machine learning
  6. Best practice for reliable motion tracking Motion Encourage user motion

    at the start of Experiences Lightning Encourage well-lit environments to reduce image blur Scene texture Avoid blank walls. Encourage use in interesting environments Immersion
  7. 21 Lighting Estimation Proprietary and Confidential ARCore can detect information

    about the lighting of its environment so you can render your virtual objects under the same conditions as the environment around them. Image Immersion
  8. 31 Planes Proprietary and Confidential ARCore understands the physical structure

    of the environment, detecting horizontal surfaces, like tables and desks, and makes these surfaces available to your app as planes. Image Augmentation
  9. Augmented Images You’ve wanted to have the ability to trigger

    AR experiences off of real-world images Image Augmentation
  10. Augmented Faces You’ve wanted to have the ability to trigger

    AR experiences off of your head Augmentation
  11. Instant Placement You’ve wanted to have the ability to trigger

    AR experiences off of your head Augmentation
  12. Persistent Cloud anchors ARCore's Cloud Anchors API lets you create

    collaborative or multiplayer apps Image World Annotation
  13. Geospatial API advantages comparison Proprietary and Confidential GPS + IMU

    Cloud Anchors Global Localization Global-scale coverage ✔ ✘ ✔ Precise location ✘ ✔ ✔ Precise orientation ✘ ✔ ✔ Remote placement ✔ ✘ ✔ location guidance ✔ ✘ ✔
  14. var earthTrackingState = EarthManager.EarthTrackingState; if (earthTrackingState == TrackingState.Tracking){ // camera_geospatial_pose

    contains geodetic location, rotation, and // confidences values. var cameraGeospatialPose = EarthManager.CameraGeospatialPose; }
  15. Quaternion quaternion = Quaternion.AngleAxis(180f - (float)pose.Heading, Vector3.up); if (earthTrackingState ==

    TrackingState.Tracking){ var anchor = AnchorManager.AddAnchor( latitude, longitude, altitude, quaternion); var anchoredAsset = Instantiate(GeospatialAssetPrefab, anchor.transform); }
  16. Anatomy of an app ➔ ARCore Device ➔ Environmental Light

    ➔ Plane Detector ➔ Plane Visualizer ➔ Our custom Controller ➔ Event system ➔ 2D Canvas ➔ Buttons
  17. Session if (Session.Status != SessionStatus.Tracking) { const int lostTrackingSleepTimeout =

    15; Screen.sleepTimeout = lostTrackingSleepTimeout; } else { Screen.sleepTimeout = SleepTimeout.NeverSleep; }
  18. Plane Session.GetTrackables<DetectedPlane>(m_NewPlanes, TrackableQueryFilter.New); for (int i = 0; i <

    m_NewPlanes.Count; i++) { GameObject planeObject = Instantiate(DetectedPlanePrefab, Vector3.zero, Quaternion.identity, transform); planeObject.GetComponent<DetectedPlaneVisualizer>().Initialize(m_NewPlanes[i]); }