Table of Contents

Entrada de Unity AR: AR Session

La session AR es la entrada a todas las funciones AR. Con el contenido siguiente conocera los conceptos basicos de AR Session, su composicion, su flujo de ejecucion y su relacion con la AR Session de Unity AR Foundation. Tambien conocera como funciona exactamente el flujo de datos de EasyAR Sense en Unity.

Que es AR Session

Todos los procesos AR, como el seguimiento de objetos, se ejecutan dentro de la biblioteca nativa, es decir, EasyAR Sense. La session es el punto de entrada principal de las funciones AR en Unity. Gestiona el proceso de ejecucion y el estado del sistema AR, incluidos leer datos de la camara fisica y los sensores, analizar el mundo real, impulsar el movimiento y el renderizado de la camara virtual y otros objetos de la escena, entre otros.

flowchart LR
  A((Imágenes<br>y otros datos))
  B[Session]
  C([Camera])
  O([Origin])
  T([Target])
  A --> B
  B -. transform .-> C
  B -. transform .-> O
  B -. transform .-> T

[Opcional] EasyAR session y AR Foundation session

La session de EasyAR es el componente central para usar EasyAR en Unity y puede ejecutarse independientemente de cualquier funcion AR de terceros o del sistema. En cambio, la session de AR Foundation forma parte del framework Unity XR y solo puede usar las funciones proporcionadas por plugins Unity XR, como ARKit o ARCore.

flowchart TD
  A1[EasyAR<br>AR Session]
  A2[EasyAR Sense]
  A1 --> A2

  B1[AR Foundation<br>AR Session]
  B2[ARKit Plugin]
  B3[ARCore Plugin]
  B1 --> B2
  B1 --> B3

Al usar EasyAR, normalmente no es necesario instalar y usar AR Foundation al mismo tiempo. Funciones como seguimiento de imagen y seguimiento de movimiento son proporcionadas de forma independiente por EasyAR Sense.

En algunos casos, puede ser necesario combinar EasyAR Sense con AR Foundation para aprovechar funciones e interfaces adicionales proporcionadas por AR Foundation, como la deteccion de planos en algunos dispositivos. En este caso, EasyAR Sense interactua con el motor Unity mediante las interfaces proporcionadas por AR Foundation.

Sin embargo, como EasyAR proporciona mas funciones y una adaptacion de dispositivos mas completa que AR del sistema, usar AR Foundation de forma independiente normalmente no puede lograr el mismo efecto que EasyAR.

Composicion de una session

Una session tipica esta compuesta principalmente por las partes siguientes:

  • frame source: componente que proporciona imagenes de la camara fisica y datos de sensores; a veces estos componentes tambien proporcionan datos de seguimiento de movimiento. Por ejemplo, CameraDeviceFrameSource y MotionTrackerFrameSource
  • frame filter(s): componentes que proporcionan funciones AR especificas, como ImageTrackerFrameFilter
  • camera: objeto de camara virtual en la escena
  • origin: objeto de origen del seguimiento de movimiento
Nota

En los conceptos de AR Foundation, el seguimiento de movimiento se considera una funcion obligatoria, por lo que siempre proporciona un origin.
En el sistema EasyAR, el seguimiento de movimiento es una funcion opcional, por lo que origin tambien es opcional.

[Opcional] Flujo de datos de la session

El flujo de datos es uno de los conceptos centrales de EasyAR Sense. No afecta al desarrollo de aplicaciones AR en Unity. Si desea comprender con mas profundidad como funciona la session, puede leer esta seccion.

En Unity, una session normalmente representa un flujo de datos de EasyAR Sense.

flowchart LR
  S[Frame Source]
  R[Input Frame Recorder<br>Video Input Frame Recorder]
  ift[iFrameThrottler]
  iff[iFrameFork]
  i2f[i2FAdapter]
  fb[fbFrameFork]  
  i2o[i2OAdapter]

  FOT[Object Tracker]
  FIT[Image Tracker]
  FMT[Mega Tracker]
  FSSM[Sparse Spatial Map]
  FST[Surface Tracker]
  FDS[Dense Spatial Map]
  FCR[Cloud Recognizer]
  
  ofj[oFrameJoin]
  off[oFrameFork]
  ofb[oFrameBuffer]

  O(( ))
  ODS(( ))
  OCR(( ))

  S ==> R ==> ift ==> iff
  iff --> i2f
  i2f --> fb
  fb -.-> FOT -.-> ofj
  fb -.-> FIT -.-> ofj
  iff ==> i2o ==> ofj ==> off ==> ofb ==> O
  iff -.-> FMT -.-> ofj
  iff -.-> FSSM -.-> ofj
  iff -.-> FST -.-> ofj
  iff -.-> FDS -.-> ODS
  iff -.-> FCR -.-> OCR
  off --> i2f
  ofb --> ift

Este flujo de datos se crea durante el proceso de inicio de la session. En la figura, excepto la ruta de datos en negrita, si las demas partes estan conectadas depende de los componentes AR habilitados durante el inicio.

Por lo tanto, al modificar los componentes habilitados en la session, puede cambiar de forma flexible la estructura y las funciones del flujo de datos, y tambien puede habilitar comodamente varias funciones AR al mismo tiempo. Este metodo se presentara en detalle en los parrafos siguientes.

Flujo de una session

flowchart LR
  i[Inicialización<br>Initialize]
  a[Ensamblaje<br>Assemble]
  starta["Inicio (ensamblada)<br>StartSession(Assembled)"]
  start[Inicio<br>StartSession]
  update((Actualización<br>update))
  stop[Detener<br>StopSession]
  di[Desinicialización<br>Deinitialize]

  i --> a --> starta --> update --> stop --> di
  i --> start --> update

  • Inicializacion
    La inicializacion es el proceso de iniciar EasyAR Sense con una license key. Antes de la inicializacion, solo se puede usar una pequena parte de las interfaces de EasyAR Sense. Despues de la inicializacion, las funciones AR se activan.

  • Ensamblaje (Assembling)
    El proceso de ensamblaje selecciona de la escena los componentes adecuados segun la configuracion de las opciones de ensamblaje y los conecta en una unidad de trabajo completa. Este proceso normalmente se completa automaticamente al iniciar, pero tambien puede llamar manualmente a la interfaz de ensamblaje antes del inicio para completarlo. Despues de ensamblar, puede iniciar la session ya ensamblada para omitir el proceso de ensamblaje y acelerar el inicio.
    Otro uso importante del proceso de ensamblaje es determinar la disponibilidad de los componentes AR y de las fuentes de entrada, y seleccionar la fuente de entrada mas adecuada entre todas las candidatas. Este paso tambien se puede usar para determinar si la session actual puede ejecutarse en el dispositivo actual.

    El proceso de ensamblaje se divide en dos fases

    1. La primera fase inicia la actualizacion de la lista de dispositivos compatibles y, tras esperar un tiempo fijo segun la configuracion, comienza el ensamblaje. Si despues de esperar en la primera fase la lista de dispositivos compatibles ya se ha actualizado, el proceso de ensamblaje termina;
    2. De lo contrario, el proceso de ensamblaje entra en la segunda fase, que se ejecuta despues de que la lista de dispositivos compatibles termine de actualizarse. En esta fase, si el frame source disponible pasa de no existir en la primera fase a existir, y la session fallo al iniciarse despues de la primera fase, se intentara reiniciar la session.

    Independientemente de si la lista de dispositivos se ha actualizado en la primera fase, la session continuara con los pasos posteriores una vez completada la primera fase.

  • Inicio
    El inicio es el proceso de comenzar la ejecucion de las funciones AR. Antes del inicio, los componentes de funciones AR no procesaran ningun dato. Tras un inicio normal, la session comenzara a controlar el movimiento de algunos objetos de la escena y, al usar ciertas fuentes de entrada, controlara el renderizado de la imagen de la camara fisica.

  • Actualizacion
    La actualizacion se ejecuta en cada fotograma del bucle de renderizado de Unity. Segun los resultados de ejecucion de las funciones AR actualmente usadas, el proceso de actualizacion modifica cada fotograma el transform de la camara virtual (en algunas fuentes de entrada), el origin y los targets de seguimiento. El momento de ejecucion del proceso de actualizacion no es igual en todos los dispositivos, pero siempre se ejecuta antes del renderizado.

  • Detencion
    La detencion termina la ejecucion de las funciones AR. Los objetos de la escena ya no seran controlados por la session, y los datos de la fuente de entrada ya no se procesaran.

  • Desinicializacion
    La desinicializacion libera algunos recursos globales (no descarga las bibliotecas dinamicas). Despues de la desinicializacion, los componentes de funciones AR no podran usarse.

Nota

Todas las funciones AR solo pueden usarse despues de ARSession.StartSession.

Ciclo de vida predeterminado de una session

flowchart LR
  uload("BeforeSceneLoad")
  ustart("MonoBehaviour.Start")
  udestroy("MonoBehaviour.OnDestroy")
  oi{Initialize<br>OnStartup}
  ostart{AutoStart}
  i[Inicialización<br>Initialize]
  start[Inicio<br>StartSession]
  update((Actualización<br>update))
  stop[Detener<br>StopSession]
  
  uload -.-> ustart -.-> udestroy
  uload --> oi -. true .-> i
  ustart --> ostart -. true .-> start
  udestroy --> stop
  i --> start --> update --> stop

El ciclo de vida de una session suele estar determinado por el momento en que se llaman las interfaces. Con la configuracion predeterminada, la session ejecutara automaticamente los pasos siguientes:

Estado de la session

ARSession.State describe el estado de la session. Una session tiene los estados siguientes:

Estado Descripcion
None Estado inicial; la session no se ha iniciado ni ensamblado
Broken La session se ha roto por motivos como un fallo de ensamblaje
Assembling En proceso de ensamblaje; normalmente puede durar varios fotogramas
Assembled Ensamblaje completado correctamente, pero aun no iniciado
Ready La session se ha iniciado correctamente; este estado solo dura un fotograma
Running La session esta en ejecucion
Paused La session esta pausada

Normalmente el estado de la session cambia al llamar interfaces como inicio y detencion. Durante la ejecucion, si se produce un error grave, la session tambien puede entrar en el estado Broken. Una session que entra en Broken no puede recuperar la ejecucion; debe llamarse a detener y luego reiniciar.

Puede conocer mediante el estado de la session si la session actual esta en un estado utilizable. La mayoria de las funciones solo se pueden usar en los estados Ready o Running.

Estado de seguimiento de movimiento

ARSession.TrackingStatus describe el estado de seguimiento de movimiento de la session. Representa la calidad del seguimiento de movimiento del dispositivo y tiene estos estados:

Estado Descripcion
Optional<MotionTrackingStatus>.Empty La funcion de seguimiento de movimiento no esta habilitada o la session no esta en ejecucion
NotTracking El resultado de seguimiento de movimiento no esta disponible; puede deberse a inicializacion, perdida de seguimiento o relocalizacion
Limited El seguimiento de movimiento es valido, pero el resultado no es muy bueno; puede deberse a textura debil en el area actual o a movimiento demasiado rapido
Tracking La calidad del seguimiento de movimiento es buena
Nota

En los conceptos de AR Foundation, el seguimiento de movimiento se considera una funcion obligatoria, por lo que su estado de seguimiento se combina con el estado de la session.
En el sistema EasyAR, el seguimiento de movimiento es una funcion opcional, por lo que el estado de seguimiento existe de forma independiente y puede estar vacio.

Donde estan los estados de seguimiento de otras funciones AR

Como las funciones AR pueden seguir varios objetos al mismo tiempo, el estado de seguimiento de imagen y los estados de seguimiento de otras funciones AR no estan en la session, sino en los componentes de target de seguimiento.

Puede usar TargetController.IsTracked para saber si el target de seguimiento esta en estado de seguimiento, o usar los eventos TargetController.TargetFound y TargetController.TargetLost para ajustar la logica de contenido de la aplicacion cuando cambie el estado de seguimiento.

Pasos siguientes

Crear

Controlar la ejecucion

Acceder a componentes y resultados

Referencia de componentes