< Zpět na články

Co byste měli vědět, než začnete s AR projektem

Rozšířená realita (Augmented Reality) je už dnes častým buzzwordem. Je to ale stále něco nového, fascinujícího, zkrátka sexy. Co lze ale opravdu tvořit a kolik úsilí, práce, času, potažmo peněz to stojí?

Hloubková data, aneb hloubka prostoru je jedním z hlavních pilířů v oblasti porozumění snímané scény kamerou. Už dříve představený projekt Tango (2014) od Googlu dokázal pomocí speciálního čidla vzdálenosti vytvořit virtuální představu 3D prostoru uvnitř mobilního zařízení. Dnes je toto možné i bez speciálního čidla vzdálenosti. Nedávno představené technologie ARKit od Applu nebo projekt ARCore vycházející z projektu Tango lze použít k poměrně snadnému získání virtuální představy o snímaném prostoru, avšak i tyto technologie mají svá omezení.

Vlastnosti SDK

Obě technologie mají přibližně stejný set schopností. Jedno SDK umí něco lépe, druhé zase něco jiného, ale víceméně si jsou podobné.

  • Detekce bodů zájmu (Feature Points): Nalezení stejných (odpovídajích) bodů při kontinuálním snímání. Ze dvou obrazů (dva snímky z videa), které jsou jen nepatrně jiné, lze spočítat, která skupina pixelů na jednom snímku odpovídá skupině pixelů na druhém snímku. Tyto body jsou základním stavebním kamenem při rozpoznávání prostředí.
  • Snímání pohybu (Motion Tracking): Virtuální objekty zarovnané v reálném prostředí na základě údajů z polohových senzorů v kombinaci se snímaným obrazem. Schopnost určit polohu a pozici zařízení v reálné scéně.
  • Porozumění prostředí (Environmental Understanding): Odhad horizontálních ploch (polygon u ARCore, obdélník u ARKit) a jejich velikostí. Díky tomu lze s relativně velkou přesností na jednotky milimetrů získat měřítko reálného světa, které je aplikovatelné i na virtuální objekty.
  • Odhad světla (Light Estimation): Zjištění barvy zdroje světla a jeho intenzity pro zajištění realističtějšího podání virtuálních objektů ve scéně.
  • Uživatelská interakce (User Interaction): Schopnost určit souřadnice bodu v reálném světě na základě bodu doteku (nebo směru kamery) v zařízení. Díky tomu lze manipulovat s virtuálními objekty přímo přes display zařízení.
  • Ukotvení (Anchors): Detekované plochy jsou uchyceny v reálném prostoru, díky čemuž nemusí být jednotlivé plochy spojené, a přesto jsou všechny ve stejném měřítku.

Novinky v posledních verzích

V ARCore 1.0 se zrychlila detekce feature points, byla přidána další podporovaná zařízení a hlavně přibyla možnost detekce texturovaných ploch obecně. Díky tomu lze detekovat šikmé plošiny nebo i stěny. V ARKit s příchodem iOS 11.3 přibyla možnost detekce vertikálních ploch, autofocus nebo schopnost rozpoznání předem definovaných obrazů.

Omezení AR technologií

Mezi první lze zařadit seznam podporovaných zařízení.

ARKit (iOS)ARCore (Android)
– iPhone (SE, 6s, 7, 8, Plus, X) – iPad Pro – iPad (2017)– Asus Zenfone AR – LG (V30, V30+) – Google Pixel (1, 2, XL) – OnePlus 5 – Samsung Galaxy (S7, S7 Edge, S8, S8+, Note 8)

ARKit vyžaduje iOS 11+ a procesor A9 nebo novější, ARCore potřebule alespoň Android 7.

  • Nedostatek světla nebo rozmazaný obraz (v důsledku rychlého pohybu kamery) zhoršuje kvalitu detekce, neboť feature points jsou hůře rozpoznatelné.
  • Reflexní plochy nebo plochy s málo detaily nemají téměř žádné feature points, proto je vhodnější texturovaný povrh.
  • Detekce složitějších scén jako jsou například schodiště, nakloněné plochy atp. jsou pomocí zmíněných SDK prozatím v příliš rané fázi vývoje.
  • Detekce směru světla prozatím není dostupná.
  • Detekce objektů je v této oblasti okrajovým tématem a velká podpora ze stran dodavatelů SDK není. ARKit začíná experimentovat s rozpoznáváním předem známých obrazů, ale obecně je vhodnější prozatím spoléhat na jiné knihovny, mezi které patří například OpenCV (jedna z nejrozšířenějších knihoven pro zpracování obrazu).

Spása v podobě Unity

Obě SDK lze používat jak nativně, tak ale i ve spojení s nástroji usnadňujícími manipulaci v 3D prostředí. Jedním z nich je například Unity 3D. Díky němu lze virtuální prostředí tvořit výrazně snadněji než pomocí nativního kódu na koncové platformě. V Unity lze napsat jeden kód, který je poté možné spustit na obou platformách, avšak jsou zde jistá omezení, neboť aby byl kód multiplatformní a pouze jeden, je nutné vyextrahovat průnik vlastností, které mají obě platformy společné.

Mezi nejvýraznější odlišnosti obou technologií patří detekce ploch, která je v každém SDK řešena poměrně odlišně. ARCore dokáže detekovat plochy jako diskrétní konvexní polygony (mnohoúhelníky), které se snadno mohou přizpůsobit křivkám prostředí. ARKit detekuje pouze čtyřúhelníky (od ARKit 1.5 také polygony). Aby bylo možné spustit detektor ploch na obou platformách, je nutné použít detekci ploch takovou, aby byla realizovatelná na obou platformách, a tedy detekci obdélníkových ploch. Pro tento případ lze použít abstrakci obou platforem použitím ARInterface, čímž lze pracovat s jedním SDK, které na pozadí využívá technologie buď ARKit na iOS, nebo ARCore na Android zařízeních. ARInterface nabízí i možnost ladit aplikace přímo z počítače bez nutnosti pouštět kód na koncovém zařízení, což ušetří ve finále čas při debugování.

Příklad AR projektu

Pro názorný příklad náročnosti AR napsané v Unity byl vybrán pohybující se model BB8 (robot ze Star Wars).

© Walt Disney Studios Motion Pictures

Jak již bylo napsáno výše, SDK umí detekovat horizontální plochu, neboli zem, stůl atp. Díky tomu získáme představu o aktuální 3D scéně a jejím měřítku. Pohyb kamery po scéně zajišťuje právě ARInterface, který překládá "instrukce" z ARKitu nebo ARCore.

Pro interakci uživatele s prostředím byl vytvořen "zaměřovač". Aby byl framework schopný detekovat plochy, je potřeba mu poskytnou dostatek feature points, které lze získat například horizontálním pohybem kamery okolo požadované plochy určené k detekci. Jakmile se detekuje plocha, jsou položeny základy souřadnicového systému, který je nutný pro vytvořený 3D svět. Zaměřovač se po detekci plochy přichytí na podlahu.

Jakmile známe pozici na podlaze, je možné zde položit jakýkoliv objekt. Do Unity lze importovat téměř cokoliv, pro jednoduchost v tomto případě si vystačíme pouze se základními tvary (koule – tělo, polokoule – hlava, válec – anténky). Výhodou Unity jsou zde například předimplementované fyzikální vlastnosti, které lze objektům propůjčit. Protože bychom rádi, aby se robot pohyboval po podlaze, důležitou silou je gravitace. Na podlahu je nutné rozprostřít virtuální desku (může být neviditelná), která bude sloužit jako tzv. collider a po níž se bude robot pohybovat. BB8 je stroj tvořený kulovitou podstavou, která se valí v závislosti na směru jízdy. Na vrcholku koule je hlava robota tvořená polokoulí spolu se dvěmi anténkami. Vzhledem k jednoduchosti konstrukce lze valivý pohyb simulovat rotací základny při správné rychlosti v závislosti na délce trajektorie, kterou robot ujede.

Výpočet pohybu hlavy okolo sféry vyžaduje použití základní algebry (úhel náklonu ve směru pohybu v závislosti na rychlosti), přičemž pro imitaci realistického pohybu je vhodné pracovat s hmotou (tíhou) jednotlivých částí robota a uvažovat je pro všechny kinetické pohyby. Při troše věnovaného času lze poté docílit poměrně realistického chování. Pro zachování vlastní identity byl robot ošacen do Ackee barev s využitím několika obrázků.

Závěrem lze říci, že vývoj AR aplikací je víceméně úměrně složitý jako tvorba samotného virtuálního prostředí. Díky zmíněným technologiím ARKit a ARCore lze výrazně velké množství nízkoúrovňové práce zjednodušit na naprosté minimum a začít rovnou pracovat v 3D virtuálním světě, kde jsou hranice téměř neomezené. Díky použití nadstavby ARInterface lze značně zjednodušit práci při vývoji, avšak je zde omezení, že finální výsledek (jedna aplikace) bude moct využívat pouze vlastnosti, které jsou v průniku obou SDK. V opačném případě je nutnost psát zvláštní kód využivající SDK konkrétní platformy. Pro zpracování složitějších scén, rozpoznávání objektů atp. je vhodnější navíc pracovat i s jinými knihovnami, které ale nenabízejí tak přímočarou implementaci a složitostí se jedná o samostatný obor.

Pokud vás zaujalo, co umíme s rozšířenou realitou, budeme rádi, když se na nás obrátíte při řešení svých AR projektů.

Dušan Jenčík
Dušan Jenčík
Android Developer

Máte zájem o spolupráci? Pojďme to probrat osobně!

Napište nám >