What is iOS app development with ARKit?

ARKit na iOS: Vytvořte si vlastní AR aplikaci

24/03/2023

Rating: 4.76 (2108 votes)

Vítejte ve fascinujícím světě rozšířené reality (AR), kde se digitální obsah plynule prolíná s reálným světem. Díky frameworku ARKit od společnosti Apple se vývoj AR aplikací pro iOS stal dostupnějším a výkonnějším než kdykoli předtím. Tento komplexní průvodce vás provede celým procesem tvorby vlastní aplikace rozšířené reality, od základních konceptů až po pokročilé techniky optimalizace a ladění. Připravte se prozkoumat, jak můžete s ARKit oživit své kreativní nápady a nabídnout uživatelům iPhone a iPadu skutečně pohlcující zážitky.

What is iOS app development with ARKit?
iOS App Development with ARKit: A Step-by-Step Guide to Building an AR App is a comprehensive tutorial that covers the technical background, implementation guide, code examples, best practices, testing, and debugging to help you build a fully functional AR app.
Obsahový index

Co je ARKit a proč ho používat?

ARKit je robustní framework pro iOS, který umožňuje vývojářům snadno vytvářet aplikace s rozšířenou realitou. Využívá pokročilé technologie, jako je vizuální inerciální odometrie (VIO), k přesnému sledování polohy zařízení ve fyzickém prostoru. To umožňuje aplikacím umisťovat virtuální objekty s neuvěřitelnou přesností a realističností do reálného světa.

Klíčové pojmy a terminologie

  • Rozšířená Realita (AR): Překrytí digitálního obsahu na reálné prostředí, viditelné skrze obrazovku zařízení (např. iPhone). Umožňuje interakci s virtuálními objekty, které se jeví jako součást skutečného světa.
  • Virtuální Realita (VR): Úplné ponoření do digitálního světa, obvykle s použitím speciálních náhlavních souprav, které blokují pohled na reálné prostředí.
  • Smíšená Realita (MR): Kombinace AR a VR, kde se digitální objekty nejen překrývají, ale mohou také interagovat s reálným světem a na něj reagovat.
  • 3D Modelování: Proces vytváření trojrozměrných digitálních reprezentací objektů.
  • 3D Texturování: Aplikace obrázků (textur) na povrchy 3D modelů, které jim dodávají detail, barvu a realističnost.
  • Odhad Světla (Light Estimation): Schopnost ARKit odhadnout světelné podmínky v reálném prostředí a přizpůsobit osvětlení virtuálních objektů tak, aby vypadaly přirozeně.
  • Odhad Kamery (Camera Estimation): Sledování polohy a orientace kamery zařízení v reálném čase, což je základ pro přesné umístění virtuálních objektů.

ARKit vs. VR vs. MR: Srovnání

Pro lepší pochopení rozdílů mezi těmito technologiemi, podívejme se na srovnávací tabulku:

FunkceRozšířená Realita (AR)Virtuální Realita (VR)Smíšená Realita (MR)
PonořeníČástečné (digitální na reálném)Úplné (pouze digitální)Vysoké (digitální s interakcí reálného)
ZařízeníSmartphone/tablet (iPhone, iPad)VR headset (Oculus, HTC Vive)Pokročilé MR headsety (HoloLens)
Interakce s reálným světemAnoNeAno (často s porozuměním prostředí)
Příklady použitíHry (Pokémon GO), nábytek v místnosti, navigaceHry, simulace, virtuální prohlídkyPrůmyslový design, medicína, vzdálená spolupráce

Jak ARKit funguje pod pokličkou?

ARKit využívá kombinaci senzorů a softwarových algoritmů k neustálému odhadování prostředí a následnému překrývání digitálního obsahu. Proces zahrnuje několik klíčových kroků:

  • Sledování Polohy (Tracking): ARKit nepřetržitě sleduje polohu a orientaci zařízení v prostoru pomocí vizuální inerciální odometrie. To znamená, že kombinuje data z kamery (vizuální informace o rysech prostředí) a inerciálních senzorů (akcelerometr, gyroskop).
  • Detekce Plochy (Plane Detection): Schopnost ARKit detekovat rovné povrchy v reálném světě, jako jsou podlahy, stoly nebo stěny. Na tyto detekované plochy lze pak umístit virtuální objekty.
  • Odhad Světla (Light Estimation): ARKit analyzuje osvětlení scény pomocí kamery a odhaduje směr, intenzitu a barvu světla. Virtuální objekty jsou pak renderovány s osvětlením, které odpovídá reálnému prostředí, což výrazně zvyšuje realismus.
  • Kotevní body (Anchors): Virtuální objekty jsou připojeny k tzv. kotevním bodům (ARAnchors), které ARKit udržuje v přesné poloze v reálném světě, i když se zařízení pohybuje.
  • Renderování: Jakmile jsou data o prostředí a poloze k dispozici, ARKit (ve spojení se SceneKit nebo RealityKit) vykresluje 3D modely a textury na pohled z kamery zařízení pomocí grafické jednotky (GPU).

Co potřebujete k zahájení vývoje?

Než se pustíte do kódování, ujistěte se, že máte připravené následující nástroje a znalosti:

Hardware a Software

KategoriePožadavekPoznámky
Vývojové prostředíXcode 12 nebo novějšíNezbytné pro vývoj iOS aplikací.
Operační systémmacOS s kompatibilním procesoremXcode běží pouze na macOS.
Cílové zařízeníiPhone nebo iPad s iOS 14 nebo novějším a čipem A9 (nebo novějším)Pro plné testování ARKit funkcí je nutné fyzické zařízení. Simulační prostředí má omezení.
FrameworkARKit 4 nebo novějšíJe součástí iOS a Xcode.

Potřebné znalosti

  • Programovací jazyk: Swift (doporučeno) nebo Objective-C. Swift je moderní a preferovaný jazyk pro vývoj iOS.
  • Základy iOS vývoje: Znalost UIKit (nebo SwiftUI), práce s ViewControllery, delegáty a základní správa paměti.
  • 3D koncepty: Základní porozumění 3D souřadnicím, transformacím (rotace, posun, měřítko) a scénám.
  • Volitelné nástroje:
    • 3D modelovací software: Např. Blender (zdarma), Maya, Cinema 4D pro tvorbu vlastních 3D modelů.
    • Software pro úpravu textur: Např. Adobe Photoshop, GIMP pro přípravu textur pro vaše 3D modely.
    • Herní enginy: Unity nebo Unreal Engine s AR Foundation / AR Toolkit pro komplexnější AR aplikace, které vyžadují pokročilejší fyziku nebo vizuály.

Krok za krokem: Vytvoření AR aplikace

Následující kroky popisují základní proces implementace AR aplikace s ARKit a SceneKit (který je s ARKit často používán pro správu 3D scény).

Krok 1: Vytvoření nového projektu v Xcode

Začněte vytvořením nového projektu v Xcode. Zvolte šablonu Augmented Reality App , která automaticky nastaví základní strukturu s ARSCNView (ARKit a SceneKit View) a potřebnými konfiguracemi. To vám ušetří spoustu počátečního nastavení.

// Vytvořte nový projekt v Xcode // Zvolte šablonu: App -> iOS -> Augmented Reality App // Ujistěte se, že je vybrána technologie SceneKit nebo RealityKit pro zobrazení 3D obsahu.

Krok 2: Nastavení ARKit session

Každá AR aplikace potřebuje ARSession, která spravuje sledování pohybu zařízení a detekci prostředí. Konfigurace session určuje, jaké funkce ARKit bude využívat (např. detekce rovin).

import ARKit class ViewController: UIViewController, ARSCNViewDelegate { @IBOutlet var sceneView: ARSCNView! override func viewDidLoad() { super.viewDidLoad() sceneView.delegate = self sceneView.showsStatistics = true // Zobrazí statistiky ladění jako je FPS } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // Konfigurace ARSession pro sledování světa a detekci horizontálních rovin let configuration = ARWorldTrackingConfiguration() configuration.planeDetection = [.horizontal] configuration.environmentTexturing = .automatic // Zlepšuje realismus osvětlením // Spuštění AR session sceneView.session.run(configuration) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) // Pozastavení AR session při opuštění zobrazení sceneView.session.pause() } }

Krok 3: Vytvoření 3D modelů a textur

Vaše AR aplikace bude potřebovat 3D obsah. Můžete použít hotové 3D modely (např. ve formátu USDZ, který je pro ARKit optimalizovaný) nebo je vytvořit sami v 3D modelovacím softwaru. Textury pak dodají modelům vizuální detaily.

// Příklad vytvoření jednoduchého 3D modelu (krychle) v SceneKit let cubeGeometry = SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0.01) let material = SCNMaterial() material.diffuse.contents = UIColor.blue // Nastaví barvu krychle na modrou // Můžete také použít obrázek jako texturu: // material.diffuse.contents = UIImage(named: "mojeTextura.png") cubeGeometry.materials = [material] let cubeNode = SCNNode(geometry: cubeGeometry) cubeNode.position = SCNVector3(0, 0, -0.5) // Umístí krychli 0.5 metru před kameru // Přidání uzlu do scény // self.sceneView.scene.rootNode.addChildNode(cubeNode) 

Pro komplexnější modely je doporučeno importovat soubory jako .scn, .usdz, .obj nebo .dae, které vytvoříte v externích aplikacích.

Krok 4: Implementace odhadu kamery a osvětlení

ARKit automaticky provádí odhad polohy kamery a světelných podmínek. Tyto informace jsou klíčové pro realistické vykreslování virtuálních objektů. ARKit se snaží, aby virtuální objekty vypadaly, jako by byly přirozeně osvětleny v reálném světě.

// ARKit automaticky používá informace z kamery a světelných senzorů. // Světlo se obvykle přidává automaticky do scény pomocí SceneKit. // Pro pokročilejší ovládání osvětlení můžete použít ARLightEstimate: func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) { if let lightEstimate = sceneView.session.currentFrame?.lightEstimate { // Zde můžete použít lightEstimate.ambientIntensity nebo lightEstimate.directionalLightEstimate // pro dynamickou úpravu osvětlení vašich virtuálních objektů. // Například, můžete upravit intenzitu světel ve scéně. } }

Krok 5: Vytvoření interaktivních 3D objektů a scén

Aby vaše aplikace byla poutavá, virtuální objekty by měly reagovat na uživatelský vstup. Toho lze dosáhnout přidáním gest na ARSCNView a následnou interakcí s 3D uzly (SCNNode).

// Přidání 3D objektu na detekovanou plochu (příklad z ARSCNViewDelegate) func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) { guard let planeAnchor = anchor as? ARPlaneAnchor else { return } // Vytvoření roviny pro vizualizaci detekované plochy let plane = SCNPlane(width: CGFloat(planeAnchor.extent.x), height: CGFloat(planeAnchor.extent.z)) let planeNode = SCNNode(geometry: plane) planeNode.position = SCNVector3(planeAnchor.center.x, 0, planeAnchor.center.z) planeNode.eulerAngles.x = -.pi / 2 // Otočení roviny, aby byla horizontální node.addChildNode(planeNode) // Přidání vizualizace roviny k anchor uzlu // Zde můžete přidat váš vlastní 3D model na detekovanou plochu: // let customModelNode = SCNNode(geometry: SCNBox(width: 0.2, height: 0.2, length: 0.2, chamferRadius: 0.0)) // customModelNode.position = SCNVector3(0, 0.1, 0) // Mírně nad rovinou // node.addChildNode(customModelNode) }

Krok 6: Zpracování uživatelského vstupu a gest

Nejčastější interakcí v AR aplikacích je klepnutí na obrazovku pro umístění nebo manipulaci s objekty. Pomocí UITapGestureRecognizer a metody hitTest můžete zjistit, kam uživatel klepl v 3D prostoru.

// V ViewControlleru přidejte gesto do viewDidLoad() let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(recognizer:))) sceneView.addGestureRecognizer(tapGesture) // Implementace metody pro zpracování klepnutí @objc func handleTap(recognizer: UITapGestureRecognizer) { let sceneView = recognizer.view as! ARSCNView let touchLocation = recognizer.location(in: sceneView) // Provedení hit testu pro nalezení existujících 3D objektů let hitTestResults = sceneView.hitTest(touchLocation, options: nil) if let firstResult = hitTestResults.first { // Uživatel klepl na existující 3D objekt print("Klepnutí na 3D objekt: \(firstResult.node.name ?? "Neznámý objekt")") // Zde můžete implementovat rotaci, změnu barvy, atd. firstResult.node.runAction(SCNAction.rotateBy(x: 0, y: CGFloat(GLKMathDegreesToRadians(360)), z: 0, duration: 2)) } else { // Uživatel klepl do prostoru, zkuste umístit objekt na detekovanou rovinu let hitTestResultsWithFeaturePoints = sceneView.hitTest(touchLocation, types: .estimatedHorizontalPlane) if let hitResult = hitTestResultsWithFeaturePoints.first { // Vytvořte nový objekt a přidejte ho na místo klepnutí let newObject = SCNNode(geometry: SCNBox(width: 0.1, height: 0.1, length: 0.1, chamferRadius: 0.01)) newObject.position = SCNVector3(hitResult.worldTransform.columns.3.x, hitResult.worldTransform.columns.3.y, hitResult.worldTransform.columns.3.z) newObject.name = "Nový Objekt" sceneView.scene.rootNode.addChildNode(newObject) print("Umístěn nový objekt na rovině.") } } }

Nejlepší postupy a optimalizace

Pro vytvoření plynulé a vizuálně přitažlivé AR aplikace je klíčová optimalizace a dodržování osvědčených postupů.

Úvahy o výkonu

  • Optimalizujte 3D modely a textury: Používejte modely s nízkým počtem polygonů (pokud to vizuální kvalita dovolí) a komprimované textury. Formát USDZ je pro ARKit vysoce optimalizovaný.
  • Správa paměti: AR aplikace mohou být náročné na paměť. Uvolňujte zdroje, které již nepotřebujete (např. po skončení AR session).
  • Efektivní renderování: Minimalizujte počet uzlů ve scéně. Používejte culling (odstranění neviditelných objektů z renderování) a level of detail (LOD) pro složité modely.
  • Sledování FPS: Využívejte sceneView.showsStatistics = true pro sledování snímkové frekvence (FPS) a dalších metrik výkonu během vývoje. Ideální je udržet FPS co nejblíže 60.

Bezpečnostní úvahy

  • Ochrana uživatelských dat: Pokud vaše aplikace shromažďuje jakákoli uživatelská data (např. data o prostředí), zajistěte jejich zabezpečení šifrováním.
  • Validace vstupu: Vždy ověřujte uživatelský vstup a gesta, abyste předešli bezpečnostním zranitelnostem nebo neočekávanému chování aplikace.
  • Oprávnění: Jasně vysvětlete uživateli, proč vaše aplikace potřebuje přístup ke kameře.

Tipy pro organizaci kódu

  • Konzistentní struktura adresářů: Udržujte svůj projekt uspořádaný pomocí logické struktury složek (např. Models, Views, Controllers, Utilities).
  • Jasné a popisné názvy proměnných: Používejte názvy, které jasně vyjadřují účel proměnných, funkcí a tříd.
  • Komentáře: Komentujte složitější části kódu, algoritmy nebo části, které by mohly být pro ostatní vývojáře nejasné.
  • Modulární design: Rozdělte komplexní funkce do menších, znovupoužitelných modulů nebo tříd.

Časté chyby, kterým se vyhnout

  • Slabé reference na ARSession, uzly: Ujistěte se, že držíte silné reference na klíčové objekty (jako je ARSession nebo SCNNodes), které potřebujete, aby zůstaly v paměti. Slabé reference mohou vést k neočekávanému uvolnění objektů a pádům aplikace.
  • Ignorování chyb: Vždy implementujte robustní mechanismy pro zpracování chyb a neočekávaných stavů (např. ztráta sledování, nedostatečné osvětlení).
  • Neoptimalizované modely: Používání neoptimalizovaných 3D modelů je nejčastější příčinou špatného výkonu.
  • Nedostatečné testování: Netestování na různých zařízeních a v různých prostředích může vést k problémům u koncových uživatelů.

Testování a ladění AR aplikací

Testování je neodmyslitelnou součástí vývoje AR aplikací. Vzhledem k závislosti na reálném prostředí je nezbytné testovat na fyzickém zařízení.

Testování implementace

  • Testujte na různých zařízeních: Chování ARKit se může mírně lišit na různých modelech iPhonu/iPadu kvůli rozdílům v senzorech a výkonu.
  • Testujte v různých prostředích a světelných podmínkách: ARKit se spoléhá na vizuální informace, takže aplikace by měla fungovat spolehlivě v dobře osvětlených místnostech, venku i v méně ideálních podmínkách.
  • Testujte výkon a bezpečnost: Sledujte FPS a spotřebu paměti. Zkuste záměrně vyvolat chyby nebo neplatný vstup, abyste otestovali mechanismy pro zpracování chyb.

Nástroje pro ladění v Xcode

  • Xcode Debugger: Použijte standardní debugger pro krokování kódem a kontrolu hodnot proměnných.
  • Xcode Console: Využijte print() pro logování zpráv a výstupů ladění.
  • ARKit Debug Options:sceneView.debugOptions nabízí užitečné vizualizace, jako je detekce rovin, body sledování (feature points) a vizualizace orientace zařízení. Například: sceneView.debugOptions = [.showFeaturePoints, .showWorldOrigin].
  • AR Session Observer: Implementujte metodu session(_:didFailWithError:) v delegátu ARSession pro zachycení chyb ARKit.
  • Apple Developer Documentation: Oficiální dokumentace ARKit je neocenitelným zdrojem pro řešení běžných problémů a pochopení pokročilých funkcí.

Běžné problémy a řešení

ProblémMožná příčina / Řešení
AR aplikace se nespustí nebo se nic nezobrazí.Zkontrolujte stav ARSession. Ujistěte se, že je ARKit framework správně importován a že cílové zařízení podporuje ARKit (čip A9+ a iOS 14+). Zkontrolujte konfiguraci ARWorldTrackingConfiguration.
Virtuální objekty se neobjevují nebo mizí.Zkontrolujte, zda ARSession běží. Ujistěte se, že objekty jsou správně přidány do scény a že jsou viditelné (jejich pozice není mimo rozsah kamery). Pro detekci rovin se ujistěte, že je povolena planeDetection a že je v prostředí dostatek textury pro ARKit, aby mohl roviny detekovat.
AR aplikace nereaguje na uživatelský vstup (klepnutí, gesta).Ověřte konfiguraci UITapGestureRecognizer a zda je správně přidán k ARSCNView. Zkontrolujte metodu hitTest a její parametry.
Objekty se třesou nebo se posouvají.Indikuje problémy se sledováním. Ujistěte se, že je v místnosti dostatečné osvětlení a dostatek vizuálních prvků pro sledování. Vyvarujte se rychlým a trhavým pohybům zařízení.
Nízká snímková frekvence (FPS).Příliš mnoho polygonů ve 3D modelech, velké textury, mnoho světel nebo složité shadery. Optimalizujte 3D assety a snižte komplexnost scény.

Často kladené otázky (FAQ)

Zde jsou odpovědi na některé běžné otázky, které mohou vyvstat při práci s ARKit.

Jaký je rozdíl mezi SceneKit a RealityKit pro AR?

SceneKit je 3D grafický framework od Applu, který existuje déle a je velmi flexibilní pro práci s 3D scénami. Je vhodný pro vývojáře, kteří preferují imperativní programování a mají zkušenosti s 3D grafikou. RealityKit je novější framework (představený s iOS 13), navržený speciálně pro AR, s důrazem na realismus, snadné použití a výkon. RealityKit je deklarativnější a lépe se integruje s USDZ formátem. Pro začátečníky nebo pro aplikace, které vyžadují vysoký realismus a plynulé animace, může být RealityKit lepší volbou. Pro složité interakce a vizuální efekty může být SceneKit stále výhodnější.

Proč se můj AR objekt neobjevuje?

Nejčastější důvody jsou:

  • ARSession není spuštěna nebo je nesprávně nakonfigurována (např. chybí configuration.planeDetection).
  • Objekt je umístěn mimo viditelné pole kamery. Zkuste ho umístit blízko středu obrazovky (např. SCNVector3(0, 0, -0.5)).
  • ARKit nedokázal detekovat povrch pro umístění objektu. Zkuste skenovat okolí pomalými pohyby zařízení.
  • Problém s importem 3D modelu (např. chybějící soubor nebo nesprávná cesta).

Jak mohu zlepšit výkon mé AR aplikace?

Kromě optimalizace 3D modelů a textur (snížení polygonů, komprese textur) můžete:

  • Omezit počet objektů ve scéně.
  • Vypnout nepoužívané funkce ARKit (např. environmentTexturing, pokud ji nepotřebujete).
  • Používat efektivní shadery a materiály.
  • Zajistit, aby ARSession nebyla pozastavena na pozadí.
  • Sledovat statistiky výkonu v Xcode Debug Navigatoru.

Mohu použít ARKit pro více uživatelů?

Ano, ARKit podporuje multi-user AR zážitky, kde více uživatelů může sdílet stejný AR prostor. Toho se dosahuje sdílením mapy světa (world map) mezi zařízeními. Používá se k tomu ARSession.Collaboration a ARWorldMap. Tato funkce je ideální pro společné hry nebo aplikace pro spolupráci.

Jak ARKit ovlivňuje životnost baterie?

ARKit je poměrně náročný na systémové zdroje, protože neustále využívá kameru, senzory a GPU. To může mít významný dopad na životnost baterie. Pro minimalizaci spotřeby byste měli:

  • Pozastavit ARSession, když aplikace není v popředí nebo když AR funkce nejsou aktivně používány.
  • Optimalizovat výkon aplikace, aby se minimalizovalo zatížení GPU.
  • Informovat uživatele o potenciální vyšší spotřebě baterie.

Závěr

Vývoj iOS aplikací s ARKit otevírá dveře k neuvěřitelně inovativním a poutavým uživatelským zážitkům. Od jednoduchých her až po komplexní vizualizační nástroje, možnosti jsou téměř nekonečné. S pochopením základních konceptů, osvojením si implementačních kroků a dodržováním osvědčených postupů můžete vytvářet funkční a vizuálně přitažlivé AR aplikace, které překračují hranice mezi digitálním a fyzickým světem. Pamatujte, že nejdůležitější je experimentovat a neustále se učit. Svět rozšířené reality se neustále vyvíjí, a s ARKit máte v rukou výkonný nástroj, jak být v čele této vzrušující revoluce v mobilních aplikacích.

Chceš-li si přečíst další články podobné jako ARKit na iOS: Vytvořte si vlastní AR aplikaci, navštiv kategorii iPhone.

Go up