Aceasta a intrat în interesul consumatorilor, și bineînțeles și în cel al programatorilor, odată cu dezvoltarea procesoarelor și a plăcilor grafice pe dispozitivele mobile. Însă unul dintre primele dispozitive care s-a folosit de ideea din spatele acestei tehnologii a fost Sensorama, creată de Morton Heilig, acum mai bine de 40 de ani. Dispozitivul funcționa pe principii asemănătoare dar cu un mod de implementare mai „rudimentar”. Ceea ce a făcut cunoscută realitatea augmentată este apariția binecunoscutului Google Glass, iar cel care a reușit să împingă barierele mai departe este dispozitivul patentat de Microsoft, Kinect împreună cu căștile virtuale. Nu voi insista pe aceste subiecte, ele făcând parte din altă categorie, pe care aș numi-o „încă experimentală”. Totuși aceste „push”-uri tehnologice au făcut posibilă apariția Realității Augmentate (AR) și pe dispozitivele mobile. Acum, chiar și un programator novice poate realiza o astfel de aplicație cu ajutorul unor SDK-uri puternice puse la discreția oricui.
AR este un mod de a augmenta elementele fizice prin suprapunerea acestora cu conținut digital. Pentru dispozitivele mobile, aplicațiile se folosesc de diverși senzori ai acestuia precum GPS-ul, camera video sau microfonul. Industria cea mai „afectată” de acest trend este cea de gaming, venind puternic din urmă și cea retail; însă din ce în ce mai multe domenii găsesc realității augmentate o utilizare. Fie că sunt aplicații de e-learning, care pot identifica texte, logouri sau alte artificii grafice sau aplicații care îți pot spune informații doar poziționând camera în fața unui monument istoric, dovedesc faptul că această tehnologie prinde deja contur.
AR-ul creează o legătura între utilizator, mediul înconjurător și lumea virtuală. Tehnica AR-ul este aceea de a atașa, de a fixa, elementelor reale imaginii 3D sau 2D prin așa numiții „markers”. Un exemplu de marker vizual este un cititor de bare 2D. De asemenea, în AR sunt folosiți numeroși senzori precum cei de mișcare și urmărire, senzori de recunoaștere sau analiza a imaginilor, a gesturilor și de cele mai multe ori GPS-ul.
Pentru ca aplicația să știe unde anume ești și la ce anume te uiți (locația și orientarea camerei) este nevoie o cameră video calibrată. Sistemul prin care este calculată locația și orientarea relativă a acesteia se numește tracking. Acesta este unul dintre fundamentele realității augmentate. Pentru a transpune însă un obiect virtual, în mod corect, în realitate este nevoie de ceva în plus, iar acesta este un marker. Rolul lui este a defini mărimea obiectului virtual precum și de a recunoaște orientarea camerei video. Un marker bun este un marker ușor de detectat în orice circumstanțe, așa cum sunt cei bazați pe diferențe de luminozitate și nu cei bazați pe variațiuni de culoare, ce pot deveni greu de interpretat datorită variației de lumină. Multe dintre sistemele de marker se folosesc de pătrate alb-negru pentru a realiza o diferențiere evidentă între markers și non-markers. Markerele pot fi de mai multe feluri:
template markers – în care potrivirea se face cu ajutorul unui șablon alb-negru. Este indicat să se folosească o imagine clar definită, încadrată de un chenar.
codurile de bare – formate în majoritatea cazurilor din celule alb-negre încadrate de un chenar sau ce vin împreună cu niște repere grafice.
Un alt mod de tracking este cel bazat pe model. Acest sistem constă în compararea unui model digital cu un obiect real din cadrul unei scene. Acest concept se bazează pe analiza secvențială a unei scene vizuale și oferirea unor descrieri conceptuale a evenimentelor ce au loc într-însa. Pentru a înțelege mai bine acest sistem propun următorul scenariu: O stradă pe care circulă zilnic mașini si o cameră de filmat deasupra acesteia. E nevoie în primul rând de separarea elementelor statice de cele dinamice, mai conchis spus, segmentarea mișcării. Urmează crearea unor modele geometrice 3D care să se suprapună pe cât mai multe categorii de mașini și crearea unui model de mișcare al mașinii în contrast cu șoseaua statică. Astfel se poate crea o scenă în care mașinile sunt scoase din context și devin obiectul de interes.
Există deja pe piață mai multe librării care vin în ajutorul programatorilor oferindu-le posibilitatea de a investi timpul lor mai mult în conceperea produsului și a ideii software decât în algoritmii necesari creării markerilor și folosirii diverșilor senzori ai unui dispozitiv mobil. Majoritatea acestor framework-uri sunt cross-platform, adică se pot folosi pe mai multe device-uri și sisteme. Dintre toate acestea, trei SDK-uri mi-au captat atenția și merită precizate.
Platforma celor de la Qualcomm oferă o gamă mare de suport pentru diverse sisteme având astfel posibilitatea de a scrie o aplicație nativă și de a o face disponibilă pe o marjă mare de device-uri. Utilizează tehnologie bazată pe Computer Vision pentru recunoașterea și urmărirea (tracking) imaginilor planare (Image Targets) și a obiectelor 3D simple, precum obiecte cuboide sau sfere, în timp real. Ca avantaje, este de menționat faptul că este o librărie gratuită ce oferă suport pentru iOS, android și Unity 3D. Obiectele 3D pot fi create și prin intermediul codului, suportă multi-tag, extended tracking (când markerul nu mai este existent în cadrul filmat) și face-tracking și nu în ultimul rând funcționează foarte bine cu motorul grafic NinivehGL. De asemenea, trackingul este mult mai stabil față de celelalte platforme. Faptul că nu are interfață grafică, că dezvoltarea unei aplicații e mai greoaie până te deprinzi cu platforma și că va trebui să scrii cod separat pentru sisteme (acest lucru însă poate fi rezolvat o dată ce o integrezi cu Unity 3D) se numără printre dezavantaje.
Pachetul celor de la Total Immersion deține o gamă mare de suport pentru majoritatea device-urilor. Are o interfață grafică destul de bună în care ai posibilitatea să creezi întregul scenariu. Partea de programare se realizează în LUA, iar librăriile de android și iPhone sunt deja precompilate, aplicațiile realizate în D’Fusion fiind independente de sistemul de operare. Oferă suport pentru Unity 3D și este compatibil cu fișiere din Maya sau Blender. Platforma de dezvoltare D’Fusion Studio poate fi descărcată gratuit. D’Fusion este orientat mai mult pe partea de retail, oferind multe instrumente în această direcție.
O altă platformă la modă și foarte ușor de folosit este Metaio. Ca și celelalte SDK-uri menționate mai sus, și aceasta acordă suport pentru majoritatea metodelor de tracking cunoscute: markeri, modele 3D, image target etc.. Importanți agenți economici au apelat la această platformă în dezvoltarea unor aplicații de succes: Ikea, Lego, Audi. Dar Metaio nu oferă instrumente de tipul „Code Once„ , de aceea e nevoie de a programa separat pentru iOS și Android. Metaio prezintă mult potențial, însă faptul că trebuie să plătești pentru a folosi framework-ul și existența unei documentații destul de slab realizată ține mulți potențiali programatori la distanță.
Unity 3D reprezintă un motor 3D extrem de puternic precum și un mediu de dezvoltare de aplicații interactive extreme de “user friendly”. Acesta are avantajul de a fi foarte ușor de folosit, atât de persoane care nu au cunoștințe solide de programare, cât și de cei experimentați. Un alt beneficiu reprezintă faptul că Unity Technologies oferă două variante pentru dezvoltatori, cea gratuită și varianta Pro pentru care utilizatorul este nevoit să plătească. Varianta Pro oferă mai multe feature-uri și unelte contra sumei de 1500\$. Acest preț este însă pe deplin justificat având în vedere cât de permisivă este licența de publicare Unity. Pentru început, versiunea gratuită ar trebui să fie îndeajuns. O scurtă comparație între cele două versiuni poate fi găsită la adresa http://unity3d.com/unity/licenses , precum și locul de descărcare al versiunii gratuite.
Motorul se folosește de trei limbaje de programare: C#, Boo și Unity JavaScript și poate fi folosit în a dezvolta aplicații pentru majoritatea sistemelor de operare, chiar și cele mobile. De asemenea, oferă posibilitatea de a lucra direct în mediul 3D, adecvat pentru a crea niveluri de joc, meniuri, animații, pentru a realiza scripturi și a le atașa obiectelor. Iar toate acestea sunt accesibile cu doar câteva click-uri, interfața grafică fiind una extrem de ușor de învățat. Un proiect Unity reprezintă un fișier simplu care conține fiecare resursă ce aparține jocului sau aplicației interactive.
Assets reprezintă fiecare resursă pe care aplicația o utilizează. Așadar în “Assets” amintim modele 3D, materiale, texturi, resurse audio, scripturi, fonturi. În afară de câteva obiecte simple, considerate primitive, precum cuburi și sfere, Unity nu are posibilitatea de a crea aceste “assets”. În schimb, acestea trebuie create extern utilizând aplicații de modelare 3D și unelte grafice de pictat, urmând ca ulterior, acestea sa fie importate în Unity. Acest lucru este extrem de ușor de realizat, importarea fiind în același timp robustă și inteligentă. Unity acceptă toate formatele de fișier populare, incluzând 3D Studio Max, Blender, Maya și FilmBox păstrând materialele, texturile și “rigging”.
Scenele reprezintă locațiile unde obiectele din “assets” vor fi amplasate și aranjate pentru a crea ecrane de joc. Panoul cu ierarhia reprezintă conținutul scenei curente într-un format de arbore.
Script-urile sunt cunoscute ca “behaviours”. Ele asigură manipularea și crearea de interactivitate între resurse. Acestea pot fi reutilizate pentru mai multe obiecte, atașarea lor pe resursă realizându-se într-un mod extrem de simplu. În același timp, pot fi adăugate mai multe script-uri pe același obiect de joc.
Exemplu (C#):
using UnityEngine;
using System.Collections;
public class PlayerScript : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
Numele clasei trebuie să aibă același nume cu fișierul în care a fost creată.
Toate script-urile care se atașează pe obiect conțin metodele start() și update(). Metoda start() este apelată o singură dată atunci când obiectul este creat, în timp ce metoda update() este apelată o dată pe cadru.
void Update () {
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
transform.Translate(horizontal, vertical, 0);
}
Acum, după ce am creat script-ul, el trebuie asignat “asset-ului”. Aceasta se face cu “drag-and -drop” pe obiectul de joc. Cu script-ul asignat, se poate rula jocul.
Unity poate publica în Windows, OS X, și prin intermediul plug-in-ului Web Player. Web Player este un plug-in pentru browsere care funcționează cu toate browserele cunoscute și oferă aceeași performanță cu aplicația stand-alone pentru desktop.
Cu Unity Pro se poate publica pentru o gama mai largă de platforme, incluzând: Android, iOS, Wii, Xbox One, Xbox 360, PS3, PS4, Windows Store, Windows Phone, Flash.
Vuforia are încorporat în SDK-ul său mai multe tehnologii ce vin în ajutorul dezvoltatorilor. Printre acestea se numără și Computer Vision, tehnologie prin care dezvoltatorii pot să poziționeze și să orienteze obiectele virtuale, cum ar fi obiectele 3D în corelație cu imaginile din lumea reală când se realizează o vizionare a acestora prin intermediul camerei unor dispozitive mobile. Obiectul virtual urmărește poziția și orientația imaginii în timp real, astfel ca perspectiva utilizatorului asupra obiectului va corespunde cu perspectiva imaginii target. Așadar, obiectul virtual va apărea ca parte a scenei din lumea reală. Vuforia permite câteva variații de implementare ale realității augmentate: modelul peste care se suprapune această lume virtuală/obiect virtual este o imagine, o țintă unică numită Image Target, ce poate fi chiar un marker oferit de Qualcomm. Vuforia oferă și posibilitatea unor ținte multiple.
SDK-ul suportă o varietate de tipuri de ținte, incluzând ținte “markerless”, configurări 3D multi-țintă, “butoane virtuale” folosind “Occlusion Detection” și posibilitatea de a crea și reconfigura mulțimi de ținte la runtime. Vuforia oferă API-uri în C++, Java, Objective-C și în limbajele .NET prin extensia la motorul Unity. În acest mod, SDK-ul realizează suport atât pentru dezvoltarea în mediu nativ Android și iOS cât și dezvoltare de aplicații AR în Unity. Acestea pot fi la fel de ușor de portat pe mai multe platforme, incluzând Android și iOS.
În exemplul descris în rândurile următoare se va folosi un marker Vuforia gratuit. Obiectul 3D a fost suprapus peste imagine. Acest obiect este realizat cu un set de instrumente Blender și Photoshop. Prin altgoritmii sofisticați de Computer Vision, proprietățile imaginii sunt detectate și urmărite. Ținta ajunge să fie cunoscută prin comparații succesive ale acestor trăsături și caracteristici cu cele ale imaginii păstrate într-o bază de date. În momentul în care ținta este recunoscută, aceasta va fi urmărită cât timp se regăsește în câmpul de vizibilitate al camerei foto/video. Crearea țintelor necesită acces în contul utilizatorului pe site-ul Vuforia. Țintele sunt create din fișiere .jpg sau .png(RGB sau greyscale). Caracteristicile sunt păstrate într-o bază de date, fiind organizate în seturi de date.
Vom descrie sumar în următoarele rânduri toți pașii (uni dintre ei pot fi desigur omiși prin abordări alternative) pentru realizarea unei aplicații de AR.
Se presupune că utilizatorul are instalate versiunile compatibile de Unity și
extensia Vuforia pentru Unity. În plus, acesta are nevoie de o cameră web sau
camera smartphone-ului sau tabletei . De asemenea, printați pe o foaie A4
imaginea țintă după creare.
După instalarea uneltelor, va trebui să vă creați un cont pe site-ul oficial
Vuforia
Pasul următor este acela de a crea ținta (Image Target). Navigați la aplicația web Target Manager pe portalul de developer. Această aplicație permite crearea unei baze de date cu ținte pentru a putea fi folosite pe anumite dispozitive precum și în cloud. Creați o bază de date și dați-i un nume și atribuiți-i o țintă. După ce încărcarea țintei este completă, Vuforia execută verificările și procesările necesare. Apoi puteți descărca imaginea țintă. Descărcați fișierul cu extensia .unitypackage care conține ținta.
Porniți Unity, creați un proiect nou și importați fișierele .unitypackage ale Vuforia (SDK-ul și imaginea țintă). Ștergeți camera principală (Main Camera) din ierarhia scenei. Importați acum modelul 3D pe care doriți să îl amplasați peste imaginea țintă. În fereastra de Project, deschideți fișierul Assets/Qualcomm Augmented Reality/Prefabs. Amplasați obiectul ARCamera în scenă. Cu acest obiect selectat, căutați în Inspector și asigurați-vă că opțiunea „Load the Data Set” cu baza dvs. de date (Imagine Țintă) și setați-o ca „Active”. Din același fișier Prefabs importați imaginea țintă în scenă. Cu imaginea selectată căutați utilizând Inspector-ul și setați „Data Set-ul” ca imagine țintă. Imaginea creată anterior ar trebui să fie vizibilă în editorul Unity. Adăugați cu drag-and-drop modelul în obiectul cu imaginea țintă din ierarhia Unity. Utilizați-vă de facilitățile, valorile și uneltele de mișcare pe axele x,y,z pentru a fixa obiectul 3D exact în centrul țintei. De aici încolo, totul depinde de creativitatea dumneavoastră. O sugestie pe care v-o putem oferi este să amplasați o sursă de lumină (directional light) din Unity care să lumineze modelul. Exemplul poate fi rulat prin butonul de „Play”. Vuforia și Unity vor detecta camera web iar Vuforia va aplica algoritmii de detecție și urmărire și va amplasa obiectul pe imaginea printată. Aplicația poate fi apoi portată cu ajutorul instrumentelor interne din Unity pentru a rula pe un dispozitiv mobil.
Am încercat în aceste rânduri să realizăm o imagine de ansamblu a acestei tehnologii emergente. Nu e ca și cum abia acum s-a descoperit realitatea augmentată și implicațiile acesteia în viața de zi cu zi. Însă depășirea problemele care intervin în dezvoltarea acestei tehnologii (și implicit, regăsirea ei în mai multe arii) necesită timp de dezvoltare. Aceste probleme provin din mai multe domenii: sociologic - concepția prin care vedem dispozitivele mobile tot ca un fel de PC-uri când acestea pot fi mult mai mult de atât, tehnologic – aplicațiile de tipul AR necesită procesoare grafice puternice pentru a putea suprapune obiectul/obiectele 3D în timp real fără a-l distorsiona sau întrerupe; aceasta înseamnă și consum de energie mult mai mare , user interaction – crearea unor aplicații ușor de folosit și aplicabile în viața reală. O aplicație AR trebuie să ruleze în timp real, altfel aceasta va folosi informații vechi, false. Performanța aplicațiilor AR pentru dispozitivele mobile este complet dependentă de algoritmii de optimizare deoarece puterea de procesare și memoria sunt limitate pentru acestea.
Aplicațiile AR sunt necesare în situațiile unde percepția umană poate fi perfecționată și unde utilizarea obiectelor virtuale în viața cotidiană ne pot îmbunătăți semnificativ traiul. Aceste aplicații ne pot aduce un nou mod de a vedea și de a interacționa cu mediul înconjurător și cel virtual totodată, o realitate îmbunătățită în propriu buzunar.