A entrada para AR Unity —— sessão AR
A sessão AR (session) é a porta de entrada para todas as funcionalidades de RA. Através do conteúdo abaixo, você entenderá os conceitos básicos, a composição, o fluxo de operação da sessão AR e como ela se relaciona com a sessão AR do Unity AR Foundation. Você também aprenderá como o fluxo de dados do EasyAR Sense realmente funciona dentro do Unity.
O que é uma sessão AR
Todos os fluxos AR (como o rastreamento de objetos) são executados dentro de bibliotecas nativas, especificamente o EasyAR Sense. A sessão é o ponto de entrada principal para os recursos de RA no Unity. Ela gerencia o processo de execução e o estado do sistema AR, incluindo a leitura de dados da câmera física e sensores, a análise do mundo real, a condução do movimento da câmera virtual na cena, e a renderização de outras partes dos objetos.
flowchart LR
A((Imagem<br>e outros dados))
B[Sessão]
C([Câmera])
O([Origem])
T([Alvo])
A --> B
B -. transform .-> C
B -. transform .-> O
B -. transform .-> T
[Opcional] Session do EasyAR e session do AR Foundation
A session do EasyAR é o componente central para usar o EasyAR no Unity e pode operar independentemente de qualquer funcionalidade AR de terceiros ou do sistema. Já a session do AR Foundation faz parte do framework XR do Unity e só pode utilizar funcionalidades fornecidas por plugins XR do Unity (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 o EasyAR, geralmente não é necessário instalar e usar simultaneamente o AR Foundation. Recursos como rastreamento de imagem, rastreamento de movimento, etc., são fornecidos de forma independente pelo EasyAR Sense.
Em alguns casos, pode ser necessário combinar o EasyAR Sense com o AR Foundation para aproveitar recursos adicionais (como detecção de planos em certos dispositivos) e interfaces fornecidos pelo AR Foundation. Nesse cenário, o EasyAR Sense interage com o mecanismo Unity através das interfaces fornecidas pelo AR Foundation.
No entanto, como o EasyAR oferece mais funcionalidades e é mais compatível com dispositivos do que o AR do sistema, usar apenas o AR Foundation geralmente não alcança os mesmos resultados que o EasyAR.
Composição da sessão
Uma sessão típica consiste principalmente nos seguintes componentes:
- frame source: Componente que fornece imagens da câmera física e dados de sensores, às vezes também fornecendo dados de rastreamento de movimento. Por exemplo, CameraDeviceFrameSource e MotionTrackerFrameSource
- frame filter(s): Componentes que fornecem recursos específicos de RA, como ImageTrackerFrameFilter
- câmera: O objeto de câmera virtual na cena
- origin: O objeto de origem para o rastreamento de movimento
Nota
No conceito do AR Foundation, o rastreamento de movimento é tratado como um recurso obrigatório, portanto, ele sempre fornece uma origem.
No sistema EasyAR, o rastreamento de movimento é um recurso opcional, portanto, a origem 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 aplicações AR no Unity. Esta seção pode ser lida se desejar compreender mais profundamente como a session funciona.
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
Este fluxo de dados é criado durante o processo de inicialização da session. Com exceção dos caminhos de dados destacados em negrito, a conexão das outras partes depende dos componentes AR ativados durante a inicialização.
Portanto, modificando os componentes ativados na session, é possível alterar flexivelmente a estrutura e a funcionalidade do fluxo de dados, além de permitir ativar facilmente múltiplas funcionalidades AR simultaneamente. Este método será detalhado nos próximos parágrafos.
Fluxo da sessão
flowchart LR
i[Inicialização<br>Initialize]
a[Montagem<br>Assemble]
starta["Início (montado)<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 uma chave de licença. Antes da inicialização, apenas uma pequena parte das interfaces do EasyAR Sense pode ser usada. Após a inicialização, as funcionalidades de RA serão ativadas.Montagem (Assembling)
O processo de montagem seleciona componentes apropriados da cena com base na configuração das opções de montagem e os conecta em uma unidade de trabalho integrada. Esse processo geralmente é concluído automaticamente na inicialização, mas também pode ser feito manualmente chamando a interface de montagem antes de iniciar. Após a montagem, você pode pular o processo de montagem iniciando a sessão montada, acelerando assim o início.
A montagem também tem uma função importante: verificar a disponibilidade dos componentes de RA e das fontes de entrada, e selecionar a fonte de entrada mais adequada entre os candidatos. Esta etapa também pode ser usada para determinar se a sessão atual pode ser executada no dispositivo atual.O processo de montagem é dividido em duas fases:
- A primeira fase inicia a atualização da lista de suporte de dispositivos e aguarda um tempo fixo configurado antes de começar a montagem. Se a lista de suporte de dispositivos já estiver atualizada após a espera da primeira fase, o processo de montagem termina;
- Caso contrário, o processo de montagem entra na segunda fase, que é executada após a conclusão da atualização da lista de suporte de dispositivos. Nesta fase, se uma fonte de quadro (frame source) disponível passar de "nenhuma" na primeira fase para "existente", e a sessão falhou ao iniciar após a primeira fase, uma tentativa de reiniciar a sessão será feita.
Independentemente de a lista de dispositivos ter sido atualizada na primeira fase, a sessão continuará com as etapas subsequentes após a conclusão da primeira fase.
Início
O início é o processo de começar a execução das funcionalidades de RA. Antes do início, os componentes de RA não processam nenhum dado. Após um início normal, a sessão começará a controlar o movimento de alguns objetos na cena e, ao usar certas fontes de entrada, controlará a renderização da imagem da câmera física.Atualização
O processo de atualização é executado a cada quadro no ciclo de renderização do Unity. Durante a atualização, com base nos resultados da funcionalidade de RA em uso, a sessão modificará a transformada da câmera virtual (para algumas fontes de entrada), da origem e dos alvos de rastreamento a cada quadro. O momento de execução da atualização não é o mesmo em todos os dispositivos, mas ocorrerá necessariamente antes da renderização.Parar
Parar encerra a execução das funcionalidades de RA. Os objetos na cena deixarão de ser controlados pela sessão, e os dados das fontes de entrada não serão processados.Desinicialização
A desinicialização libera alguns recursos globais (não descarrega a biblioteca dinâmica). Após a desinicialização, os componentes de funcionalidade de RA não poderão ser usados.
Nota
Todas as funcionalidades de RA só podem ser usadas após ARSession.StartSession.
Ciclo de vida padrão da sessão
flowchart LR
uload("BeforeSceneLoad")
ustart("MonoBehaviour.Start")
udestroy("MonoBehaviour.OnDestroy")
oi{Initialize<br>OnStartup}
ostart{AutoStart}
i[inicialização<br>Initialize]
start[iniciar<br>StartSession]
update((atualizar<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 sessão geralmente é determinado pelo momento de chamada da interface. Com configurações padrão, a sessão executa automaticamente nos seguintes momentos:
Inicialização (EasyARSettings.InitializeOnStartup ==
true)
A inicialização automática ocorre no ponto de tempo BeforeSceneLoad do Unity.Início (ARSession.AutoStart ==
true)
O início automático ocorre no ponto de tempo MonoBehaviour.Start() da sessão.Parada
A parada automática ocorre no ponto de tempo MonoBehaviour.OnDestroy() da sessão.
Estado de sessão
ARSession.State descreve o estado da sessão. Uma sessão tem os seguintes estados:
| Estado | Descrição |
|---|---|
| None | Estado inicial, sessão não iniciada ou em montagem |
| Broken | Sessão danificada devido a falha na montagem, etc. |
| Assembling | Em processo de montagem, o processo normalmente pode durar alguns quadros |
| Assembled | Montagem concluída com sucesso, mas ainda não iniciada |
| Ready | Sessão iniciada com sucesso, este estado dura apenas um quadro |
| Running | Sessão em execução |
| Paused | Sessão pausada |
Normalmente, o estado da sessão muda quando interfaces como iniciar e parar são chamadas. Durante a execução, se ocorrer um erro grave, a sessão também pode entrar no estado Broken. Uma sessão neste estado não pode ser retomada; é necessário chamar parar e reiniciar.
É possível saber se a sessão atual está em um estado utilizável através do seu estado. A grande maioria das funcionalidades só pode ser usada nos estados Ready ou Running.
Estado de rastreamento de movimento
O ARSession.TrackingStatus descreve o estado de rastreamento de movimento da sessão. Ele indica a qualidade do rastreamento de movimento do dispositivo e pode ter os seguintes estados:
| Estado | Descrição |
|---|---|
Optional<MotionTrackingStatus>.Empty |
O recurso de rastreamento de movimento não está habilitado ou a sessão não está em execução |
NotTracking |
Os resultados de rastreamento de movimento não estão disponíveis. Possíveis causas: inicialização em andamento, rastreamento perdido ou relocalização em curso |
Limited |
O rastreamento de movimento é válido, mas os resultados não são ideais. Possíveis causas: textura muito fraca na área atual ou movimento excessivamente rápido |
Tracking |
A qualidade do rastreamento de movimento é boa |
Nota
No conceito do AR Foundation, o rastreamento de movimento é tratado como um recurso obrigatório, portanto, seu estado de rastreamento é combinado com o estado da sessão.
No sistema EasyAR, o rastreamento de movimento é um recurso opcional, portanto, seu estado de rastreamento existe de forma independente e pode ser vazio.
Onde está o estado de rastreamento de outros recursos AR
Como os recursos AR podem rastrear múltiplos objetos simultaneamente, o estado de rastreamento de imagem e o estado de rastreamento de outros recursos AR não estão na sessão, mas sim no componente de alvo de rastreamento.
Pode usar TargetController.IsTracked para saber se o alvo de rastreamento está em estado de rastreamento, ou usar os eventos TargetController.TargetFound e TargetController.TargetLost para ajustar a lógica do conteúdo do aplicativo quando o estado de rastreamento mudar.
Próximos passos
- Usar session em aplicativos
- Experimentação rápida
- Mais componentes básicos
- Mais princípios de operação da sessão
- Unity XR e AR Foundation
- Princípios básicos do sense
Criar
- Experimente criar uma session
Controlar execução
- Entenda os métodos e funções da inicialização
- Saiba como verificar disponibilidade e suporte de dispositivos
- Entenda os métodos para controlar a execução da session
Acessar componentes e resultados
- Experimente acessar componentes de recursos AR
- Saiba como obter resultados da execução da session
Referência de componentes
- Referência do componente ARSession