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
- 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;
- 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:
Inicializacion (EasyARSettings.InitializeOnStartup ==
true)
La inicializacion automatica se ejecuta en el momento BeforeSceneLoad de Unity.Inicio (ARSession.AutoStart ==
true)
El inicio automatico se ejecuta en el momento MonoBehaviour.Start() de la session.Detencion
La detencion automatica se ejecuta en el momento MonoBehaviour.OnDestroy() de la session.
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
- Usar session en una aplicacion
- Experimento rapido
- Mas componentes basicos
- Mas principios de ejecucion de session
- Unity XR y AR Foundation
- Principios internos de Sense
Crear
- Intente crear una session en la escena
Controlar la ejecucion
- Aprenda el metodo y la funcion de la inicializacion
- Aprenda como determinar disponibilidad y compatibilidad del dispositivo
- Aprenda los metodos para controlar la ejecucion de la session
Acceder a componentes y resultados
- Intente acceder a componentes de funciones AR
- Aprenda como obtener los resultados de ejecucion de la session
Referencia de componentes
- Referencia del componente ARSession