Table of Contents

La entrada a ar unity —— ar session

La sesión ar (session) es la entrada a todas las funciones de ar. A través del siguiente contenido aprenderás los conceptos básicos, la composición, el flujo de operación de una sesión ar y cómo se relaciona con la ar session de ar foundation de unity. También aprenderás cómo funciona exactamente el flujo de datos de easyar sense en unity.

Qué es una sesión AR

Todos los procesos de RA (como el seguimiento de objetos) se ejecutan dentro de bibliotecas nativas, es decir, EasyAR Sense. La sesión es la entrada principal a las funciones de RA en Unity. Gestiona el funcionamiento y el estado del sistema de RA, incluyendo la lectura de datos desde cámaras físicas y sensores, el análisis del mundo real, el control del movimiento de cámaras virtuales en la escena y otros elementos, así como la renderización.

flowchart LR
  A((Imágenes<br>y otros datos))
  B[Sesión]
  C([Cámara])
  O([Origen])
  T([Objetivo])
  A --> B
  B -. transform .-> C
  B -. transform .-> O
  B -. transform .-> T

[Opcional] Session de EasyAR y session de AR Foundation

La session de EasyAR es el componente central para usar EasyAR en Unity, y puede funcionar independientemente de cualquier funcionalidad AR de terceros o del sistema. Por otro lado, la session de AR Foundation es parte del marco XR de Unity, y solo puede utilizar funcionalidades proporcionadas por plugins de XR de Unity (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, generalmente no es necesario instalar y usar simultáneamente AR Foundation. Por ejemplo, funciones como seguimiento de imágenes, seguimiento de movimiento, etc., son proporcionadas de forma independiente por EasyAR Sense.

En ciertos casos, podría ser necesario combinar EasyAR Sense con AR Foundation para aprovechar funcionalidades adicionales (como detección de planos en algunos dispositivos) e interfaces proporcionadas por AR Foundation. En este escenario, EasyAR Sense interactúa con el motor de Unity a través de las interfaces proporcionadas por AR Foundation.

Sin embargo, dado que EasyAR ofrece más funciones y una mejor adaptación a dispositivos que el AR del sistema, usar AR Foundation de forma independiente generalmente no puede lograr los mismos resultados que EasyAR.

Composición de la sesión

Una sesión típica se compone principalmente de las siguientes partes:

  • frame source: Componente que proporciona imágenes de la cámara física y datos de sensores. A veces, estos componentes también proporcionan datos de seguimiento de movimiento. Por ejemplo, CameraDeviceFrameSource y MotionTrackerFrameSource.
  • frame filter(s): Componentes que proporcionan funciones AR específicas, como ImageTrackerFrameFilter.
  • camera: Objeto de cámara virtual en la escena.
  • origin: Objeto de origen para el seguimiento de movimiento.
Nota

En el concepto de AR Foundation, el seguimiento de movimiento se considera una función obligatoria, por lo que siempre proporciona un origin.
En el sistema EasyAR, el seguimiento de movimiento es una función opcional, por lo tanto, el origin también es opcional.

[Opcional] Flujo de datos de la sesión

El flujo de datos es uno de los conceptos centrales de EasyAR Sense. No afecta su desarrollo de aplicaciones AR en Unity. Si desea comprender más profundamente cómo funciona una sesión, puede leer esta sección.

En Unity, una sesión generalmente 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 inicio de la sesión. Las partes distintas de las rutas de datos en negrita en el diagrama se conectan o no dependiendo de los componentes AR habilitados durante el inicio.

Por lo tanto, al modificar los componentes habilitados en la sesión, puede cambiar flexiblemente la estructura y funcionalidad del flujo de datos, y también es conveniente habilitar múltiples funciones AR simultáneamente. Este método se detallará en los siguientes párrafos.

Flujo de session

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

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

  • Inicialización
    La inicialización es el proceso de iniciar EasyAR Sense utilizando una license key. Antes de la inicialización, solo una pequeña parte de las interfaces de EasyAR Sense están disponibles. Las funciones AR se activan después de la inicialización.

  • Ensamblaje (Assembling)
    El proceso de ensamblaje selecciona componentes adecuados de la escena según la configuración de opciones y los conecta en una unidad de trabajo integral. Este proceso generalmente se completa automáticamente al inicio, pero también se puede realizar manualmente llamando a la interfaz de ensamblaje antes del inicio. Una vez ensamblado, se puede iniciar la session ensamblada para omitir el proceso de ensamblaje, acelerando así el inicio.
    El ensamblaje también tiene un propósito importante: determinar la disponibilidad de los componentes AR y las fuentes de entrada, y seleccionar la fuente de entrada más adecuada entre todas las candidatas. Este paso también se puede utilizar 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 actualización de la lista de compatibilidad de dispositivos y comienza el ensamblaje después de esperar un tiempo fijo según la configuración. Si la actualización de la lista de compatibilidad de dispositivos se completa después de la espera en la primera fase, el proceso de ensamblaje termina;
    2. De lo contrario, el ensamblaje entra en una segunda fase que se ejecuta después de completar la actualización de la lista de compatibilidad de dispositivos. En esta fase, si una fuente de frame (frame source) no disponible en la primera fase pasa a estar disponible, y la session falló al iniciarse después de la primera fase, se intentará reiniciar la session.

    Independientemente de si la lista de dispositivos se actualiza en la primera fase, la session continuará con los pasos posteriores después de completar la primera fase.

  • Inicio
    El inicio es el proceso de comenzar la ejecución de las funciones AR. Antes del inicio, los componentes de AR no procesan ningún dato. Después de un inicio normal, la session comienza a controlar el movimiento de algunos objetos en la escena y, al usar ciertas fuentes de entrada, controla la renderización de imágenes de la cámara física.

  • Actualización
    El proceso de actualización se ejecuta en cada frame del ciclo de renderizado de Unity. Modifica el transform de la cámara virtual (para algunas fuentes de entrada), el origen y los objetivos de seguimiento (tracking targets) cada frame, según los resultados de la función AR en uso. El momento de ejecución de la actualización no es el mismo en todos los dispositivos, pero siempre ocurre antes del renderizado.

  • Detención
    La detención termina la ejecución de las funciones AR. Los objetos de la escena dejarán de ser controlados por la session, y los datos de las fuentes de entrada no se procesarán.

  • Desinicialización
    La desinicialización libera algunos recursos globales (no descarga bibliotecas dinámicas). Después de la desinicialización, los componentes de funciones AR no podrán utilizarse.

Nota

Todas las funciones AR solo pueden usarse después de ARSession.StartSession.

Ciclo de vida predeterminado de la sesión

flowchart LR
  uload("BeforeSceneLoad")
  ustart("MonoBehaviour.Start")
  udestroy("MonoBehaviour.OnDestroy")
  oi{Initialize<br>OnStartup}
  ostart{AutoStart}
  i[初始化<br>Initialize]
  start[启动<br>StartSession]
  update((更新<br>update))
  stop[停止<br>StopSession]
  
  uload -.-> ustart -.-> udestroy
  uload --> oi -. true .-> i
  ustart --> ostart -. true .-> start
  udestroy --> stop
  i --> start --> update --> stop

El ciclo de vida de la sesión generalmente está determinado por el momento de las llamadas a la interfaz. Con la configuración predeterminada, la sesión se ejecuta automáticamente en los siguientes puntos:

Estado de sesión

ARSession.State describe el estado de la sesión. Una sesión tiene los siguientes estados:

Estado Descripción
None Estado inicial, la sesión no se ha iniciado ni ensamblado
Broken La sesión está dañada, por ejemplo, por fallas de ensamblaje
Assembling En proceso de ensamblaje, este proceso generalmente puede durar varios fotogramas
Assembled Ensamblaje completado con éxito, pero aún no iniciada
Ready La sesión se inició con éxito, este estado solo dura un fotograma
Running La sesión está en ejecución
Paused La sesión está en pausa

Normalmente, el estado de la sesión cambiará al llamar a interfaces como inicio y detención. Durante la ejecución, si ocurre un error grave, la sesión también puede entrar en el estado Broken. Una sesión en estado Broken no puede reanudarse; debe detenerse y reiniciarse.

Puedes conocer si la sesión actual está en un estado utilizable mediante su estado. La gran mayoría de las funciones solo están disponibles cuando la sesión está en estado Ready o Running.

Estado de seguimiento de movimiento

ARSession.TrackingStatus describe el estado de seguimiento de movimiento de la sesión, indicando la calidad del seguimiento de movimiento del dispositivo. Tiene los siguientes estados:

Estado Descripción
Optional<MotionTrackingStatus>.Empty La función de seguimiento de movimiento no está habilitada o la sesión no se está ejecutando
NotTracking El resultado del seguimiento de movimiento no está disponible. Las razones pueden incluir inicialización, pérdida de seguimiento o que se está reubicando
Limited El seguimiento de movimiento es válido, pero los resultados no son óptimos. Las razones pueden ser textura débil en el área actual o movimiento demasiado rápido
Tracking La calidad del seguimiento de movimiento es buena
Nota

En el concepto de AR Foundation, el seguimiento de movimiento se considera una función obligatoria, por lo que su estado de seguimiento se combina con el estado de la sesión.
En el sistema EasyAR, el seguimiento de movimiento es una función opcional, por lo que su estado de seguimiento existe de forma independiente y puede estar vacío.

Otros estados de seguimiento de funciones AR

Dado que las funciones AR pueden rastrear múltiples objetos simultáneamente, el estado de seguimiento de imágenes y el estado de seguimiento de otras funciones AR no se encuentran en la sesión, sino en el componente del objetivo de seguimiento.

Se puede usar TargetController.IsTracked para saber si el objetivo de seguimiento está en estado de seguimiento, o usar los eventos TargetController.TargetFound y TargetController.TargetLost para ajustar la lógica del contenido de la aplicación cuando cambia el estado de seguimiento.

Próximos pasos

Crear

Controlar la ejecución

Acceder a componentes y resultados

Referencia de componentes