Table of Contents

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

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:

alt text

A captura abaixo mostra uma hierarquia de cena com múltiplos componentes de fonte de quadro:

alt text

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:

  1. A sessão percorre seus nós filhos, coletando todos os componentes de fonte de dados de frame ativos, na ordem de transform.
  2. 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.
  3. 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).
  4. (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.
  5. Verifica sequencialmente a disponibilidade dos componentes candidatos restantes na ordem da lista (chamando FrameSource.CheckAvailability() e acessando FrameSource.IsAvailable).
  6. 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:

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

Tópicos relacionados


  1. Suporte a dispositivos pode ser verificado em Suporte a head displays do EasyAR.