Câmera e fonte de dados de quadros de entrada em Unity - fonte de quadro (Frame Source)
A fonte de quadro é o provedor de dados de câmera e quadros de entrada em Unity. Este artigo introduz os conceitos básicos, tipos e métodos de seleção em tempo de execução de fontes de quadro.
Antes de começar
- Compreender os conceitos básicos, componentes e fluxo de trabalho da Sessão AR.
- Compreender conceitos básicos como câmera, quadro de entrada.
O que é uma fonte de quadro
A fonte de quadro (FrameSource) é o provedor de quadros de entrada (InputFrame), abstraindo câmeras e outros dispositivos/funcionalidades que fornecem dados de quadros de entrada.
O diagrama abaixo mostra a posição da fonte de quadro na sessão:
flowchart LR
F[Frame Source]
A((Input Frame))
B[Session]
C([Camera])
O([Origin])
T([Target])
F --> A
A --> B
B -. transform .-> C
B -. transform .-> O
B -. transform .-> T
style F fill:#6e6ce6,stroke:#333,color:#fff
Uma fonte de quadro pode apenas fornecer dados para funcionalidades AR downstream, ou pode implementar algumas funcionalidades AR, como rastreamento de movimento. Algumas fontes de quadro fornecem interfaces de controle de dispositivo de câmera, permitindo selecionar parâmetros como resolução, modo de foco, etc.
Tipos de fonte de quadro
Classificados pelo pacote Unity que os fornece, as fontes de quadro dividem-se em dois tipos principais:
- Fontes de quadro integradas: Fornecidas pelo pacote de plugin Unity do EasyAR Sense, geralmente suportando a maioria dos casos de uso comuns e alguns head displays.
- Fontes de quadro externas: Fornecidas por pacotes de extensão do plugin Unity do EasyAR Sense, geralmente para suportar dispositivos head display específicos. Frequentemente, fontes de quadro externas são fornecidas por fabricantes de head display ou desenvolvedores terceiros.
Distinguindo-se das fontes de quadro externas, uma câmera personalizada não é necessariamente fornecida externamente - algumas fontes de quadro integradas também são câmeras personalizadas.
Fontes de quadro podem fornecer diferentes graus de liberdade de dados de movimento: 0DoF, 3DoF, 5DoF e 6DoF, e a mesma fonte pode fornecer diferentes graus dependendo do estado operacional.
A tabela abaixo lista as fontes de quadro fornecidas pelo EasyAR:
| Nome | Integrada | Câmera personalizada | Dados de movimento | Descrição |
|---|---|---|---|---|
| CameraDeviceFrameSource | Sim | Não | Nenhum (0DoF) | Câmera comum, suporta front/rear e PC |
| EditorCameraDeviceFrameSource | Sim | Não | Nenhum (0DoF) | Câmera comum, apenas para uso em editor durante debug |
| FramePlayer | Sim | Não | Determinado por arquivo | Reproduz arquivos EIF para simulação |
| ThreeDofCameraDeviceFrameSource | Sim | Não | 3DoF | Fornece capacidade de rastreamento 3DoF |
| InertialCameraDeviceFrameSource | Sim | Não | 5DoF | Fornece capacidade de navegação inercial |
| MotionTrackerFrameSource | Sim | Não | 6DoF | Fornece rastreamento de movimento implementado pelo EasyAR |
| ARCoreFrameSource | Sim | Não | 6DoF | Fornece rastreamento de movimento do ARCore |
| ARKitFrameSource | Sim | Não | 6DoF | Fornece rastreamento de movimento do ARKit |
| AREngineFrameSource | Sim | Sim | 6DoF | Fornece rastreamento de movimento do AR Engine |
| VisionOSARKitFrameSource | Sim | Sim | 6DoF | Fornece rastreamento de movimento do VisionOS ARKit 1 |
| XREALFrameSource | Sim | Sim | 6DoF | Fornece rastreamento de movimento de dispositivos XREAL 1 |
| ARCoreARFoundationFrameSource | Sim | Sim | 6DoF | Fornece rastreamento de movimento do ARFoundation para ARCore |
| ARKitARFoundationFrameSource | Sim | Sim | 6DoF | Fornece rastreamento de movimento do ARFoundation para ARKit |
| PicoFrameSource | Não | Sim | 6DoF | Fornece rastreamento de movimento de dispositivos Pico 1 |
| RokidFrameSource | Não | Sim | 6DoF | Fornece rastreamento de movimento de dispositivos Rokid 1 |
Seleção de fonte de quadro em tempo de execução
A hierarquia de cena da sessão contém um ou mais componentes de fonte de quadro. Durante a execução da sessão, nem todos os componentes de fonte de quadro são usados.
A captura abaixo mostra uma hierarquia de cena com um único componente de fonte de quadro:
![]()
A captura abaixo mostra uma hierarquia de cena com múltiplos componentes de fonte de quadro:

Cada fonte de dados de frame tem funções diferentes, o que também determina seus cenários de aplicação e dispositivos adequados. Durante a montagem da sessão, um e apenas um desses componentes será selecionado como a fonte de dados de frame da sessão.
A propriedade AssembleOptions.FrameSourceSelection define o método de seleção da fonte de dados de frame quando a sessão é executada:
| Nome | Método |
|---|---|
| Auto (padrão) | Seleção automática, escolhe o primeiro nó filho disponível e ativo na ordem de transform. |
| Manual | Especificação manual. Só pode especificar um nó filho da sessão. |
| FramePlayer | Usa FramePlayer. |
[!DICA] A ordem de transform dos objetos Unity pode ser verificada usando Transform.GetSiblingIndex() ou observando a ordenação dos objetos na visualização Hierarchy, mas é necessário desativar a seguinte opção (desativada por padrão): Edit > Preferences > General > Enable Alphanumeric Sorting.
Durante a montagem da sessão, a fonte de dados de frame é selecionada após as seguintes etapas:
- A sessão percorre seus nós filhos, coletando todos os componentes de fonte de dados de frame ativos, na ordem de transform.
- Filtra a lista de candidatos de acordo com a estratégia de seleção de fonte (AssembleOptions.FrameSource) em AssembleOptions:
- Auto (padrão): Mantém todos os candidatos.
- Manual: Mantém apenas a fonte de dados de frame especificada manualmente.
- FramePlayer: Substitui a lista de candidatos por FramePlayer.
- Filtra novamente a lista de candidatos, removendo os seguintes componentes:
- Componentes desativados por si mesmos.
- Todos os componentes de câmera personalizada quando a câmera personalizada está desativada (AssembleOptions.EnableCustomCamera é false).
- (Plataforma Android) Se o tempo limite de AssembleOptions.DeviceList for maior que 0 e a lista de candidatos incluir MotionTrackerFrameSource, ARCoreFrameSource ou AREngineFrameSource, tenta baixar as listas de suporte de dispositivo mais recentes correspondentes. Após a atualização do download, a disponibilidade dessas fontes de dados de frame pode mudar. Após a conclusão do download ou o tempo limite, continua com as etapas subsequentes.
- Verifica sequencialmente a disponibilidade dos componentes candidatos restantes na ordem da lista (chamando FrameSource.CheckAvailability() e acessando FrameSource.IsAvailable).
- Seleciona a primeira fonte de dados de frame cujo resultado de verificação seja disponível.
As condições de desativação do próprio componente são definidas internamente pelo componente. Casos comuns incluem:
- Execução em sistemas não suportados, por exemplo, AREngineFrameSource é desativado em sistemas não Android.
- SDK de terceiros necessário não instalado, por exemplo, XREALFrameSource é desativado se o SDK XREAL não estiver instalado.
- Condições de configuração não atendidas, por exemplo, MotionTrackerFrameSource é desativado se o MotionTrackerCameraDeviceQualityLevel do dispositivo for inferior a MotionTrackerFrameSource.DeviceQualityLevel.
Se nenhuma fonte de dados de frame for selecionada no final, a sessão entrará no estado Broken, e o campo BrokenReason no relatório da sessão terá o valor NoAvailabileFrameSource.
[!NOTA] Após a atualização da lista de dispositivos, se a lista de dispositivos mudar, a disponibilidade da fonte de dados de frame também pode mudar. Consulte Suporte do dispositivo e relatório de sessão para entender o comportamento da sessão neste caso.
Próximos passos
- Experimente adicionar um grupo de fontes de quadro em sua cena
Tópicos relacionados
- Suporte a dispositivos e relatório de sessão
- Suporte a head displays do EasyAR
- Criar uma fonte de quadro externa para usar câmera personalizada
-
Suporte a dispositivos pode ser verificado em Suporte a head displays do EasyAR.↩↩↩↩