Projectes de realitat estesa (XR)

La realitat virtual (VR o virtual reality, en anglès) i la realitat augmentada (AR o augmented reality) són dos camps molt relacionats amb el disseny 3D i el desenvolupament de jocs i aplicacions interactives que han rebut una empenta en els darrers temps gràcies a l’impuls de grans empreses que estan promovent el concepte del metavers.

Els fabricants dels dispositius proporcionen un SDK (equip de desenvolupament de programari) en llenguatges nadius com C++ per poder fer el desenvolupament d’aquestes aplicacions des de zero, però també acostumen a incloure biblioteques que s’integren fàcilment amb els motors de desenvolupament d’aplicacions interactives més populars com Unity i Unreal Engine.

Per demostrar les possibilitats d’aquestes tecnologies, en aquests continguts s’utilitza el motor de jocs Unity, amb les biblioteques Vuforia i Google Cardboard, per fer una introducció al desenvolupament d’aplicacions de realitat augmentada i virtual en un telèfon intel·ligent com a dispositiu.

  • Ulleres de cartró on s'encaixa el mòbil, que queda just davant dels ulls.
  • Google Cardboard. Font: othree. CC BY 2.0. Wikimedia.org.

Cal destacar que pràcticament totes les aplicacions i jocs per a realitat estesa (eXtended Reality en anglès) són desenvolupats amb Unity, Unreal Engine o algun altre motor de jocs. Només en casos molts concrets les companyies opten per fer servir una implementació nativa.

A la figura podeu veure clarament com es diferencia l’ús d’aquestes tecnologies.

Figura Aplicació VR (esquerra) i aplicació AR (dreta)
Fonts: European Space Agency. ESA, CC BY-SA 3.0 IGO. Wikimedia.org (esquerra); IKEA (dreta).

Per una banda, una aplicació de realitat virtual que requereix la utilització d’ulleres i controladors i, per l’altra, una aplicació de realitat augmentada que s’executa en dispositius intel·ligents com mòbils i tauletes.

El metavers

Cal entendre que, actualment, el metavers és un concepte, encara que s’han començat a fer passos en aquesta direcció i s’estan fent grans inversions en aquesta àrea. Però, tot i que hi ha companyies com Qualcomm que han creat un fons d’inversió de 100 milions de dòlars per a projectes relacionats amb el metavers, s’ha d’anar amb molt de compte quan es llegeix sobre aquest terme, ja que s’acostuma a utilitzar amb fins comercials, i sovint només serveix com a reclam publicitari.

Qualcomm

Podeu trobar més informació sobre el fons de Qualcomm al següent enllaç: Qualcomm Launches $100M Snapdragon Metaverse Fund.

El metavers és l’entorn virtual on les persones interaccionen socialment i econòmicament per mitjà d’icones en un ciberespai que és una metàfora del món real.

La idea de metavers implica l’existència d’una xarxa de mons 3D virtuals enllaçats uns amb els altres, enfocada a les interaccions socials, on els usuaris poden passar d’un món a l’altre sense abandonar la xarxa. Hi ha empreses treballant en aquesta línia, com Epic Games amb Fortnite, que ha fet concerts en viu on han pogut assistir milions de persones, Minecraft, Roblox o Meta. A excepció de Meta, els productes de la resta de companyies esmentades no estan relacionats amb la realitat virtual, encara que habitualment és així com s’imagina.

Origen del terme

El terme metaverse va ser encunyat per l’escriptor Neal Stephenson l’any 1992 a la seva novel·la Snow Crash, però la visió va ser portada al cinema per Stephen Spielberg amb Ready Player One, pel·lícula basada en la novel·la del mateix títol d’Ernest Cline. Trobareu més informació sobre el metavers a: Metavers i Metaverse.

En aquests moments hi ha companyies i projectes que fan passes cap al metavers, però no un metavers com a tal. Podeu trobar un resum de la visió del futur del metavers per Mark Zuckerberg, al següent vídeo:

La realitat estesa

El concepte de la realitat estesa consisteix en la combinació d’elements reals i virtuals mitjançant diferents tecnologies com són la intel·ligència artificial, la realitat augmentada i la realitat virtual.

Trobem aplicacions d’aquestes tecnologies molt sovint sense adonar-nos. Per exemple, als noticiaris i programes divulgatius s’utilitzen imatges virtuals superposades sobre la càmera que responen als reflexos i ombres del món real, als filtres d’Instagram i TikTok apliquen tècniques de visió per ordinador per afegir efectes sobre les imatges o les aplicacions de traducció de textos a partir d’imatges en temps real són aplicacions de realitat estesa.

Filant encara més prim, es pot diferenciar entre dos extrems: la realitat virtual, on tot el món és virtual, i la realitat augmentada, on s’afegeixen elements virtuals sobre el món real, com es representa a la figura. Segons avança la tecnologia, aquests extrems es van difuminant cada vegada més perquè aquestes tecnologies permeten fusionar el món real amb el món virtual i connectar-los remotament, permetent la interacció d’usuaris reals i virtuals de manera simultània.

Figura Espectre de la realitat estesa

Realitat augmentada

La realitat augmentada és la tecnologia que permet als dispositius executar aplicacions que, a partir de la imatge capturada per la càmera, interpreten la imatge usant tècniques de visió per ordinador i permeten modificar-la o afegir-hi informació addicional a sobre, fusionant món reals i virtual.

Per a la realitat augmentada es poden utilitzar diferents dispositius que incloguin una càmera de vídeo i programari capaç d’interpretar aquestes imatges, com són les ulleres de realitat augmentada (Hololens, Magic Leap…) o algun altre dispositiu intel·ligent que inclogui una càmera (per exemple, els telèfons intel·ligents o les tauletes).

Entre les aplicacions d’aquest tipus hi ha els filtres d’Instagram i TikTok, jocs com Pokémon Go, el traductor de Google (que superposa la traducció dels textos que captura la càmera), l’assistència en operacions mèdiques, el programari industrial per mostrar el cablejat i informació addicionals sobre els edificis, els catàlegs de productes…

Realitat virtual

Al contrari que la realitat augmentada, les aplicacions de realitat virtual introdueixen l’usuari en un entorn totalment virtual, aïllant-lo completament del món real, mitjançant unes ulleres que cobreixen tot el seu camp visual. Distingim entre un controlador clàssic, un dispositiu/controlador 3DoF i un amb 6DoF:

  • Un controlador clàssic (per exemple, un comandament de joc o gamepad) no permet conèixer la posició ni l’orientació de les mans del jugador, el joc simula els braços del jugador i executa diferents accions segons si prem un botó o un altre (si ha d’enfilar-se, si està disparant una pistola…) Tot el moviment de les mans depèn de les animacions del personatge. Les ulleres per a PlayStation amb el seu comandament de joc són un exemple d’aquest tipus de combinació (vegeu la figura).
Figura PlayStation VR amb comandament de joc
Font: dronepicr. CC BY 2.0. Wikimedia.org.
  • Un dispositiu/controlador 3DoF (tres graus de llibertat) controla la rotació en tres eixos i, per tant, pot determinar on s’apunta com si fos un punter làser. En el cas d’unes ulleres implica que el moviment cap amunt, cap avall o cap als costats no afecta el que veu el jugador, i només la rotació té algun efecte. En conseqüència, la representació és la mateixa si el jugador està dret o assegut. Les ulleres de realitat virtual Oculus Go amb el seu controlador 3DoF són un exemple (vegeu lafigura).
Figura Oculus Go, ulleres i controlador 3DoF
Font: pixabay.com
  • Un dispositiu/controlador 6DoF (sis graus de llibertat) controla tant la rotació com la posició en l’espai. El joc pot detectar on es troben exactament el cap i les mans del jugador, cosa que permet interactuar amb l’entorn “tocant” el món virtual i implementar mecàniques com l’escalada, arrossegament per terra, tir amb un arc, agafar palanques i prémer botons… Vegeu a la figura unes ulleres amb controladors 6DoF.
Figura Ulleres i controladors 6DoF
Font: UW College of Arts & Sciences. Artsci.washington.edu

És indispensable que les ulleres disposin, com a mínim, de tecnologia 3DoF per poder mirar al voltant i preferiblement 6DoF per poder també controlar la posició en la qual es troba el cap de l’usuari (vegeu la figura).

Figura 3DoF vs 6DoF

Les aplicacions de realitat virtual són més immersives atès que l’usuari es troba al centre de l’experiència, que acostuma a incloure també so i permet interactuar amb els elements virtuals mitjançant comandaments de joc, controladors o seguiment de mans, segons el tipus de dispositiu.

Actualment, el gruix de les aplicacions de realitat virtual està orientat cap a l’entreteniment, ja siguin aplicacions de fitness amb ludificació (gamification, en anglès), jocs immersius, aplicacions socials o de reproducció multimèdia. En altres àmbits està aplicada en aplicacions de formació on l’alumne pot manipular elements virtuals perillosos en el món real sense córrer cap risc o rebre entrenament mitjançant simulacions d’equips i situacions en entorns col·laboratius (per exemple, OssoVR és una aplicació d’entrenament de personal sanitari en entorns virtuals).

Un dels principals avantatges de la realitat virtual és que l’usuari no està limitat a una pantalla ni a l’espai real. En aquests entorns pot disposar de tantes pantalles com necessiti, de qualsevol mida o, fins i tot, situar-se al centre de l’acció d’una pel·lícula o d’un concert.

Cal tenir en compte que la representació d’aquests mons virtuals és molt costosa en capacitat de processament, raó per la qual els dispositius de realitat virtual més potents consisteixen en unes ulleres endollades per cable a un ordinador d’alta gamma, que és el responsable de realitzar el processament. Això implica que el cost sigui elevat, perquè, per una banda, és necessari un equip prou potent i, per altra, cal afegir el cost de les ulleres i els controladors.

Per eliminar aquest punt de fricció s’han desenvolupat ulleres sense fils, com les Meta Quest, de Meta, i les Vive Focus, d’HTC Vive, que funcionen de manera independent però amb una qualitat gràfica molt reduïda, ja que treballen amb un processador mòbil incrustat a les ulleres.

També cal tenir en compte que la realitat virtual pot provocar cinetosi en alguns usuaris, encara que l’efecte es redueix amb el temps a mesura que l’usuari s’hi acostuma. De cara a mitigar aquests efectes, els desenvolupadors han d’implementar diferents mecanismes i donar opcions a l’usuari per configurar els nivells de confort com afegir diversos sistemes de locomoció, utilitzar elements gràfics de referència, afegir vinyetes que redueixen el camp de visió quan el jugador es mou, eliminar l’acceleració…

La cinetosi en la realitat virtual

La cinetosi són els marejos i les nàusees provocats per la discrepància de la sensació de moviment percebuda pels ulls i pel cos. Aquest és el mateix fenomen que pateixen moltes persones quan viatgen en tren, en cotxe, en avió…
En el cas de la realitat virtual, els efectes poden reduir-se a mesura que els jugadors s’hi acostumen fins a arribar a desaparèixer.

Actors principals de la indústria

És important conèixer les principals companyies del sector, per tenir una idea de quins són els dispositius més adients per a cada projecte i quines expectatives es poden tenir.

Les companyies i els seus productes més rellevants relacionats amb la realitat estesa en els darrers anys són les següents:

  • Google. És un dels precursors de la realitat virtual per a dispositius mòbils. El projecte CardBoard, del 2014, permetia crear unes ulleres de realitat virtual amb cartó i unes lents on s’inseria un telèfon intel·ligent. Com que era una aplicació normal per a telèfons intel·ligents podia utilitzar-se un comandament de joc compatible. En aquesta línia va llançar el projecte DayDream, per oferir aquest tipus de realitat virtual per a telèfons mòbils d’alta gamma, però va abandonar el projecte poc després. Entre altres projectes relacionats amb la realitat estesa abandonats també hi ha les Google Glasses i el projecte Tango, centrat en el desenvolupament de dispositius mòbils per a realitat augmentada que va ser descartat perquè se centrava en el desenvolupament de la biblioteca ARCore.
  • Meta. Abans coneguda com a Oculus, i adquirida per Facebook. És una de les empreses pioneres en el desenvolupament de dispositius de realitat virtual per a PC, malgrat que actualment ha descartat aquesta línia de negoci i se centra en dispositius de realitat virtual mòbil. L’única línia de producte activa en l’actualitat és Meta Quest (vegeu la figura), un dispositiu sense fils i econòmic (350 € aprox.) amb controladors 6DoF, capacitat per rastrejar les mans i captura d’imatges rudimentària. Es preveu el llançament d’una nova línia de productes l’any 2022, amb un cost major i sistemes millorats, com són la captura de pupil·les i llavis i la millora de la captura d’imatge. En el mercat de jocs de realitat virtual les ulleres Meta Quest són les més utilitzades amb diferència, ja que es poden connectar també al PC via cable o wifi.

S’ha afegit un preu orientatiu (sense descomptes) per a la versió de cada producte en el moment d’elaboració d’aquest material, però s’ha optat per no indicar el número de versió.

Figura Ulleres Oculus Quest 2 i controladors
1200px-oculus_quest_2_-_2.jpg
Font: KKPCW. CC BY-SA 4.0. Wikipedia.org

L’empresa Oculus va ser adquirida per Facebook. Quan es va canviar el seu nom per Meta, l’any 2022, les seves ulleres Oculus Quest van passar a dir-se Meta Quest.

  • Samsung. Va col·laborar amb Meta per llançar les GearVR, unes ulleres que permetien fer servir els mòbils Samsung S6, S7 i S8 amb capacitat 3DoF i que incloïen un controlador 3DoF. El projecte va ser abandonat quan Meta va llançar les ulleres Oculus Go, amb unes característiques equivalents que no requerien la utilització d’un mòbil d’alta gamma.
  • HTC Vive. És una empresa xinesa enfocada al mercat xinès, els seus productes sempre arriben més tard als mercats occidentals. Va col·laborar amb Steam per llançar les seves primeres ulleres, les HTC Vive, que van ser contemporànies de les Oculus Rift, de Meta. Actualment, s’ha enfocat a les ulleres d’alta gamma, amb millors prestacions i preus molt més elevats que les de Meta. Les seves línies de producte inclouen les HTC Pro (1.600 € aprox.) i Cosmos (700 € aprox.) per a PC, les Vive Focus (1.300 € aprox.), amb unes prestacions similars a les Meta Quest, i les Vive Flow (500 € aprox.), unes ulleres molt lleugeres per reproduir aplicacions de meditació i multimèdia que fan servir el dispositiu mòbil com a controlador 3DoF.
  • Microsoft. El producte estrella d’aquesta companyia en l’àmbit de la realitat estesa són les HoloLens (3.500 € aprox.), unes ulleres de realitat augmentada sense cables amb seguiment de mans utilitzades en aplicacions industrials i per l’exèrcit dels Estats Units. El 2017 Microsoft va llançar un seguit d’ulleres de realitat virtual de diferents fabricants que va insistir a anomenar “de realitat mixta” encara que eren exclusivament per a realitat virtual. Tenien diferent rang de preus, però van acabar retirades de la tenda de Microsoft a excepció de la línia HP Reverb (600 € aprox.). Aquestes ulleres no van tenir gaire impacte.
    Podeu trobar més informació sobre les HoloLens al següent vídeo:
  • Magic Leap. És una altra companyia que ofereix ulleres de realitat augmentada d’alta gamma (2.300 € aprox.).
  • PlayStation. L’octubre del 2016 va llançar les ulleres PlayStation VR, que van ser el producte de realitat virtual de més èxit fins al llançament de les ulleres Oculus Quest. A diferència d’altres dispositius, els controls de PSVR són molt limitats, ja que només admeten el controlador de PlayStation i el PlayStation Move, un controlador llançat el 2010 per a la PlayStation 3 que permet rastrejar la posició de les mans del jugador mitjançant els sensors 3DoF del controlador i una càmera que captura la seva posició. Per desenvolupar aplicacions per PlayStation és necessari un equip de desenvolupadors valorat en uns 3.500 € aproximadament. A més, s’ha de sol·licitar, no es pot adquirir directament a la tenda.
  • Xiaomi. Va fabricar les ulleres Oculus Go (199 € aprox., sense fils, amb un únic controlador 3DoF), de Meta, ja retirades. Les distribuïa a la Xina. Des de llavors ha registrat algunes patents d’ulleres de realitat virtual encara que no les ha comercialitzat.
  • Apple. S’ha centrat en el desenvolupament de programari i maquinari per potenciar l’ús de realitat augmentada en els dispositius iOS (ARKit i RealytKit2), però fins ara no ha entrat al mercat dels dispositius de realitat virtual.
  • Steam. Va llençar al mercat, en col·laboració amb HTC, les HTC Vive. El 2019 va llançar les ulleres Valve Index (1.100 € aprox.) per a PC, que inclouen el joc Half Life: Alyx, un dels jocs més ben valorats per a VR. Una característica especial d’aquestes ulleres és que els controladors fan un seguiment precís de tots els dits de la mà.

Mentre que és assequible desenvolupar aplicacions per a alguns dispositius com en el cas de Meta Quest, per altres dispositius pot ser molt car (HTC Vive, Steam), prohibitiu (HoloLens, MagicLeap) o necessitar permisos especials (PlayStation). A la taula podeu veure un resum de les característiques d’alguns d’aquests dispositius.

Dispositiu Tipus Fabricant FOV DoF Preu Característiques
Oculus Go* VR Meta 85° 3DoF 149 € Sense fils
Meta Quest 2 VR/~AR Meta 104° 6DoF 349 € Sense fils, seguiment de mans, permet mostrar l’entorn
Vive Focus 3 VR Vive 120° 6DoF 1.300 € Sense fils
HP Reverb G2 VR HP 98° 6DoF 499 € PC de gamma alta
VIVE PRO 2 VR Vive 120° 6DoF 799 € PC de gamma alta
Valve Index VR Valve Corporation 108° 6DoF 1.079 € PC de gamma alta
PSVR VR Sony 96° 6DoF 399 € PlayStation 4, controladors a banda (144 €)
Hololens 2 AR Microsoft 43° 6DoF 3.500 € Sense fils, sense controladors, seguiment de mans/ulls
MagicLeap AR Magic Leap 40° 6DoF 2.295 € Sense fils, seguiment de mans
(*) producte descatalogat

Pel que fa al mercat de distribució d’aplicacions s’ha d’utilitzar l’apropiat per a cada plataforma, ja que acostumen a ser tancats:

  • Meta. Proporciona la seva pròpia tenda amb diferents restriccions segons el tipus de dispositiu. Per a les aplicacions d’Oculus Rift només s’han de complir les normes generals de la plataforma, però les aplicacions de Meta Quest han de ser aprovades prèviament per poder publicar-les a la tenda principal, encara que ofereix una secció alternativa anomenada AppLab amb les aplicacions que no han estat acceptades i que no surten al buscador principal. També hi ha mercats alternatius com SideQuest, amb menys limitacions d’accés. No obstant això, no compten amb l’exposició ni els sistemes de pagament que proporciona Meta. Les aplicacions per a Oculus Rift també poden distribuir-se mitjançant Steam, al contrari que les aplicacions per a Meta Quest.
  • Vive. Disposa del seu propi mercat i un sistema propi de subscripció anomenat Viveport. Les aplicacions per a dispositius HTC Vive també es poden distribuir a la tenda Steam.
  • Microsoft Mixed Reality. Aquestes aplicacions es poden distribuir a la tenda de Microsoft o mitjançant Steam.

A banda del desenvolupament d’aplicacions, fabricants d’ulleres i controladors, hi ha tot un mercat de dispositius addicionals com són els vestits hàptics, els sistemes de seguiment de cos complet, rodes d’anar per realitat virtual… Però aquests dispositius queden fora de l’abast d’aquest mòdul.

Projectes de realitat augmentada

La realitat augmentada permet afegir informació als elements del món real, ja sigui mostrant models a partir de marcadors o localitzacions, revelant elements de l’arquitectura ocults per les parets o afegint informació sobre els elements inspeccionats.

Un marcador o ancora és un indicador que en ser detectat activa alguna funcionalitat a l’aplicació d’AR. Per exemple, mostrar un model 3D o superposar un vídeo o altres imatges.

Existeixen múltiples tipus de marcadors (també coneguts com a àncores o anchors, en anglès), encara que no tots els tipus són suportats per totes les plataformes: imatges 2D, objectes 3D, cares, geolocalització…

Heu de pensar que implementar un sistema de marcadors per geolocalització no és una qüestió trivial, ja que no està suportat per la majoria de plataformes i depèn del GPS. El GPS és un tipus de sensor que només és fiable en exterior, perquè interpreta la informació rebuda de satèl·lits, que queda bloquejada per parets i sostres.

En els darrers anys, les companyies Google i Apple han centrat els seus esforços en aquesta àrea de la realitat estesa. Han creat els seus propis SDK: ARCore, de Google, per a dispositius Android i ARKit+RealityKit, d’Apple, per a dispositius iOS. Tots dos SDK estan integrats com a connectors per Unity i UE4, per tant, aquests motors poden aprofitar totes les millores que van afegint-se al llarg del temps. Mentre que ARCore pot utilitzar-se amb dispositius iOS, ARKit no funciona amb dispositius Android perquè està enfocat a explotar el maquinari dels dispositius d’Apple.

Sensors LiDAR

Apple ha començat a incloure sensors LiDAR en els seus dispositius d’alta gamma, que permeten escanejar l’entorn i millorar les fotografies. Trobareu més informació en el següent enllaç: How is Apple’s LiDAR Technology a Game-changer for AR Apps.

Per treballar en aplicacions multiplataforma sense haver de duplicar el codi, cal fer servir alguna biblioteca de tercers que integri aquests dos SDK, com Unity AR Foundation o Vuforia, de manera que la mateixa aplicació funcioni tant amb dispositius Android com iOS:

  • La solució de Unity és AR Foundation, una biblioteca que es basa en ARCore i ARKit. No és compatible amb dispositius més antics. En cas d’utilitzar-la, cal consultar la taula de suport de característiques per plataforma abans d’iniciar un projecte, per comprovar si aquesta biblioteca suporta les característiques necessàries per a cada projecte.
  • Vuforia és una plataforma de pagament que permet desenvolupar aplicacions de realitat augmentada. Ofereix un servei integral. També empra ARCore i ARKit internament, però de manera opcional, així que suporta dispositius antics. Aquesta plataforma està més orientada al desenvolupament d’aplicacions industrials.

Comparació entre ARCore, ARKit i Vuforia

Les principals diferències entre aquestes biblioteques són:

  • ARKit ofereix funcionalitats que no es troben a ARCore ni Vuforia com l’oclusió per persones i les sessions col·laboratives, però tan sols funciona amb dispositius iOS i algunes d’aquestes capacitats requereixen utilitzar la gamma més alta de darrera generació. Es requereix una llicència de desenvolupador d’Apple (amb un cost de 99 € anuals) per poder usar-la.
  • ARCore és disponible per iOS i Android de forma gratuïta.
  • Vuforia ofereix un pla gratuït i altres de pagament, amb diferents limitacions. Les versions actuals estan implementades sobre ARKit i ARCore de manera que exploten els seus avantatges si són disponibles al dispositiu. A diferència de les altres dues biblioteques, Vuforia dona suport a dispositius antics.

Podeu trobar més informació al següent enllaç: Comparing ARKit vs ARCore vs Vuforia: The Best Augmented Reality Toolkit.

Experiments AR Foundation i taula de suport

En el següent enllaç de YouTube, trobareu una llista de reproducció amb experiments AR Foundation: Unity AR Foundation Tutorials And Experiments. Per altra banda, la taula de suport de característiques per plataforma és accessible en línia: About AR Foundation.

Exemples de jocs i aplicacions de realitat augmentada

Tot i que la realitat augmentada ofereix moltes possibilitats, actualment es troba molt limitada perquè la tecnologia, fora de l’àmbit dels dispositius mòbils i tauletes, encara no és prou accessible. Al contrari del que passa amb la realitat virtual, no hi ha gaires jocs per a realitat augmentada. I molts dels que s’han creat al llarg del temps han estat ludopublicitat (advergaming), és a dir, jocs promocionals per marques, més que productes d’entreteniment.

En el següent enllaç, podeu veure la xerrada Unity Architecture in Pokémon Go (Unite 2016):

Entre els jocs que aprofiten la realitat augmentada, els més destacables són els següents:

  • Pokémon Go. És el popular joc de Nintendo on el jugador pot capturar Pokémons arreu del món:
  • Harry Potter: Wizards Unite. És un joc inspirat en el món de Harry Potter. Va tancar el 31 de gener del 2022:
  • DC: Batman Bat-Tech Edition. És un joc que porta els personatges dels còmics de Batman al món real:
  • Knightfall AR. És un joc d’estratègia amb ambientació medieval:
  • Jurassic World Alive. És un joc de dinosaures basat en les pel·lícules Jurassic World:

Per altra banda, un ús molt estès de l’AR ha estat amb fins publicitaris. Ja sigui mitjançant ludopublicitat (advergaming) com fa Ferrero amb la seva aplicació Applaydu, que inclou múltiples jocs per a nens basats en els seus productes Kinder, fins a campanyes més elaborades com la de Sephora, que va desenvolupar una aplicació que mostra el maquillatge sobre la cara de l’usuari, o els anuncis interactius en revistes d’Audi.

Pel que fa a les aplicacions d’ús empresarial, vegeu els següents exemples:

  • Ikea. Amb Ikea Place ha creat una aplicació que permet veure com queden els diferents elements del catàleg en l’espai real de l’usuari.
  • Mercedes Benz utilitza la realitat augmentada amb el seu assistent Ask Mercedes, combinant IA, AR i xatbot per oferir assistència a l’usuari.
  • Hyundai ofereix una solució d’AR com a manual d’instruccions.
  • Timberland, una marca de roba, va emprar mecanismes d’AR a les seves tendes: va col·locar panells de cos sencer que permetien a l’usuari emprovar-se diferents vestits com si es mirés en un mirall.

S’ha de tenir en compte que moltes solucions d’AR empresarial són fetes a mida per a ús intern, i no són comercialitzades ni conegudes pel públic general.

Els darrers anys la realitat augmentada ha començat a fer-se servir també en els platós de televisió, principalment en programes de notícies i divulgatius, malgrat que no és l’aplicació típica d’aquesta tecnologia. Però si hi ha un àmbit en el qual s’ha disparat la utilització de la realitat augmentada és sens dubte el de la creació de filtres per a aplicacions com Snapchat, Instagram i TikTok.

  • Spark AR és una aplicació que permet a l’usuari crear filtres de realitat augmentada per a Instagram i Facebook afegint efectes sobre la captura de la càmera.
  • TikTok Effect House és una eina de desenvolupament per filtres AR de TikTok, però està restringida.

Ús de la realitat augmentada per part d'empreses i mitjans de comunicació

En el següent enllaç podeu veure diversos casos de màrqueting empresarial: Ejemplos con realidad aumentada. En aquest trobareu més informació sobre com les marques fan servir l’AR com a eina promocional: Realidad aumentada y marketing. Mentre que en aquest podeu veure com funciona l’aplicació creada per Ikea:


Un altre ús seria el que porten a terme la premsa i els mitjans de comunicació. Per exemple, la televisió pública canària va fer un ús intensiu de l’AR durant el seguiment del volcà de La Palma l’any 2021: La televisión canaria arrasa con la realidad aumentada que usa para explicar el volcán de La Palma.

Biblioteca per a Unity: Vuforia

La plataforma Vuforia s’utilitza principalment en el desenvolupament d’aplicacions industrials, on la seguretat i la fiabilitat són primordials, mentre que AR Foundation és més adequada per a aplicacions lleugeres i d’entreteniment. Per altra banda, en cas que el dispositiu objectiu no suporti ARCore ni ARKit, o necessiteu poder gestionar els marcadors des del núvol, és recomanable usar Vuforia per implementar les aplicacions d’AR.

A banda de les característiques bàsiques d’aquest tipus de biblioteques, també podem destacar:

  • Reconeixement d’objectes 3D (Model Targets) com a marcadors per a totes les plataformes.
  • Possibilitat d’escanejar entorns.
  • Reconeixement d’imatges cilíndriques (per exemple, al voltant d’una llauna).
  • Serveis al núvol per emmagatzemar bases de dades de marcadors.
  • Serveis web per gestionar les bases de dades.

Cal destacar que Vuforia és compatible amb AR Foundation i quan s’instal·len totes dues biblioteques, Vuforia fa servir alguns elements d’AR Foundation com, per exemple, les àncores.

Podeu veure alguns exemples d’implementacions amb Vuforia, en el següent vídeo:

Cas pràctic: Marcador 2D amb Vuforia

Una de les maneres més simples d’utilitzar la realitat augmentada és mitjançant marcadors. Aquests marcadors acostumen a ser imatges o codis QR fàcilment recognoscibles quan són capturats mitjançant la càmera del dispositiu. Es permet a les aplicacions de realitat augmentada conèixer la posició d’aquests marcadors en l’espai per reaccionar en conseqüència, per exemple mostrant un model 3D a la posició del marcador.

Exemples de Vuforia

Podeu trobar els projectes d’exemple de Vuforia al següent enllaç: Vuforia Core Samples.

En aquest cas pràctic es mostren els passos per instal·lar l’SDK de Vuforia versió 10 a Unity i crear una primera aplicació de proves, que mostrarà un cub en 3D en detectar la imatge objectiu, que pot servir com a base per mostrar múltiples models animats assignats a diferents marcadors simultàniament.

Pas 1: Importar l'SDK

Per poder descarregar l’SDK cal que us registreu, feu-ho abans de començar la instal·lació:

  1. Visiteu l’enllaç Vuforia Engine i descarregueu el paquet per a Unity, que tindrà un nom semblant a: add-vuforia-package-10.unitypackage.
  2. Obriu Unity i creeu un nou projecte 3D.
  3. Arrossegueu el fitxer descarregat a la secció d’assets i premeu Import per importar els fitxers que es mostren a la figura.
  4. Es mostrarà un avís per confirmar que voleu descarregar o actualitzar l’SDK de Vuforia, premeu Update.
Figura Importació del paquet Vuforia

Amb l’SDK instal·lat, si aneu al menú GameObject, apareixerà un nou desplegable anomenat Vuforia Engine.

Pas 2: Crear una clau de Vuforia per a l'aplicació

Per crear una aplicació amb Vuforia, cal crear primer una clau des del panell de control de la web. Aquestes claus no són reutilitzables, heu de fer servir una clau diferent per a cada aplicació:

  1. Seguiu els passos que trobareu en el següent enllaç: License key.
  2. En acabar, la vostra clau apareixerà a la llista de llicències. Si la cliqueu, us mostrarà una fitxa com la de la figura.
Figura Fitxa de projecte a Vuforia

Pas 3: Afegir una càmera AR

S’ha de tenir en compte que les aplicacions de realitat augmentada han de mostrar la imatge capturada per la càmera (el món real) i afegir els elements virtuals a sobre, cosa que no permet fer la càmera estàndard.

Per consegüent, és necessari reemplaçar la càmera estàndard de Unity per una càmera de Vuforia, configurada amb la clau creada per aquesta aplicació, que serà la responsable de renderitzar els continguts amb realitat augmentada:

  1. Elimineu l’objecte MainCamera de l’escena.
  2. Seleccioneu GameObject> Vuforia Engine> AR Camera i accepteu els termes d’ús.
  3. Seleccioneu la càmera creada i premeu el botó Open Vuforia Configuration a l’inspector.
  4. Enganxeu a App License Key la clau de llicència generada a l’apartat anterior.

Pas 4: Afegir característiques AR

Cal afegir a l’escena alguns elements virtuals que seran superposats sobre el món real. En aquest cas afegirem un marcador d’imatge, que consisteix en una imatge que quan sigui reconeguda per la càmera instanciarà un model 3D a la seva posició:

  1. Seleccioneu GameObject> Vuforia Engine> Image Target.
  2. Com a tipus seleccioneu From Database. Unity indicarà que no existeix cap base de dades d’objectius al projecte i us demanarà si voleu importar la base de dades per defecte. Premeu Import. S’assignara automàticament VuforiaMars_Images com a Database
  3. Opcionalment seleccioneu com a Image Target algun dels elements carregats, per defecte s’assignarà Astronaut.
  4. Seleccioneu l’ImageTarget a la jerarquia i afegiu un cub que pengi d’aquest amb una escala de 0.05. Si és massa gran, us haureu d’allunyar de la imatge per poder-la veure des de fora, ja que les cares internes del cub són transparents.

Arribats a aquest punt, l’aplicació reconeixerà la imatge indicada a Imatge Target i mostrarà el cub quan la detecti. Podeu trobar les imatges en format PDF corresponents a la base de dades per defecte en el següent enllaç: Mars Target Images.

Es recomana mantenir una escala acurada entre els objectius de Vuforia i les impressions físiques o objectes, en cas contrari la qualitat del seguiment pot veure’s afectada.

Imatges a Vuforia

Per aprendre a carregar imatges objectiu, vegeu aquest enllaç: Create and Load Targets in Unity.
Per aprendre a crear una base de dades d’imatges, podeu consultar aquest altre: Engine Developer Portal Target Manager.


En el següent video podeu veure altres dues maneres d’afegir marcadors d’imatges a Vuforia:

Pas 5: Desplegament a Android

Per provar l’aplicació al telèfon mòbil, cal seguir els següents passos:

  1. Aneu a File> Build Settings, seleccioneu Android com a Platform.
  2. Afegiu l’escena a Scenes in Build.
  3. Seleccioneu Player Settings> Other Settings i assigneu: Android 6.0 ‘Marshmallow’ (API Level 23) com a Minimum API Level i IL2CPP com a Scripting Backend, perquè es requereix per poder utilitzar ARM64.
  4. A Target Architectures marqueu la casella ARM64 requerida per ARCore i desmarqueu ARMv7.

Finalment, premeu Build and Run, seleccioneu el lloc on desar el muntatge (build en anglès) i comproveu el seu funcionament al dispositiu. El funcionament serà similar al que mostra la figura.

Si el dispositiu no suporta ARM64, cal deixar activada la casella ARMv7 i canviar la configuració de Vuforia desmarcant la casella Include ARCore Library.

Figura Detecció de marcador 2D (cub)

De la mateixa manera que s’ha inserit un cub com a imatge, es pot afegir qualsevol model en 3D, incloent-hi animacions. Per exemple, es poden crear dos ImageTarget i assignar a cada un imatges del paquet d’exemples de Vuforia. Quan el dispositiu les detecti col·locarà cada model sobre la seva imatge, com es mostra a la figura.

Figura Detecció de marcador 2D (models 3D)

Vuforia ofereix dues opcions per afegir nous marcadors:

Creació de marcadors

Podeu trobar més informació sobre la creació de marcadors a: Image Targets i Create and Load Targets in Unity.

  • Crear el marcador directament a partir d’una imatge afegida al projecte o en temps d’execució a partir d’un fitxer d’imatge que es trobi al dispositiu.
  • Pujar-lo a la base de dades de l’aplicació a la web de Vuforia.

Biblioteca per Unity: AR Foundation

La biblioteca AR Foundation ofereix unes funcionalitats molt similars a les de Vuforia, però podem destacar les següents:

  • Seguiment del dispositiu: amb posició i orientació a l’espai físic (6DoF).
  • Detecció de superfícies: horitzontals i verticals.
  • Àncores: addició de punts amb localització i orientació a l’espai que queden enregistrats en l’aplicació i són rastrejats en l’espai físic.
  • Estimació de llum: estimació de la temperatura i la brillantor de la llum a l’espai físic i aplicació als elements generats per l’aplicació.
  • Seguiment de cares: detecció i seguiment de cares humanes.
  • Seguiment d’imatges 2D: detecció i seguiment d’imatges 2D (marcadors). Això permet utilitzar aquestes imatges per instanciar models 3D o interfícies.
  • Seguiment d’objectes 3D: és similar a l’anterior, però no està suportat per Android ni HoloLens.
  • Utilització de rajos per detectar l’entorn.
  • Oclusió per detectar quan un objecte renderitzat ha de quedar ocult segons la profunditat de l’entorn.

Ús d'àncores

Podeu veure un exemple d’utilització d’àncores en aquest vídeo:

També inclou característiques com la generació de Point Clouds, que poden ser usades per generar models 3D o analitzar l’entorn. Així mateix, hi ha altres característiques que només estan disponibles amb ARKit i els darrers dispositius iOS, com són la detecció de cossos en 2D/3D i la detecció d’altres usuaris de l’aplicació AR al mateix espai (participants col·laboratius).

Cas pràctic: Detecció de plànols amb AR Foundation+AR Core

La capacitat de detectar plànols permet col·locar elements virtuals directament sobre les superfícies de l’entorn real. Per exemple, l’aplicació d’Ikea permet mostrar com queden els mobles del seu catàleg a casa de l’usuari a partir de la detecció dels plànols del terra per ajustar la base on s’han de col·locar els mobles. Per altra banda, en el cas d’un joc de realitat augmentada, es pot detectar el plànol del terra per renderitzar els personatges, de manera que quedin flotant en l’aire.

A continuació, veurem la sèrie de passos a seguir per crear un projecte amb aquestes característiques.

Pas 1: Crear el projecte

El primer pas per crear un projecte és importar els paquets AR Foundation i ARCore XR Plugin, que són els que afegeixen la funcionalitat de realitat augmentada, i configurar el projecte per fer la build per a Android:

  1. Obriu Unity i creu un nou projecte 3D.
  2. Aneu a Window> PackageManager i seleccioneu Packages: Unity: Registry:
    1. Cerqueu AR Foundation i premeu Install.
    2. Cerqueu ARCore XR Plugin i premeu Install.
  3. Seleccioneu File> Build Settings.
    1. Afegiu l’escena oberta a la llista d’escenes.
    2. Canvieu la plataforma a Android i premeu Switch Platform.
    3. Premeu Player Settings i modifiqueu:
      1. Script Backend: IL2CPP
      2. Target Architecture: ARM64
      3. Minimum API Level: Android 8.0 ‘Oreo’ (API level 26)
  4. Al menú lateral seleccioneu XR Plug-in Management i marqueu la casella ARCore.

Un cop carregats els connectors i configurat el projecte per a Android, tanqueu la finestra per editar l’escena.

Pas 2: Edició de l'escena

Primer cal eliminar la càmera estàndard (que és reemplaçada per AR Origin) i afegir els elements que inclouen els components que permeten detectar els plànols i mostrar els límits dels plànols detectats:

  1. Elimineu la càmera MainCamera, no fa falta perquè s’afegirà una càmera especial.
  2. Afegiu els següents elements a l’escena:
    1. GameObject→XR→AR Origin (la càmera)
    2. GameObject→XR→AR Session
    3. GameObject→XR→AR Default Point Cloud
    4. GameObject→XR→AR Default Plane
  3. Convertiu els objectes AR Default Point Cloud i AR Default Plane en prefabs i elimineu-los de l’escena.

Pas 3: Configuració de la càmera

Un cop preparada l’escena i els prefabs, s’ha de configurar la càmera de realitat augmentada per afegir la funcionalitat de mostrar els punts i les superfícies:

  1. Seleccioneu l’objecte AR Session Origin:
    1. Afegiu el component AR Point Cloud Manager i assigneu el prefab creat a partir d’AR Default Point Cloud a la propietat Point Cloud Prefab. Això permet visualitzar els núvols de punts generats per AR Foundation per detectar les superfícies.
    2. Afegiu el component AR Plane Manager i assigneu el prefab creat a partir de AR Default Point Cloud a la propietat Point Cloud Prefab. Aquest component s’encarrega de detectar les superfícies i pot configurar-se per detectar plans horitzontals, verticals, o ambdós.
    3. Afegiu un component de tipus AR Raycast Manager, que permetrà detectar quin punt de les superfícies es toca.

Millorar la immersió

Per evitar que es mostrin les superfícies triangulars que delimiten els plans trobats per l’aplicació podeu desactivar el component Mesh Renderer de l’objecte AR Default Plane.

Pas 4: 'Script' d'instanciació d'objectes

Creeu un nou script anomenat “PlaceOnPlane.cs”, enganxeu el codi i afegiu-lo com a component a AR Session Origin:

Codi complet de PlaceOnPlane.cs

Podeu trobar el codi complet de l’script PlaceOnPlane.cs a l’enllaç: Unity-ARFoundation-echo3D-demo-Board-Game.

  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. using UnityEngine.XR.ARFoundation;
  4. using UnityEngine.XR.ARSubsystems;
  5.  
  6. namespace UnityEngine.XR.ARFoundation.Samples
  7. {
  8. /// <summary>
  9. /// Listens for touch events and performs an AR raycast from the screen touch point.
  10. /// AR raycasts will only hit detected trackables like feature points and planes.
  11. ///
  12. /// If a raycast hits a trackable, the <see cref="placedPrefab"/> is instantiated
  13. /// and moved to the hit position.
  14. /// </summary>
  15. [RequireComponent(typeof(ARRaycastManager))]
  16. public class PlaceOnPlane : MonoBehaviour
  17. {
  18. [SerializeField]
  19. [Tooltip("Instantiates this prefab on a plane at the touch location.")]
  20. GameObject m_PlacedPrefab;
  21.  
  22. /// <summary>
  23. /// The prefab to instantiate on touch.
  24. /// </summary>
  25. public GameObject placedPrefab
  26. {
  27. get { return m_PlacedPrefab; }
  28. set { m_PlacedPrefab = value; }
  29. }
  30.  
  31. /// <summary>
  32. /// The object instantiated as a result of a successful raycast intersection with a plane.
  33. /// </summary>
  34. public GameObject spawnedObject { get; private set; }
  35.  
  36. void Awake()
  37. {
  38. m_RaycastManager = GetComponent<ARRaycastManager>();
  39. }
  40.  
  41. bool TryGetTouchPosition(out Vector2 touchPosition)
  42. {
  43. if (Input.touchCount > 0)
  44. {
  45. touchPosition = Input.GetTouch(0).position;
  46. return true;
  47. }
  48.  
  49. touchPosition = default;
  50. return false;
  51. }
  52.  
  53. void Update()
  54. {
  55. if (!TryGetTouchPosition(out Vector2 touchPosition))
  56. return;
  57.  
  58. if (m_RaycastManager.Raycast(touchPosition, s_Hits, TrackableType.PlaneWithinPolygon))
  59. {
  60. // Raycast hits are sorted by distance, so the first one
  61. // will be the closest hit.
  62. var hitPose = s_Hits[0].pose;
  63.  
  64. if (spawnedObject == null)
  65. {
  66. spawnedObject = Instantiate(m_PlacedPrefab, hitPose.position, hitPose.rotation);
  67. }
  68. else
  69. {
  70. spawnedObject.transform.position = hitPose.position;
  71. }
  72. }
  73. }
  74.  
  75. static List<ARRaycastHit> s_Hits = new List<ARRaycastHit>();
  76.  
  77. ARRaycastManager m_RaycastManager;
  78. }
  79. }

Aquest script és el responsable d’“escoltar” o detectar quan es toca la pantalla, traçar una línia des del punt tocat fins a la superfície detectada al món físic i instanciar el model a la posició:

  1. Afegiu una esfera 3D a l’escena, modifiqueu l’escala a 0.2 i desplaceu-la per sobre de la posició d’origen. Convertiu-la en prefab i elimineu-la de l’escena.
  2. Seleccioneu l’objecte AR Session Origin i assigneu al component PlaceOnPlane aquest prefab a la propietat Placed Prefab.

En programació quan es produeix un event s’acostuma a anomenar “escoltar” (listen) l’event a la seva detecció.

Si analitzeu el codi del component, podeu comprovar que en tocar la pantalla, si no s’ha creat cap objecte, se’n crea un de nou a la posició i, en cas contrari, mou l’objecte creat a la nova posició.

Si voleu que s’instanciï un nou objecte cada vegada que toqueu la pantalla, reemplaceu el mètode Update pel següent:

  1. void Update()
  2. {
  3. if (!TryGetTouchPosition(out Vector2 touchPosition))
  4. return;
  5.  
  6. if (m_RaycastManager.Raycast(touchPosition, s_Hits, TrackableType.PlaneWithinPolygon))
  7. {
  8. var hitPose = s_Hits[0].pose;
  9. spawnedObject = Instantiate(m_PlacedPrefab, hitPose.position, hitPose.rotation);
  10. }
  11. }

Per acabar, seleccioneu File> Build and Run amb el dispositiu connectat i l’aplicació s’instal·larà al dispositiu.

L’aplicació demana permisos per utilitzar la càmera i mostrar el núvol de punts i les formes dels plans que va detectant, com mostra la figura. Si toqueu la pantalla sobre un pla, s’instancia l’esfera en la posició corresponent al món físic.

Podeu desactivar el component AR Point Cloud Manager i eliminar el prefab del component AR Plane Manager per amagar els indicadors, però això fa que no pugueu estar segurs de si s’ha generat un pla o no abans de tocar la pantalla.

Figura Detecció de plans amb AR Foundation

Fixeu-vos que, com més temps s’enfoca el mateix punt, més es concentren els punts del núvol en el contorn dels objectes i més precisa és la generació de plànols.

Cas pràctic: Seguiment de cara amb AR Foundation+AR Core

Els darrers anys la utilització de la realitat augmentada per crear efectes que s’apliquen sobre la cara dels usuaris s’ha disparat. Ja sigui com a filtre d’Instagram per afegir retocs, un filtre de TikTok per fer riure o un joc per a nens com els que presenta l’aplicació de Kinder. En el següent exemple veureu com crear una aplicació simple d’aquestes característiques que detecta la cara de l’usuari i hi projecta una màscara.

Primer cal crear un projecte 3D amb els paquets ARCore i AR Foundation per a la plataforma Android i configurar les opcions del projecte i de la build:

  1. Creeu una nova escena i elimineu l’objecte MainCamera.
  2. Afegiu els objectes GameObject> XR→AR Session Origin, GameObject> XR→AR Session i GameObject> XR> AR Default Face.
  3. Seleccioneu l’objecte AR Session Origin i afegiu el component AR Facetracking Manager.
    1. Arrossegueu l’objecte AR Default Face a la propietat Face Prefab.
    2. Seleccioneu el subobjecte AR Camera i canvieu el valor de Facing Direction a User del component AR Camera Manager. Aquest pas és imprescindible perquè el seguiment de cares només funciona amb la càmera frontal dels mòbils.
  4. Creeu un nou material i assigneu un color al paràmetre Albedo.
  5. Seleccioneu l’objecte AR Default Face i reemplaçeu el Material del component Meshfilter pel material que heu creat.
  6. Aneu a File> Build and Settings, afegiu l’escena a la llista d’escenes de la build i premeu Build and run. Quan enfoqueu la cara d’alguna persona amb la càmera, es mostrarà la màscara amb el color escollit.

En aquest exemple s’ha utilitzat un material amb color sòlid per simplificar, però poden crear-se materials amb textures UV per aplicar a la màscara. A més, pot utilitzar-se una malla diferent en lloc de la malla per defecte, canviant-la al component MeshRenderer del prefab AR Default Face.

Projectes de realitat virtual

En la seva concepció més simple, la realitat virtual permet a l’usuari endinsar-se en mons virtuals mitjançant unes ulleres que renderitzen el contingut de les aplicacions directament enfront dels ulls. Per tant, la manera com es representen els continguts és clau per aconseguir que l’usuari gaudeixi de l’experiència.

Aquestes ulleres, o dispositius, tenen diferents característiques segons el fabricant: major o menor camp de visió (FoV), diferent qualitat gràfica, requisit de connexió a PC, processador mòbil (sense fils), dispositiu 3DoF o 6DoF, controladors per a les mans…

Per crear una aplicació de realitat virtual, a banda d’unes ulleres per poder fer proves, és necessari un SDK. L’equip de desenvolupament de programari (SDK) és proporcionat pel fabricant i es pot integrar amb motors de jocs com Unity i Unreal Engine. Aquest SDK afegeix noves funcionalitats al motor i les biblioteques necessàries per compilar el joc i crear una versió executable.

Equip de desenvolupament de programari

Habitualment es tracta d’un recull d’eines, connectors i programari que permet desenvolupar aplicacions per a una plataforma o servei concret. En anglès, Software Developer Kit (SDK).

A més, a l’hora de desenvolupar una aplicació per a realitat virtual cal tenir en compte dos aspectes fonamentals: els sistemes de locomoció i els sistemes d’interacció, ja que desenvolupar experiències per a entorns virtuals presenta diferents desafiaments als d’altres tipus de jocs.

Mentre que convertir un joc 3D en primera persona en una experiència per a realitat virtual és relativament fàcil, implementar la locomoció i les interaccions no ho és, perquè les expectatives dels jugadors són diferents. A més, s’han de tenir en compte els avantatges i les limitacions que presenten els controladors utilitzats. Si el dispositiu només es pot controlar amb un comandament de joc (gamepad), la implementació és molt similar a un joc normal, però si fa servir controladors 6DoF o el controlador és una pistola, la implementació és completament diferent.

Malgrat que cada SDK és diferent els conceptes són els mateixos. En el nivell més bàsic crear una aplicació de realitat virtual suposa afegir una càmera de realitat virtual en lloc d’una càmera normal, un sistema de locomoció i un sistema d’interacció amb l’entorn.

Aspectes tècnics

Un dels detalls més important de les aplicacions i dispositius de realitat virtual és que han de representar el món virtual just davant dels ulls del jugador. Per tant, s’ha de projectar una imatge per a cada ull. Per aconseguir produir un efecte de profunditat cada imatge ha de ser lleugerament diferent, ja que cada ull percep el món amb un angle diferent. Si les imatges són iguals, es tractarà de visió monoscòpica; en canvi, si són diferents, es tractarà de visió estereoscòpica:

  • La realitat virtual monoscòpica és utilitzada per les càmeres de fotografia i vídeo 360. Com que només es captura una imatge, no es pot representar de cap altra manera, només hi ha un punt de vista.
  • La realitat virtual estereoscòpica és la generada per les aplicacions de realitat virtual. Renderitzen el joc dues vegades amb una petita desviació per a cada ull, de manera que s’assoleix l’efecte de profunditat.

En qualsevol cas, per percebre el món virtual és imprescindible que cada ull rebi la informació. Per aquest motiu les ulleres de realitat virtual usen dos sistemes diferents: fer servir una pantalla per a cada ull o usar una única pantalla on es renderitza una imatge a la meitat de la pantalla i l’altra imatge a l’altra meitat (vegeu la figura).

Figura Aplicació de realitat virtual estereoscòpica amb pantalla dividida
Font: Google

El camp de visió (field of view o FOV en anglès) dels dos ulls combinats està al voltant dels 114 graus, encara que individualment el seu FOV és d’uns 135 graus en horitzontal i 180 graus en vertical. Això implica que segons el FOV que ofereixin les ulleres l’experiència serà més o menys immersiva. En el cas de las Meta Quest el FOV és d’aproximadament 90°, mentre que les d’unes ulleres HTC Vive Pro 2 és d’aproximadament 120° i les de Cardboard depèn del model d’ulleres i el dispositiu mòbil, però es força baix. Per assolir una sensació de presència es requereix un FOV mínim de 80°. A la figura podeu veure la representació del camp de visió d’una persona.

Presència

Sensació de trobar-se immers en l’entorn virtual. Per aconseguir-ho és necessari treballar amb dispositius 6DoF o equivalents, per exemple amb seguiment de mans, amb una resposta de seguiment molt ràpida (1 ms aprox.) i les ulleres han de comptar amb una taxa de refresc alta, idealment de 90 Hz o superior.


La qualitat dels gràfics i de la imatge són importants, però no és necessari que siguin realistes. S’aconsegueix el mateix grau de presència amb uns gràfics estilitzats.

Figura Comparació d’angles de visió horitzontal
Per obtenir el FoV equivalent s'han de duplicar els valors. Per exemple, 60° a l'esquerra és un FoV de 120°.

Per altra banda, s’exigeix una taxa de refresc molt alta, com a mínim 60 FPS constants, ja que en cas contrari l’usuari pot patir mareigs a causa de la cinetosi (motion sickness en anglès). Aquest és el mateix fenomen que ocorre quan se sofreixen mareigs en un cotxe o altres vehicles perquè el que percep l’ull no es correspon amb el que percep el cervell mitjançant altres sentits.

Tingueu en compte que per a un joc de mòbil o consola (antiga) és acceptable la renderització a 30 FPS, però per a una aplicació de realitat virtual s’ha de renderitzar com a mínim a 60 FPS dues vegades, ja que cada ull ha de rebre la representació de l’escena amb un angle lleugerament diferent per aconseguir l’efecte de profunditat.

Els FPS mínims requerits per publicar una aplicació varien segons la plataforma, però si s’agafa com a referència Meta una aplicació mòbil ha de mantenir els 60 FPS per poder-la publicar a l’AppLab, 72 FPS per publicar-la a la tenda oficial (si l’aproven) i 90 FPS per publicar-la com a aplicació de realitat virtual per a PC.

Sistemes de locomoció

Un altre aspecte a tenir molt en compte és el sistema de locomoció, com es mou l’usuari pel món. Quan no hi ha correspondència entre els ulls i la sensació que rep el cervell, es produeix la cinetosi; així que moure’s per un món virtual utilitzant un comandament de joc, acostuma a provocar-la en usuaris que no hi estan acostumats. Per mitigar aquest problema, és habitual implementar diferents sistemes de locomoció, encara que això té efectes importants sobre el gameplay i imposa limitacions al que es pot fer en una aplicació.

Locomoció

Podeu veure un vídeo amb exemples de locomoció implementats en diferents jocs, en aquest enllaç:

El terme gameplay, literalment ‘reproducció del joc’, pot fer referència tant a la manera com el jugador interactua amb el joc, com als vídeos on es mostra com jugar un videojoc, pas a pas.

Aquests són els sistemes de locomoció que es troben habitualment en els jocs i aplicacions de realitat virtual:

  • Lliure: el jugador es mou lliurement per l’entorn fent servir un comandament de joc (gamepad), palanca de control (joystick) o controlador. Quan prem el botó, el jugador es desplaça. Aquest sistema de moviment és el més simple d’implementar però no el més apte per a la majoria d’usuaris ni per a usuaris novells.
  • Teleport i rotació fixa (snap rotation): l’usuari apunta cap on vol moure’s i es teleporta d’un punt a un altre. Com que no s’aprecia moviment, no es produeix la cinetosi. El mateix passa amb les rotacions fixes, que es produeixen a salts d’una quantitat fixa de graus, de manera que el jugador gira, però no s’aprecia desplaçament.
  • Impuls (dash): el jugador selecciona cap on vol moure’s i el moviment s’executa ràpidament sense acceleració en línia recta (en el transcurs d’uns quants frames), sovint afegint una vinyeta al voltant de la càmera que redueix el FOV de l’usuari.
  • Físics: s’han realitzat diferents experiments per mitigar l’efecte de la cinetosi fent que existeixi una correlació entre la sensació de moviment i la percepció del cervell. Per exemple, aconseguir el moviment en moure els braços, detectar les passes del jugador o quan arrossega l’escena amb les mans.

Per altra banda, cal tenir en compte que existeixen altres tècniques emprades habitualment per mitigar els efectes de la cinetosi com són l’eliminació de l’acceleració i l’addició de vinyetes per reduir el camp de visió de l’usuari:

  • Acceleració: sempre que sigui possible, cal eliminar l’acceleració dels desplaçaments de l’usuari i dur-los a terme a una velocitat fixa per mitigar la cinetosi.
  • Vinyetes (blindfold): afegint una vinyeta es redueix el FOV de l’usuari i s’afegeix una referència al camp visual, de manera que es redueix la immersió i la possibilitat de patir cinetosi. Algunes aplicacions afegeixen aquesta vinyeta només quan s’inicia el moviment (sigui lliure o per impulsos) i pot augmentar de mida quan la velocitat és major. Aquesta tècnica es pot combinar amb qualsevol mena de moviment. Algunes variants adapten la mida de la vinyeta a la velocitat de moviment, de manera que com més alta és la velocitat, més baix és el FOV.

Sistemes d'interacció

Una de les diferències més grans entre un joc en primera persona i un joc de realitat virtual rau en els sistemes d’interacció. No només el medi és diferent, sinó que els dispositius d’entrada i sortida també ho són.

Exemple de menú principal d'un joc

En un joc en primera persona per afegir un menú d’opcions només cal posar una imatge de fons i uns botons, però en un joc de realitat virtual el jugador es troba dins del joc. Això fa que el menú es trobi davant del jugador envoltat pel món digital.


Això implica que no només cal dissenyar una pantalla de fons, sinó que s’ha de dissenyar tota l’escena on es troba el jugador. Tanmateix, s’ha de decidir si el jugador es pot moure o no per dins d’aquesta escena i com interactua amb aquest menú:

  • Fa servir un controlador 3DoF/6DoF com un punter làser apuntant a l’opció?
  • Toca amb la mà l’opció del menú? Això obliga a posar el menú molt a prop del jugador o habilitar el moviment per l’entorn.
  • Toca amb els dits un dispositiu amb seguiment de mans?
  • Apunta amb la mà?
  • Llança una pedra a l’opció?
  • Dispara un tret amb una pistola? O llança una fletxa amb un arc?

Fins i tot pot ser que el menú sigui dinàmic, que el jugador el pugui agafar amb la mà i seleccionar l’opció amb els dits.


Mentre que en un joc clàssic la decisió de com s’interactua amb la interfície és automàtica, en la realitat virtual s’han de tenir en compte molts factors. Moltes vegades és recomanable implementar diferents sistemes perquè el jugador esculli el seu favorit.

El disseny i desenvolupament de sistemes d’interacció i locomoció queden fora de l’abast d’aquest mòdul, però heu de tenir en compte que a l’hora d’implementar algun d’aquests sistemes és imprescindible provar-los en el dispositiu en fases primerenques, ja que moltes vegades les solucions ideades no són satisfactòries o no resulten pràctiques i és difícil determinar-ho abans de provar-ho.

Exemple de primeres implementacions de la mecànica "agafa objecte"

Quan van aparèixer els primers controladors 6DoF es recomanava i s’exigia als desenvolupadors implementar mecàniques per agafar objectes realment amb les mans, és a dir, es demanava que dins del món virtual el jugador toqués els objectes per poder agafar-los.


La idea té sentit, però a la pràctica té molts inconvenients, tenint en compte que aquestes ulleres estaven connectades per cable a un PC i els sensors eren externs. Per tant, havien de tenir una línia directa fins als controladors per funcionar correctament:

  • Un objecte a terra obligava el jugador a ajupir-se “a les fosques” amb un cable lligat al cap.
  • Un objecte podia trobar-se en un punt on el controlador perdia la línia de visió del sensor i deixava de funcionar.
  • Un objecte podia trobar-se a l’altre costat d’una paret que el jugador no veia.

Els jocs moderns van reemplaçar la mecànica d’agafar objecte per “agafa objecte a distància”, de manera que quan s’apunta cap a un objecte que es pot agafar, es ressalta i s’agafa prement el botó. Això ha millorat la qualitat de vida dels jugadors a costa del realisme.

Alguns dels diferents tipus de controladors i sistemes que permeten als jugadors interactuar amb les aplicacions, inclús si no es disposa de cap controlador, són els següents:

  • Tècniques de raycasting. L’aplicació determina on està mirant l’usuari i utilitza un temporitzador per interactuar un cop ha passat un temps mirant l’objectiu.
  • Informació rebuda de l’acceleròmetre i el giroscopi. Es poden disparar diferents accions a partir d’aquesta informació, per exemple avançar quan el jugador mira per sobre l’horitzó, saltar si gira ràpidament el cap de baix cap a dalt…
  • Biblioteca de Google Cardboard. L’imant altera la brúixola del telèfon i la interpreta com si es premés un botó.
  • Bluetooth. La majoria de dispositius es poden aparellar mitjançant Bluetooth amb un comandament de joc o un controlador multimèdia amb botons de reproduir, aturar, canviar el volum…
  • Un controlador 3DoF i un model de simulació de braços que simula la posició del braç segons la inclinació del controlador permeten enllaçar un telèfon intel·ligent que usa l’acceleròmetre i el giroscopi per emular el comportament d’un controlador 3DoF.
  • Dos controladors 6DoF que rastregen la rotació i la posició de les mans de l’usuari. Segons la plataforma, pot ser que el seguiment es faci mitjançant sensors externs (outside-in tracking) que detecten raigs emesos pels controladors (en aquest cas el cos de l’usuari pot provocar l’oclusió i deixar de funcionar) o que s’utilitzin càmeres instal·lades a les ulleres (inside-out tracking).
  • Seguiment de mans. Si les ulleres admeten el seguiment de mans o hand tracking no es requereix cap controlador, les ulleres interpreten la posició i els gestos de les mans aplicant tècniques de visió per computador a partir de les imatges que capturen amb les càmeres (inside tracking).
  • Vestits de seguiment de cos complet. Aquests vestits compten amb múltiples sensors que rastregen la posició i orientació de forma similar als controladors, però amb múltiples punts de referència. Cal que les aplicacions implementin les funcionalitats necessàries per fer ús d’aquest tipus de controlador.

Pel que fa a les interaccions, depèn del tipus de controladors que suporti el dispositiu. PSVR i Meta en les seves primeres versions només suportaven la utilització de comandaments de joc (gamepads), així que els sistemes d’interacció eren molt similars als d’un joc en primera persona. Aquests sistemes són molt simples d’implementar, però no es poden considerar interaccions en VR.

Outside-in vs. Inside-out tracking

Amb Outside-in tracking el controlador emet rajos que són interpretats per sensors externs; mentre que amb Inside-out tracking la posició del dispositiu és determinada per la lectura d’una càmera a les ulleres.

Interaccions en entorns virtuals

Per poder gaudir d’interaccions en entorns virtuals es demana com a mínim un controlador 3DoF (preferiblement dos controladors 6DoF) o que les ulleres rastregin la posició de les mans. Això possibilita a l’usuari fer diferents accions immersives:

  • Utilitzar armes amb una o dues mans, per exemple espases o rifles.
  • Afegir comportaments realistes de recàrrega d’armes de foc, com treure el carregador, posar-ne un de nou, treure l’assegurador de l’arma…
  • Interactuar amb l’entorn: prémer botons, estirar palanques, agafar objectes i deixar-los anar, fer malabarismes…
  • Escalar amb les mans.
  • Usar un arc agafant l’arc amb una mà i la fletxa amb l’altra, apuntar i disparar.
  • Reaccionar a l’entorn, esquivar atacs enemics o objectes en moviment, defensar-se bloquejant atacs amb una arma o un escut…

Implementar aquest tipus d’interaccions és una de les parts més complicades en el desenvolupament de jocs i aplicacions de realitat virtual i és allò que diferencia un joc que s’ha portat a VR d’un que s’ha dissenyat específicament per a la realitat virtual.

Exemples de jocs i aplicacions de realitat virtual

Abans de començar a desenvolupar qualsevol joc o aplicació, és important conèixer les característiques del dispositiu, les aplicacions similars que hi ha al mercat i la solució dels diversos problemes de disseny.

El nivell d’adopció del VR no és suficient per justificar grans inversions en desenvolupament. Per aquest motiu hi ha molt pocs jocs que es puguin considerar AAA per a realitat virtual, ja que és molt difícil aconseguir la rendibilitat de la inversió (ROI). Així doncs, el mercat està dominat per estudis indies capaços de produir jocs de qualitat amb un cost molt inferior.

Videojocs AAA i ROI. El cas de Zenith

L’expressió “Videojocs AAA” és una classificació informal per referir-se als jocs produïts per grans companyies, amb costos de desenvolupament de 100 milions d’euros o més per a centenars de persones.
La rendibilitat de la inversió o ROI (en anglès, Return On Investment) és una mètrica utilitzada per avaluar el rendiment o eficiència d’una inversió. El càlcul consisteix a dividir els beneficis obtinguts entre el cost d’inversió.
Poc després del seu llançament, el videojoc Zenith va recaptar 35 milions de dòlars en una ronda d’inversió per continuar amb el seu desenvolupament enfocat al metavers. Podeu saber-ne més, en el següent enllaç: Zenith Dev Raises $35 Million, Studio To Double.

Els jocs més representatius i populars per a realitat virtual són:

  • Jocs d’experiències. Curiosament, tot i que la realitat virtual acostuma a provocar cinetosi, un dels tipus d’aplicació d’entreteniment més descarregat, quant a aplicacions de realitat virtual, són les muntanyes russes (roller coasters). Aquestes aplicacions acostumen a ser una de les primeres que es mostra als nous usuaris de la realitat virtual. En aquesta línia també hi ha el Richie's Plank Experience, un joc que consisteix a caminar sobre una taula i saltar al buit. També existeixen múltiples experiències per practicar escalada com The Climb 2 i de terror com Five nights at Freddy's. Podeu veure un vídeo recopilatori de roller coasters per a VR a:
  • Jocs de fitness. Malgrat que les ulleres no són gaire còmodes per fer exercici, aquests tipus de jocs han resultat molt populars. Entre ells cal destacar Beat Saber, que combina fitness i música, on el jugador ha de colpejar blocs de colors amb la mà i en la direcció corresponent mentre esquiva obstacles.
  • Jocs de rol (RPG). No hi ha gaires títols destacables en aquesta categoria perquè la majoria són més propers als rogue-likes i FPS o no són títols dissenyats per a VR. Destaquen Asgard's Wrath i Blade and Sorcery.
  • Jocs de rol multijugador massius (MMORPG). En aquesta categoria no hi ha gaires jocs, ja que es requereix una massa crítica de jugadors molt alta i són molt complexos d’implementar. Tot i així, n’hi ha alguns com OrbusVR i Zenith: The Last City.
  • Jocs d’estil Rogue. En aquesta categoria hi ha l’Until you fall, fet per l’estudi de videojocs de Jesse Schell, autor de The art of game design: A book of lenses. Presenta un sistema de combat cos a cos molt satisfactori on s’ha descartat el realisme per centrar-se en la diversió i reforçant l’estil arcade. També hi ha In Death: Unchained, un joc d’arqueria.
  • Jocs de trets en primera persona. Un dels jocs que destaca per sobre dels altres és Half-life: Alyx, considerat un dels millors jocs de VR i exemple a emular a l’hora de produir jocs AAA per a realitat virtual. Dintre d’aquesta categoria s’englobaria una gran part dels jocs per a realitat virtual, incloent-hi Onward i Pavlov), dos shooters multijugador bèl·lics que fan èmfasi en el realisme, enfocats a la comunitat i que van ser dels primers títols creats per a realitat virtual.
  • Battle Royale. És un tipus de shooter que pot semblar molt adient per implementar en realitat virtual. El problema d’aquest tipus de jocs és que requereix una gran capacitat de processament i una massa crítica de jugadors elevada. En VR per a PC trobem Stand Out, amb un màxim de trenta jugadors per partida, mentre que per Meta Quest el nombre major de jugadors el té Population One, amb divuit jugadors simultanis, molt lluny dels cent jugadors dels battle royal de PC com PlayerUnknown’s Battlegrounds i Fortnite.
  • Joc de supervivència (Survival-horror). Els jocs de zombis són un clàssic dels jocs de realitat virtual, però els dos títols més destacables són After the fall, un joc cooperatiu fortament inspirat en Left 4 Dead, i The Walking Dead: Saints and Sinners.
  • Jocs de taula i d’estratègia. Gairebé no hi ha jocs d’aquesta categoria per a realitat virtual, i els que s’han publicat no han aconseguit pràcticament cap èxit a excepció de Demeo, un joc de rol de taula multijugador on els jugadors mouen les peces sobre el taulell per torns, amb unes valoracions molt bones. La majoria de jocs d’estratègia que s’han llançat per a VR s’engloben en el subgènere dels Tower Defense i no van tenir cap èxit.
  • Trencaclosques. En aquesta categoria hi ha jocs clàssics com el Tetris Effect: Connected:tinyurl.com/mrxdrmj5, encara que els que realment destaquen són els jocs amb trencaclosques físics com Red Matter i I Expect you to die.

Joc d'estil Rogue

Joc de rol en què el jugador fa el paper d’un heroi que explora masmorres o altres estructures laberíntiques generades de forma aleatòria, s’enfronta amb diferents monstres, esquiva trampes i resol trencaclosques a la recerca de botins i tresors.

Altres títols destacables creats exclusivament per a VR són: Virtual Virtual Reality, Job Simulator, Superhot VR i Keep talking and nobody explodes.

Entre els jocs més populars adaptats per a realitat virtual hi ha: Skyrim, Fallout 4 i alguns jocs de la sèrie Resident Evil (Resident Evil 4). Aquests jocs s’han de mencionar a banda perquè no acostumen a incorporar les mecàniques pròpies dels jocs de realitat virtual, ja que simplement reemplacen la utilització del ratolí per algun sistema de punteria i mantenen les mateixes interfícies, encara que la recepció de Resident Evil 4 ha estat molt bona.

En general, els jocs de realitat virtual estan més encarats a l’acció que no a la narrativa, encara que existeixen títols que no descuiden aquest aspecte com Asgard’s Wrath o Half-life Alyx. Pel que fa a les novel·les visuals, es pot agafar com a mostra Tokyo Chronos, que malgrat l’experiència dels seus desenvolupadors en aquest àmbit no ha tingut èxit.

Pel que fa a les aplicacions de realitat virtual, destaquen les següents:

  • VRChat. És una de les aplicacions de xat en realitat virtual més populars, i una de les primeres. Permet als usuaris dissenyar les seves pròpies sales de xat amb Unity i pujar-les al servidor per compartir-les amb altres usuaris, pujar tota classe de models 3D que poden fer-se servir com a avatars, crear minijocs i utilitzar el seguiment de cos complet.
  • Virtual Desktop. Permet utilitzar el PC des de la realitat virtual, afegint diferents entorns i projectant les imatges.
  • Horizon Worlds. És l’aproximació de Meta al metavers. Permet socialitzar i construir mons virtuals i interactuar amb els amics.
  • Netflix, YoutubeVR i altres reproductors per a VR. Permeten reproduir vídeo com si l’usuari es trobés en diferents entorns amb pantalles gegants. Algunes d’aquestes aplicacions permeten visualitzar els continguts amb altres persones connectades remotament.

Creació de mons virtuals amb Unity i Google Cardboard

Un dels problemes a l’hora d’iniciar-se en el desenvolupament d’aplicacions virtuals és que són necessàries unes ulleres per provar l’aplicació. Atès que la popularitat d’aquests dispositius encara no és gaire gran, no es pot esperar que tots els estudiants tinguin accés a aquest tipus dispositiu.

Per aquest motiu, l’opció més interessant és utilitzar Google Cardboard, que consisteix en una carcassa de plàstic o cartó amb unes lents i una biblioteca per crear aplicacions de realitat virtual que s’executen en un telèfon intel·ligent iOS o Android. Com que el maquinari per renderitzar les imatges és el mateix telèfon, el cost d’aquestes ulleres és molt baix. Tanmateix, en el pitjor dels casos es pot observar el seu funcionament directament a la pantalla del mòbil.

Aquesta biblioteca va ser presentada a la conferència 2014 Google I/O, on van publicar els plànols del dispositiu i van regalar-les a tots els assistents. Això va provocar un boom d’empreses xineses que van inundar el mercat de diferents models de carcasses per gaudir de la realitat virtual a través d’un telèfon intel·ligent.

Més del 90% de les empreses xineses dedicades a la VR el 2015 havien tancat l’any 2017 (font: China’s VR ‘boom’ is a bust, say some experts).

Google va deixar de banda el projecte per centrar-se en la seva iniciativa DayDream, abandonada uns anys després i, finalment, el 2019 va alliberar l’SDK com a codi lliure.

Aquest SDK permet desenvolupar aplicacions per a Android i iOS amb Unity, idoni per iniciar-se en el món de la realitat virtual sense haver de fer cap inversió, ja que es poden provar les aplicacions desenvolupades amb Unity directament amb qualsevol telèfon intel·ligent.

Instal·lació de Google Cardboard per Unity

Abans d’Instal·lar la biblioteca heu d’assegurar-vos que la versió de Unity és compatible. Aquesta guia d’instal·lació s’ha comprovat amb la versió de Unity 2020.3. Aquests passos mostren com configurar el projecte per a un telèfon intel·ligent Android. En el cas d’un dispositiu iOS, consulteu la guia d’instal·lació perquè els passos són lleugerament diferents:

Podeu veure una guia d’instal·lació al següent vídeo:

Importar l'SDK a un nou projecte

Al contrari que amb altres funcionalitats de Unity que poden afegir-se directament important algun paquet, la instal·lació d’aquesta biblioteca és una mica més complexa, ja que s’ha de descarregar d’un repositori.

Per instal·lar la biblioteca de Google Cardboard heu de seguir els següents passos:

  1. Obriu Unity i creeu un nou projecte 3D.
  2. Aneu a Window> Package Manager.
  3. Cliqueu el botó + i seleccioneu Add package from git URL.
  4. Enganxeu la següent URL: https://github.com/googlevr/cardboard-xr-plugin.git.
  5. Un cop descarregat, veureu la figura. Desplegueu la pestanya Samples, seleccioneu el projecte Hello Cardboard i premeu Import.
  6. Dins dels fitxers que apareixeran al projecte cerqueu la carpeta Scenes i obriu l’escena HelloCardboard.
Figura Paquet Google Cardboard XR Plugin for Unity

Configuració d'Android

Un cop instal·lat l’SDK, cal configurar el projecte per poder construir el fitxer, ja que les aplicacions de Cardboard tenen uns requisits molt concrets, com la versió d’Android mínima, la generació de fitxers personalitzats, l’orientació…:

  1. Aneu a File> Build Settings… i premeu el botó Add Open Scenes o arrossegueu l’escena a la llista de Scenes In Build.
  2. Seleccioneu Android i premeu el botó Swith Platform.
  3. Premeu el botó Player Settings.
  4. Dins de ProjectSettings> Player> Resolution and Presentation feu els següents canvis:
    1. Assigneu Landscape Left o Landscape Right a Default Orientation.
    2. Desactiveu Optimized Frame Pacing.
  5. Dins de ProjectSettings> Player> Other Settings feu els següents canvis:
    1. Seleccioneu OpenGLES2, OpenGLES3 o tots dos a Graphics API. Els models de mòbil més antics només suporten OpenGLES2. Si es marquen tots dos, la build serà més pesada.
    2. Seleccioneu Android 7.0 ‘Nougat’ 8API level 24 o major a Minimum API Level. Això implica que dispositius amb una versió anterior no funcionaran.
    3. Seleccioneu IL2CPP a Scripting Backend.
    4. Seleccioneu ARMv7, ARMv64 o totes dues a Target Architectures. Per publicar una aplicació a GooglePlay es requereix que l’arquitectura sigui ARMv64, però aquesta no funcionarà en models de mòbil més antics. Com en el cas de l’API gràfica, incloure-les totes dues farà que el pes de l’aplicació sigui major.
    5. Seleccioneu Require a Internet Access.
    6. Especifiqueu un nom de domini a Package Name. Per publicar una aplicació es requereix que aquest nom sigui únic, ja que identifica unívocament l’aplicació a la tenda. Per això s’indica que s’utilitzi el nom del domini de la companyia, perquè aquests són únics. Però per fer proves podeu fer servir el que vulgueu, no es comprova.
  6. Dins de ProjectSettings> Player> Publishing Settings> Build feu els següents canvis:
    1. Marqueu la casella Custom Main Graddle Template.
    2. Marqueu la casella Custom Gradle Properties Template.
  7. Obriu el fitxer que trobareu dins d’Assets/Plugins/Android/mainTemplate.gradle i afegiu les següents línies dins de la secció de depèndencies (dependencies{}):
  implementation 'androidx.appcompat:appcompat:1.3.1'
  implementation 'com.google.android.gms:play-services-vision:20.1.3'
  implementation 'com.google.android.material:material:1.4.0'
  implementation 'com.google.protobuf:protobuf-javalite:3.19.4'

8. Deseu els canvis i tanqueu l’editor del fitxer.

9. Obriu el fitxer que trobareu dins d’Assets/Plugins/Android/gradleTemplate.properties i afegiu al final:

android.enableJetifier=true
android.useAndroidX=true

10. Deseu els canvis i tanqueu l’editor del fitxer.

API Level 29

Si s’ha seleccionat com a Target API Level API Level 29 o Automatic (Highest Installed) i això provoca que el nivell de l’API pugi a 29, cal fer els següents canvis addicionals:

  1. Dins de ProjectSettings> Player> Publishing Settings> Build marqueu la casella Custom Main Manifest.
  2. Obriu el fitxer que trobareu dins d’Assets/Plugins/Android/AndroidManifest.xml i afegiu a l’element application l’atribut android:requestLegacyExternalStorage=“true”. El resultat final serà similar a: <application android:requestLegacyExternalStorage=“true” … >.

Configuració del gestor de plug-ins XR

Cal indicar a Unity que s’està desenvolupant una aplicació de realitat virtual, això farà que l’aplicació mostri una vista estereoscòpica amb la pantalla dividida.

  1. Des del menú principal aneu a Project Settings> XR Plug-ing Management.
    1. Marqueu la casella Cardboard XR Plugin a Plug-ing Providers.

Fer la 'build' del projecte

Amb el dispositiu Android endollat a l’equip mitjançant un cable USB, aneu a File> Build settings, seleccioneu Build i premeu el botó Build and Run. Cal indicar on desar el fitxer .apk.

Un cop instal·lada i executada, l’aplicació mostra l’escena amb visó estereoscòpica (la pantalla dividida en dues parts, com en la figura) i la càmera respon a l’orientació del mòbil. Si compteu amb unes ulleres del tipus Cardboard, podeu inserir-les el mòbil i experimentar l’entorn virtual.

Figura Paquet Google Cardboard XR Plugin for Unity

Fixeu-vos que si mireu directament l’icosaedre (anomenat Treasure a l’escena) veureu que canvia de color. En inspeccionar-lo a Unity veureu que conté un subobjecte anomenat Icosahedron, amb dos components clau per explicar aquest fenomen: un Sphere Collider i un component anomenat Object Controller, amb dues propietats a les quals s’han assignat dos materials diferents: Inactive Material i Gazed At Material, que canvia el material aplicat a l’objecte segons si està inactiu o si l’usuari l’està observant.

L’usuari està representat per l’objecte Player, que no conté cap component, només el subobjecte Main Camera. Cal destacar els components Tracked Pose Driver, responsable de convertir una càmera normal de Unity en una càmera de VR controlada per l’orientació del dispositiu, i el component Camera Pointer, responsable de seleccionar, desseleccionar i interactuar amb l’objecte. El codi d’aquesta classe és el següent:

  1. using System.Collections;
  2. using UnityEngine;
  3.  
  4. /// <summary>
  5. /// Sends messages to gazed GameObject.
  6. /// </summary>
  7. public class CameraPointer : MonoBehaviour
  8. {
  9. private const float _maxDistance = 10;
  10. private GameObject _gazedAtObject = null;
  11.  
  12. /// <summary>
  13. /// Update is called once per frame.
  14. /// </summary>
  15. public void Update()
  16. {
  17. // Casts ray towards camera's forward direction, to detect if a GameObject is being gazed
  18. // at.
  19. RaycastHit hit;
  20. if (Physics.Raycast(transform.position, transform.forward, out hit, _maxDistance))
  21. {
  22. // GameObject detected in front of the camera.
  23. if (_gazedAtObject != hit.transform.gameObject)
  24. {
  25. // New GameObject.
  26. _gazedAtObject?.SendMessage("OnPointerExit");
  27. _gazedAtObject = hit.transform.gameObject;
  28. _gazedAtObject.SendMessage("OnPointerEnter");
  29. }
  30. }
  31. else
  32. {
  33. // No GameObject detected in front of the camera.
  34. _gazedAtObject?.SendMessage("OnPointerExit");
  35. _gazedAtObject = null;
  36. }
  37.  
  38. // Checks for screen touches.
  39. if (Google.XR.Cardboard.Api.IsTriggerPressed)
  40. {
  41. _gazedAtObject?.SendMessage("OnPointerClick");
  42. }
  43. }
  44. }

Només consta d’un mètode, Update, on es llança un raig cada frame des del centre de la càmera cap endavant. Si el raig col·lideix amb algun objecte i no és el mateix que estava ja seleccionat, envia el missatge OnPointerExit per indicar que ha estat desseleccionat i llavors envia el missatge OnPointerEnter al nou objecte. Si no col·lideix amb res, es desselecciona l’objecte anterior i envia el missatge OnPointerExit.

A Unity tots els GameObjects disposen del mètode SendMessage(“nom del metod”), que intenta cridar el mètode passat com argument en aquest objecte, o el descarta si el mètode no existeix.

Controla si s’ha premut el botó, i en aquest cas tramet el missatge OnPointerClick.

Per altra banda, si s’inspecciona el codi d’ObjectController, es pot comprovar que s’han definit els tres mètodes utilitzats per al component CameraPointer:

  1. /// <summary>
  2. /// This method is called by the Main Camera when it starts gazing at this GameObject.
  3. /// </summary>
  4. public void OnPointerEnter()
  5. {
  6. SetMaterial(true);
  7. }
  8.  
  9. /// <summary>
  10. /// This method is called by the Main Camera when it stops gazing at this GameObject.
  11. /// </summary>
  12. public void OnPointerExit()
  13. {
  14. SetMaterial(false);
  15. }
  16.  
  17. /// <summary>
  18. /// This method is called by the Main Camera when it is gazing at this GameObject and the screen
  19. /// is touched.
  20. /// </summary>
  21. public void OnPointerClick()
  22. {
  23. TeleportRandomly();
  24. }

En aquesta implementació l’objecte canvia de color quan s’executen els mètodes OnPointerEnter i OnPointerExit, i es teleporta a l’atzar quan es crida OnPointerClick.

Simulació de botons poc fiable

El mecanisme per simular els botons del Cardboard és molt enginyós, però malauradament no és gens fiable. No tots els models de Cardboard inclouen l’imant que serveix com a botó o, fins i tot, pot ser que no sigui a la mateixa banda que la brúixola del telèfon. A més, pot ser que el telèfon no disposi de brúixola.

A partir d’aquest exemple podeu implementar les vostres pròpies implementacions, afegint aquests tres mètodes a qualsevol classe heretada de MonoBehaviour i codificant els comportaments per a cada esdeveniment: quan se selecciona (OnPointerEnter), quan es desselecciona (OnPointerExit) i quan s’interactua (OnPointerClick).

Cas pràctic: visor de vídeos 360°

Tot i que les ulleres Cardboard són molt limitades, s’han utilitzat amb èxit en diferents projectes comercials per mostrar amb un major nivell d’immersió diferents productes com són immobles, visites turístiques o esdeveniments (tours virtuals).

Les visites virtuals es poden fer de moltes maneres. En el cas d’edificis que encara no s’han construït, es poden crear a partir de models 3D; en altres casos, es poden usar fotos 360° i marcar punts del recorregut per on l’usuari pot anar teleportant-se o pot mostrar-se un vídeo 360° i reproduir-lo en realitat virtual.

En aquest cas pràctic veurem un cas de vídeo 360°. Es crearà un reproductor de vídeo 360° que s’executarà com una aplicació de realitat virtual per posar literalment al client al centre de l’experiència.

Atès que el cost de les ulleres és negligible comparat amb el dels equips de realitat virtual més professionals i que no requereixen cables, aquest tipus d’aplicacions van ser molt populars en fires immobiliàries i turístiques. Per crear un visor de vídeos 360° a partir de l’escena d’exemple de Cardboard, heu de seguir els següents passos:

1. Adquirir el vídeo. Primer de tot cal obtenir un vídeo 360° per mostrar a l’aplicació. Aquest vídeo s’afegeix com un asset a Unity per reproduir-lo més endavant:

  1. Descarregueu un vídeo 360° d’algun lloc web. En podeu trobar alguns a: 3D 360° Videos
  2. Descomprimiu-lo i afegiu-lo al projecte de Unity.

2. Shader. Un cop obtingut el vídeo, cal fer servir un shader especial. Desenvolupat per Unity, aquest shader és el responsable de projectar el vídeo sobre el fons de l’aplicació:

'Shader'

Un shader és un programa que determina l’aparença general d’un objecte gràfic de manera algorísmica, amb els corresponents efectes de superfície de color, llum, ombra o textura. En utilitzar el shader SkyboxPanoramicBeta és normal que es mostrin avisos a la consola perquè es va crear per a Unity 2017.3.

  1. Descarregueu el shader des de Panoramic 2D and 3D Video.
  2. Descomprimiu-lo i afegiu-lo al projecte de Unity.
  3. Moveu el fitxer SkyboxPanoramicBetaShaderGUI a una carpeta anomenada Editor (on vulgueu). Això és necessari perquè tots els scripts per a l’editor han de ser dins d’una carpeta anomenada així.

3. Escena. Seguidament, s’ha de crear l’escena per projectar el vídeo. El més simple és crear-la a partir de l’escena de demostració eliminant tots els elements innecessaris.

  1. Dupliqueu l’escena HelloCardboard, canvieu el nom de la còpia a VideoCardboard i obriu-lo.
  2. Elimineu o desactiveu els objectes CubeRoom i Tresure, no són necessaris per a aquesta aplicació.
  3. Arrossegeu el vídeo a l’escena: es crearà un GameObject amb el component Video Player automàticament.
  4. Seleccioneu Assets> Create> Render Texture i anomeneu-la 3D Skybox.
  5. Assigneu-li a size la mida corresponent al vídeo (per exemple, 2304×2304).
  6. Canvieu Depth Buffer a No depth buffer.
  7. Seleccioneu l’objecte amb el component Video Player a la jerarquia, canvieu el Render Mode a Render Texture i seleccioneu com a Target Texture la textura que heu creat 3D Skybox.
  8. Creeu un material seleccionant Assets> Create> Material i anomeneu-lo 3D Skybox Mat.
  9. Amb el material seleccionat, canvieu el shader a l’inspector per Skybox> PanoramicBeta.
  10. A Spherical (HDR) assigneu la textura creada: 3D Skybox.
  11. Al menú principal seleccioneu Window> Lightining i a la finestra que s’obre cliqueu Environment.
  12. Seleccioneu Skybox Material i assigneu el material que heu creat: 3D Skybox Mat.

4. Camera VR. El següent pas és canviar la configuració de la càmera perquè es renderitzi el fons, que ara contindrà el vídeo 360.

  1. A la jerarquia de l’escena seleccioneu l’objecte Player> Main Camera i al component Camera canvieu el valor de Clear Flags per Skybox.

5. Build. Per acabar, només cal fer la build:

  1. Afegiu la nova escena a la llista d’escenes de la build i elimineu l’anterior o arrossegueu-la a sota, de manera que aquesta sigui la primera escena que carregui l’aplicació.
  2. Premeu el botó Build and Run.

Comproveu que el vídeo es reprodueix en 360° amb visió estereoscòpica (vegeu la figura) i que si moveu la càmera podeu veure tot el vostre entorn.

Figura Aplicació vídeo 360 per a Google Cardboard

Cas pràctic: joc de realitat virtual

Encara que la complexitat més gran a l’hora de crear experiències de realitat virtual consisteix a implementar els sistemes d’interacció i locomoció, i aquestes són molt limitades a Cardboard, sí que es pot comprovar la facilitat amb la qual es poden fer els primers passos per portar un joc en primera persona a la realitat virtual.

Si disposeu d’un camandament de joc (gamepad) o palanca de control (joystick) compatible amb el telèfon intel·ligent, veureu que us permet interactuar amb el joc, movent-vos i disparant. En cas contrari, haureu de limitar-vos a observar l’entorn.

És possible implementar un sistema d’interacció i locomoció simple utilitzant només el visor, encara que això queda fora de l’abast d’aquests continguts. Per exemple és possible:

  • Activar objectes mirant-los durant uns segons (mantenir la mirada).
  • Fer que el jugador avanci quan mira a terra (comprovant l’angle d’inclinació de la càmera).
  • Fer que el personatge es teleporti d’un punt a altre quan manté la mirada sobre el punt de teleportació.

Es pot integrar l’SDK de Google Card en un joc en primera persona a partir de la plantilla FPS Microgame. S’ha de tenir en compte que aquest projecte no està optimitzat per desplegar-lo en Cardboard, així que els FPS obtinguts seran molt baixos; però serveix com a exemple per mostrar com es pot convertir un projecte amb una càmera en primera persona en un joc per a realitat virtual, ràpidament:

  1. Creeu un nou projecte a partir de la plantilla FPS Microgame.
  2. Instal·leu el package Google Cardboard XR Plugin for Unity mitjançant el Package Manager des de Git (Google Cardboard XR Plugin for Unity).
  3. Aneu a File> Build Settings, seleccioneu com a plataforma Android i premeu Switch Platform.
  4. Configureu tots els paràmetres requerits per l’SDK a Player Settings i feu els canvis necessaris als fitxers tal com s’indica a la guia d’instal·lació de Google Cardboard amb els següents canvis:
    1. Deixeu marcada la casella Auto Graphics API. Aquest projecte no funciona amb OpenGLES2 perquè utilitza shaders especials. Si veieu que es renderitza tot de color magenta, possiblement és perquè el dispositiu no suporta OpenGLES3.
    2. A la llista d’escenes de la build deixeu marcada només MainScene per carregar només l’escena principal del joc.
  5. Obriu l’escena MainScene i seleccioneu l’objecte Player> MainCamera i afegiu el component Tracked Pose Driver amb la configuració que es mostra a la figura (fixeu-vos que s’ha marcat la casella Use Relative Transform; si no ho feu, la càmera quedarà als peus del jugador).
  6. Seleccioneu al menú principal File> Build and Run.
Figura Component Tracked Pose Driver

L’aplicació s’instal·la al dispositiu i podreu visualitzar-lo amb vista estereoscòpica (vegeu la figura).

És habitual que en els controladors hi hagi algun botó no mapejat correctament o que els eixos de les palanques de joc estiguin invertits.

Figura Joc FPS per a Google Cardboard

Si disposeu d’una palanca de control o comandament de joc Bluetooth sincronitzat amb el telèfon, podreu utilitzar-lo per moure-us pel joc, ja que aquest projecte està preparat per funcionar amb les entrades per teclat, ratolí i controladors.

Com es pot apreciar, crear un joc senzill per a realitat virtual amb Google Cardboard és relativament senzill, només cal instal·lar l’SDK, afegir el component Tracked Pose Driver i afegir les interaccions, sigui mitjançant un comandament de joc o algun component creat que implementi els mètodes OnPointerEnter, OnPointerExit i OnPointerClick.

Anar a la pàgina anterior:
Exercicis d'autoavaluació
Anar a la pàgina següent:
Activitats