ARKit рамката — платформа за разширена реалност от Apple, която позволява на разработчиците да създават AR приложения за iOS без задълбочени познания по компютърно зрение. Според Apple ARKit Documentation, 2025, рамката използва Visual-Inertial Odometry за точно проследяване на позицията на устройството в пространството без външни маркери. Семантичното разбиране на сцената позволява разпознаване на хоризонтални и вертикални равнини, определяне на осветлението и поставяне на виртуални обекти в реалната среда.
Основни точки
ARKit — рамка за разширена реалност от Apple, обявена на WWDC 2017 заедно с iOS 11. Тя обединява възможностите на камерата, процесора за движение от серия M и невронния двигател на A-чиповете за създаване на потапящо AR изживяване без необходимост от специализиран хардуер — само iPhone или iPad.
ARKit използва технологията Visual-Inertial Odometry (VIO), която обединява данни от камерата и инерциални сензори Core Motion за точно проследяване на движението на устройството в пространството. VIO позволява на рамката да разбира къде се намира устройството спрямо околната среда, без използване на GPS или външни маркери.
Според Apple WWDC 2024, ARKit 6 се поддържа на устройства с чип A12 и по-нови (iPhone XS, iPad Pro 2018+). Броят на AR приложенията в App Store надхвърли 15 хиляди, а общата площ на разпознатите равнини във всички AR сесии надхвърля 100 милиарда квадратни метра.
В шест версии ARKit получи значителни подобрения: ARKit 1.0 (iOS 11) — основно проследяване и разпознаване на равнини; ARKit 2.0 — споделени AR сесии чрез ARWorldMap и откриване на 3D обекти; ARKit 3.0 — проследяване на човешкото тяло, сегментиране на хора и едновременни предни и задни камери.
ARKit 4.0 представи LiDAR Scanner за незабавно определяне на дълбочина и непрозрачност на обекти, както и Location Anchor за свързване на AR съдържание с GPS координати. ARKit 6 добави 4K видео с HDR, Plane Estimation с LiDAR и подобрена обработка на оклузия.
import ARKit
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
configuration.environmentTexturing = .automatic
let arView = ARSCNView(frame: view.bounds)
arView.session.run(configuration)
arView.debugOptions = [.showFeaturePoints]
view.addSubview(arView)
ARKit работи чрез цикъл на AR сесия, която се стартира с конфигурация и непрекъснато анализира видео потока от камерата. Всеки кадър рамката изчислява позицията на устройството (6 степени на свобода), актуализира картата на разпознатите равнини и коригира позицията на виртуалните обекти — всичко това с честота от 60 кадъра в секунда.
Процесът VIO се състои от два паралелни потока: алгоритъмът за визуална одометрия проследява движението на характерни точки (feature points) между кадрите, а инерциалните сензори Core Motion предсказват движение в кратки интервали, когато камерата се движи бързо или изображението е размазано. Комбинирането на двата метода дава точност на проследяване до 1 сантиметър.
Според Apple, ARKit обработва до 500 характерни точки на кадър, а размерът на картата на околната среда (ARWorldMap) може да достигне 100 метра в диаметър. Сканирането на околната среда и изграждането на карта отнема около 2-3 секунди след стартиране на сесията — през цялото това време ARKit събира данни от камерата и сензорите.
ARAnchor — ключов обект за поставяне на съдържание. Когато ARKit разпознае равнина, създава ARPlaneAnchor с посочване на позицията, размера и ориентацията на повърхността. Разработчикът реагира на делегата session(_:didAdd:) и поставя 3D обекта на мястото на откриване на равнината чрез SceneKit или RealityKit.
За реализиране на влачене на обекти се използва ARHitTestResult: при докосване на екрана се изпълнява hit-test през кадъра на ARKit, който връща точката на пресичане на лъча с разпознатите равнини. Намерената точка се преобразува в ARAnchor и обектът се фиксира в тази позиция.
func renderer(
_ renderer: SCNSceneRenderer,
didAdd node: SCNNode,
for anchor: ARAnchor
) {
guard let planeAnchor = anchor
as? ARPlaneAnchor else { return }
let boxNode = SCNNode(
geometry: SCNBox(
width: planeAnchor.extent.x,
height: 0.01,
length: planeAnchor.extent.z,
chamferRadius: 0
)
)
node.addChildNode(boxNode)
}
ARKit предоставя набор от технологии, които правят разширената реалност реалистична и функционална: проследяване на движение с 6 степени на свобода, разбиране на сцената чрез разпознаване на равнини и граници, оценка на осветлението за правилно хвърляне на сенки, оклузия на хора и отразяващи повърхности на базата на карти на околната среда.
Motion Capture (ARKit 3+) — технология за проследяване на човешкото тяло в реално време чрез камера. Позволява анимиране на герои с движенията на потребителя без външни сензори: разпознават се 18 стави с честота 60 Hz. Използва се във фитнес приложения и за прототипиране на анимации.
Споделените AR сесии (ARKit 2+) позволяват на множество устройства да виждат едни и същи виртуални обекти в споделено пространство. ARWorldMap запазва картата на околната среда, която се предава на други устройства по мрежата. Apple дава пример за точност на синхронизация: два iPhone 12 Pro в една стая виждат обект с отклонение не повече от 2 сантиметра.
LiDAR скенерът, инсталиран на iPhone 12 Pro и по-нови, коренно променя възможностите на ARKit. Вместо софтуерно определяне на дълбочина чрез анализ на изображения, LiDAR незабавно предоставя карта на дълбочината с точност до 3 сантиметра в обхват до 5 метра. Това позволява на ARKit да разпознава равнини моментално, без предварително сканиране с камера.
С помощта на LiDAR, ARKit може да определи непрозрачността на обекти: виртуален обект може да се скрие зад истински стол или маса. Освен това Scene Reconstruction изгражда 3D мрежа на околната среда в реално време — до 10 милиона полигона на стая, използвана за симулация на физика на сблъсъци и реалистично осветление.
// Конфигурация за LiDAR
let lidarConfig = ARWorldTrackingConfiguration()
lidarConfig.planeDetection = [.horizontal]
lidarConfig.sceneReconstruction = .mesh
arView.session.run(lidarConfig)
// Откриване на докосване върху равнина
override func touchesBegan(
_ touches: Set<UITouch>,
with event: UIEvent?
) {
let location = touches.first?.location(in: arView)
guard let hitPoint = location else { return }
let results = arView
.raycastQuery(
from: hitPoint,
allowing: .existingPlaneInfinite,
alignment: .horizontal
)
}
Интегрирането на ARKit започва с минимални изисквания: Xcode 15+, iOS 17 SDK, устройство с чип A12 Bionic и по-нов. В Info.plist трябва да се добави ключът NSCameraUsageDescription — ARKit използва камерата за проследяване и показване на AR сцената. Без този ключ приложението ще завърши с грешка при стартиране на AR сесия.
За рендериране на съдържание iOS предлага три рамки: SceneKit за 3D графика със средна сложност, RealityKit за фотореалистично рендериране с PBR материали и Metal за максимална производителност. RealityKit — препоръчителен избор за нови проекти, тъй като включва вградена поддръжка за ARKit функции, анимация и физика.
Според Apple, средното време за интегриране на основен AR екран в съществуващо приложение — около 2 часа за опитен iOS разработчик. Основните трудности възникват при работа с наслагване на UI елементи върху AR сцената и при обработка на прекъсвания на AR сесията — обаждания, превключване на приложения или загуба на проследяване при слаба светлина.
ARKit може да загуби проследяване в редица ситуации: недостатъчно осветление (по-малко от 100 лукс), липса на характерни точки (едноцветни стени), бързи движения на камерата или покриване на обектива. Делегатът ARSessionDelegate предоставя методи за обработка на тези състояния — препоръчва се показване на подсказки на потребителя: „Движете устройството по-бавно” или „Включете осветлението”.
За възстановяване след повреда ARKit автоматично стартира релокализация — опитва да съпостави текущия видео поток със запазената карта на околната среда. Ако релокализацията не е възможна, сесията се рестартира с нова конфигурация. Препоръчва се запазване на ARWorldMap при излизане от приложението за бързо възстановяване на AR сцената при връщане.
class ARViewController: UIViewController {
let arView = ARSCNView()
override func viewDidLoad() {
super.viewDidLoad()
arView.session.delegate = self
let config = ARWorldTrackingConfiguration()
config.planeDetection = [.horizontal]
config.frameSemantics = .personSegmentation
arView.session.run(config)
}
func sessionWasInterrupted(
_ session: ARSession
) {
showAlert("Сесията е прекъсната")
}
}
Често задавани въпроси
ARKit работи на Apple устройства с чип A12 Bionic и по-нови: iPhone XS, XR, 11, 12, 13, 14, 15, 16 и SE (2-ро и 3-то поколение), iPad Pro 2018+, iPad Air 2020+, iPad mini 2021+. За LiDAR функции се изискват iPhone 12 Pro/Pro Max, iPhone 13 Pro/Pro Max, iPhone 14 Pro/Pro Max, iPhone 15 Pro/Pro Max и iPad Pro 2020+.
Да, ARKit може да се използва директно с Metal, но това изисква писане на собствен шейдър и рендериране. SceneKit и RealityKit предоставят готови решения с интеграция на ARKit на ниво рамка. За начинаещи RealityKit е оптималният избор, тъй като автоматично обработва ARKit функциите.
ARKit автоматично оценява осветлението на сцената чрез камерата и предоставя данни за посоката, интензитета и цветната температура на светлинния източник чрез AREnvironmentProbeAnchor. Това позволява на виртуалните обекти да хвърлят правилно сенки и да отразяват околната среда, създавайки реалистично сливане с реалния свят.
ARKit работи само на iOS и използва Visual-Inertial Odometry за проследяване, докато ARCore на Google работи на Android и използва собствен Motion Tracking на базата на IMU и камера. ARKit има предимство благодарение на хардуерната интеграция с чиповете на Apple, а ARCore — мултиплатформеност чрез Cloud Anchors.
Да, ARKit е идеален за AR игри. SceneKit и RealityKit поддържат физика (SCNPhysicsBody, PhysicsSimulation), анимация, звук и частици. Известни примери — Pokémon GO (използва собствен двигател с ARKit), Angry Birds AR и Lego AR Studio. ARKit също поддържа мултиплейър сесии чрез ARWorldMap.
Обобщение
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също