Дополненная реальность давно вышла за пределы хайповых заголовков. Она превратилась в рабочий инструмент, который всё чаще мелькает в мобильных приложениях, играх, логистике и даже образовании. В этой статье — разбор инструментов, подводных камней и немного личных слёз, пролитых над SDK.

Если вы когда-нибудь пытались разработать что-то в дополненной реальности, то, скорее всего, сначала всё казалось простым и волшебным — а потом начался тот самый ад из размытых плоскостей, прыгающих объектов и SDK, которые внезапно перестают видеть камеру.
Писать про AR легко — достаточно накидать пару ссылок на ARKit и Unity, и готово. А вот сделать что-то действительно рабочее — тут нужен танец с бубном, багрепорты в 3 часа ночи и здравый скепсис к любой документации. Попробуем пройти этот путь чуть-чуть осмысленнее.
Инструменты, с которыми можно жить
1. Unity + AR Foundation
Это как мультиинструмент для AR-разработчика. Он позволяет писать кроссплатформенный код для iOS и Android, используя ARKit и ARCore под капотом.
// C# — Unity, AR Foundation using UnityEngine; using UnityEngine.XR.ARFoundation; public class PlaceObjectOnPlane : MonoBehaviour { public GameObject objectToPlace; private ARRaycastManager raycastManager; private GameObject spawnedObject; void Start() { raycastManager = GetComponent<ARRaycastManager>(); } void Update() { if (Input.touchCount == 0) return; var touch = Input.GetTouch(0); if (touch.phase == TouchPhase.Began) { var hits = new List<ARRaycastHit>(); if (raycastManager.Raycast(touch.position, hits, UnityEngine.XR.ARSubsystems.TrackableType.PlaneWithinPolygon)) { var hitPose = hits[0].pose; if (spawnedObject == null) spawnedObject = Instantiate(objectToPlace, hitPose.position, hitPose.rotation); else spawnedObject.transform.position = hitPose.position; } } } }
На бумаге всё просто. На практике — устройство не определяет плоскости, если света в комнате меньше, чем в офисе Google, а сам Unity может внезапно «забыть» про ARKit, если сборка шла под Android.
2. ARKit (iOS only)
Нативный SDK от Apple, работает отлично, если ваш пользователь — владелец iPhone 12+. Поддерживает SLAM, Face Tracking, Occlusion и даже совместную работу с LiDAR.
// Swift, ARKit import ARKit class ARViewController: UIViewController, ARSCNViewDelegate { @IBOutlet var sceneView: ARSCNView! override func viewDidLoad() { super.viewDidLoad() sceneView.delegate = self sceneView.session.run(ARWorldTrackingConfiguration()) } }
Но стоит помнить: ARKit — штука привередливая. Как только вы вылезаете за пределы «вставить кубик в сцену», нужно знать про world alignment, anchors, light estimation и ещё кучу мелких деталей, которые неочевидны из документации.
3. ARCore (Android only)
Аналог ARKit от Google. Работает нормально, но любит «отваливаться» на устройствах с кастомной прошивкой. Поддерживает примерно то же, но с задержкой на релиз новых фич.
// Kotlin, ARCore + Sceneform override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val fragment = supportFragmentManager.findFragmentById(R.id.ux_fragment) as ArFragment fragment.setOnTapArPlaneListener { hitResult, _, _ -> val anchor = hitResult.createAnchor() val model = ModelRenderable.builder() .setSource(this, R.raw.model) .build() .get() val anchorNode = AnchorNode(anchor) anchorNode.renderable = model fragment.arSceneView.scene.addChild(anchorNode) } }
Часто неочевидные подводные камни
-
SLAM и стабильность сцены. Даже в самых крутых SDK объекты со временем могут «плыть». Это физика, оптика и невозможность 100% трекинга в реальном времени.
-
Освещение. AR плохо дружит с темнотой. Если света мало, плоскости не распознаются, трекинг сбивается, и вообще всё ломается.
-
Калибровка камеры. Особенно на Android — где один и тот же телефон может иметь 3 разные камеры с разными API.
Vuforia, WebAR и прочие звери
Если хочется поддержки маркеров, интеграции с OpenCV, или AR через браузер — стоит посмотреть на:
-
Vuforia — отличный вариант для marker-based AR. Правда, бесплатная версия сильно ограничена.
-
WebAR — решение через WebXR API. Работает нестабильно и сильно зависит от браузера. Но зато — никакого App Store.
Где пригодится AR в реальности?
-
Навигация в помещениях. Google уже использует это в Google Maps внутри аэропортов.
-
Обучение и медицина. Виртуальные анатомические модели, обучающие стенды.
-
Ритейл. Примерка мебели, очков, одежды.
-
Игры. Ну конечно. Кто не слышал про Pokémon GO?
Заключение
AR — это не магия. Это череда компромиссов между UX, железом, SDK и нервами разработчика. Но если однажды вы увидите, как ваша 3D-модель идеально вписалась в комнату пользователя — поверьте, оно того стоило.
ссылка на оригинал статьи https://habr.com/ru/articles/896680/
Добавить комментарий