Entrada do Unity AR —— AR Session
A session de AR é a entrada para todas as funções AR. Pelo conteúdo a seguir, você entenderá os conceitos básicos, a composição e o fluxo de execução da AR Session, além de sua relação com a AR Session do Unity AR Foundation. Você também verá como o fluxo de dados do EasyAR Sense funciona no Unity.
O que é AR Session
Todos os processos de AR, como rastreamento de objetos, são executados na biblioteca nativa, isto é, dentro do EasyAR Sense. A session é o principal ponto de entrada das funções AR no Unity. Ela gerencia o processo e o estado de execução do sistema AR, incluindo a leitura de dados de câmeras físicas e sensores, a análise do mundo real, o controle do movimento e da renderização da câmera virtual na cena e de outros objetos.
flowchart LR
A((Imagens<br>e outros dados))
B[Session]
C([Camera])
O([Origin])
T([Target])
A --> B
B -. transform .-> C
B -. transform .-> O
B -. transform .-> T
[Opcional] session do EasyAR e session do AR Foundation
O session do EasyAR é o componente central para usar EasyAR no Unity e pode funcionar de forma independente de qualquer função AR de terceiros ou do sistema. Já a session do AR Foundation faz parte do framework Unity XR e só pode usar funções fornecidas por plugins Unity XR, como ARKit ou 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
Ao usar EasyAR, normalmente não é necessário instalar e usar AR Foundation ao mesmo tempo. Funções como rastreamento de imagem e rastreamento de movimento são fornecidas independentemente pelo EasyAR Sense.
Em alguns casos, pode ser necessário combinar o EasyAR Sense com o AR Foundation para aproveitar funções e interfaces adicionais fornecidas pelo AR Foundation, como detecção de planos em alguns dispositivos. Nesse caso, o EasyAR Sense interage com o motor Unity por meio das interfaces fornecidas pelo AR Foundation.
No entanto, como o EasyAR oferece mais funções e adaptação de dispositivos mais completa do que a AR do sistema, usar apenas AR Foundation geralmente não alcança o mesmo efeito que o EasyAR.
Composição da session
Uma session típica é composta principalmente pelas seguintes partes:
- frame source: componente que fornece imagens da câmera física e dados de sensores; às vezes esses componentes também fornecem dados de rastreamento de movimento. Por exemplo, CameraDeviceFrameSource e MotionTrackerFrameSource
- frame filter(s): componente que fornece uma função AR específica, como ImageTrackerFrameFilter
- camera: objeto de câmera virtual na cena
- origin: objeto de origem do rastreamento de movimento
Nota
No conceito do AR Foundation, o rastreamento de movimento é tratado como função obrigatória, portanto ele sempre fornece um origin.
No sistema EasyAR, o rastreamento de movimento é uma função opcional, portanto o origin também é opcional.
[Opcional] Fluxo de dados da session
Fluxo de dados é um dos conceitos centrais do EasyAR Sense. Ele não afeta o desenvolvimento de aplicativos AR no Unity. Se você quiser entender mais profundamente o princípio de funcionamento da session, pode ler esta seção.
No Unity, uma session normalmente representa um fluxo de dados do 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
Esse fluxo de dados é criado durante o processo de inicialização da session. Na figura, exceto pelos caminhos de dados em negrito, a conexão das demais partes depende dos componentes AR habilitados durante a inicialização.
Portanto, ao modificar os componentes habilitados na session, é possível alterar com flexibilidade a estrutura e as funções do fluxo de dados, e também habilitar várias funções AR ao mesmo tempo de forma conveniente. Esse método será apresentado em detalhes nos parágrafos seguintes.
Fluxo da session
flowchart LR
i[Inicialização<br>Initialize]
a[Montagem<br>Assemble]
starta["Início (montada)<br>StartSession(Assembled)"]
start[Início<br>StartSession]
update((Atualização<br>update))
stop[Parar<br>StopSession]
di[Desinicialização<br>Deinitialize]
i --> a --> starta --> update --> stop --> di
i --> start --> update
Inicialização
A inicialização é o processo de iniciar o EasyAR Sense usando a license key. Antes da inicialização, apenas uma parte muito pequena das interfaces do EasyAR Sense pode ser usada. Depois da inicialização, as funções AR são ativadas.Montagem (Assembling)
O processo de montagem seleciona componentes adequados na cena de acordo com a configuração das opções de montagem e os conecta em uma unidade de trabalho completa. Normalmente esse processo é concluído automaticamente na inicialização, mas também pode ser chamado manualmente antes da inicialização por meio da interface de montagem. Depois que a montagem é concluída, é possível iniciar uma session já montada para pular o processo de montagem e acelerar a inicialização.
Outro uso importante do processo de montagem é determinar a disponibilidade dos componentes AR e das fontes de entrada, escolhendo a fonte de entrada mais adequada entre todas as candidatas. Essa etapa também pode ser usada para determinar se a session atual pode rodar no dispositivo atual.O processo de montagem é dividido em duas etapas
- A primeira etapa inicia a atualização da lista de suporte de dispositivos e, depois de aguardar um tempo fixo conforme a configuração, começa a montagem. Se após a espera da primeira etapa a lista de suporte de dispositivos já tiver sido atualizada, o processo de montagem termina;
- Caso contrário, o processo de montagem entra na segunda etapa, que será executada depois que a lista de suporte de dispositivos terminar de atualizar. Nessa etapa, se a frame source disponível passar de nenhuma frame source disponível na primeira etapa para existir uma frame source disponível, e a session tiver falhado ao iniciar após a primeira etapa, haverá uma tentativa de reiniciar a session.
Independentemente de a lista de dispositivos ter terminado de atualizar na primeira etapa, a session continuará as etapas seguintes depois que a primeira etapa for concluída.
Inicialização da execução
A inicialização da execução é o processo de começar a execução das funções AR. Antes disso, os componentes funcionais de AR não processam nenhum dado. Depois de uma inicialização normal, a session começa a controlar o movimento de alguns objetos na cena e, ao usar algumas fontes de entrada, controla a renderização da imagem da câmera física.Atualização
O processo de atualização é executado a cada quadro do loop de renderização do Unity. Ele modifica a cada quadro o transform da câmera virtual (em algumas fontes de entrada), do origin e dos targets rastreados, de acordo com os resultados de execução das funções AR atuais. O momento de execução da atualização não é igual em diferentes dispositivos, mas sempre ocorre antes da renderização.Parada
A parada encerra a execução das funções AR. Os objetos da cena deixam de ser controlados pela session, e os dados da fonte de entrada deixam de ser processados.Desinicialização
A desinicialização libera parte dos recursos globais, mas não descarrega bibliotecas dinâmicas. Depois dela, os componentes funcionais de AR não poderão ser usados.
Nota
Todas as funções AR só podem ser usadas depois de ARSession.StartSession.
Ciclo de vida padrão da session
flowchart LR
uload("BeforeSceneLoad")
ustart("MonoBehaviour.Start")
udestroy("MonoBehaviour.OnDestroy")
oi{Initialize<br>OnStartup}
ostart{AutoStart}
i[Inicialização<br>Initialize]
start[Início<br>StartSession]
update((Atualização<br>update))
stop[Parar<br>StopSession]
uload -.-> ustart -.-> udestroy
uload --> oi -. true .-> i
ustart --> ostart -. true .-> start
udestroy --> stop
i --> start --> update --> stop
O ciclo de vida da session geralmente é determinado pelo momento em que as interfaces são chamadas. Com as configurações padrão, a session executa automaticamente nos seguintes momentos:
Inicialização (EasyARSettings.InitializeOnStartup ==
true)
A inicialização automática ocorre no momento BeforeSceneLoad do Unity.Inicialização da execução (ARSession.AutoStart ==
true)
A inicialização automática da execução ocorre no momento MonoBehaviour.Start() da session.Parada
A parada automática ocorre no momento MonoBehaviour.OnDestroy() da session.
Estado da session
ARSession.State descreve o estado da session. Uma session possui os seguintes estados:
| Estado | Descrição |
|---|---|
| None | Estado inicial; a session não foi iniciada nem montada |
| Broken | A session foi quebrada por motivos como falha de montagem |
| Assembling | Em processo de montagem, que normalmente pode durar alguns quadros |
| Assembled | Montagem concluída com sucesso, mas ainda não iniciada |
| Ready | A session foi iniciada com sucesso; este estado dura apenas um quadro |
| Running | A session está em execução |
| Paused | A session está pausada |
Normalmente, o estado da session muda ao chamar interfaces como iniciar e parar. Durante a execução, se ocorrer um erro grave, a session também pode entrar no estado Broken. Uma session que entrou no estado Broken não pode voltar a executar; é necessário chamar parada e depois reiniciá-la.
É possível entender pelo estado da session se a session atual está em um estado utilizável. A grande maioria das funções só pode ser usada nos estados Ready ou Running.
Estado do rastreamento de movimento
ARSession.TrackingStatus descreve o estado de rastreamento de movimento da session. Ele representa a qualidade do rastreamento de movimento do dispositivo e possui estes estados:
| Estado | Descrição |
|---|---|
| Optional<MotionTrackingStatus>.Empty | A função de rastreamento de movimento não está habilitada ou a session não está em execução |
| NotTracking | O resultado do rastreamento de movimento não está disponível; o motivo pode ser inicialização, perda de rastreamento ou relocalização |
| Limited | O rastreamento de movimento é válido, mas o resultado não é muito bom; o motivo pode ser textura fraca na área atual ou movimento rápido demais |
| Tracking | A qualidade do rastreamento de movimento é boa |
Nota
No conceito do AR Foundation, o rastreamento de movimento é tratado como função obrigatória, portanto seu estado de rastreamento foi mesclado ao estado da session.
No sistema EasyAR, o rastreamento de movimento é uma função opcional; portanto, o estado de rastreamento existe de forma independente e pode estar vazio.
Onde está o estado de rastreamento de outras funções AR
Como uma função AR pode rastrear vários objetos ao mesmo tempo, o estado de rastreamento de imagem e os estados de rastreamento de outras funções AR não ficam na session, mas sim nos componentes de target rastreado.
É possível usar TargetController.IsTracked para saber se o target rastreado está em estado de rastreamento, ou usar os eventos TargetController.TargetFound e TargetController.TargetLost para ajustar a lógica de conteúdo do aplicativo quando o estado de rastreamento muda.
Próximos passos
- Usar session no aplicativo
- Experimento rápido
- Mais componentes básicos
- Mais princípios de execução da session
- Unity XR e AR Foundation
- Princípios de baixo nível do Sense
Criar
- Tente criar uma session na cena
Controlar execução
- Entenda o método e a função de inicialização
- Saiba como verificar disponibilidade e suporte do dispositivo
- Entenda o método de controlar a execução da session
Acessar componentes e resultados
Referência de componentes
- Referência do componente ARSession