Table of Contents

Câmeras e fontes de dados input frame no Unity -- frame source (Frame Source)

Frame source é o provedor de dados de câmera e input frame no Unity. Este artigo apresenta os conceitos básicos, tipos e métodos de seleção de frame source em runtime.

Antes de começar

O que é frame source

Frame source (FrameSource) é o provedor de input frame (InputFrame), abstraindo câmeras e outros dispositivos e funções que fornecem dados input frame.

O diagrama abaixo mostra a posição do frame source na session:

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

Um frame source pode apenas fornecer dados para uso por funções AR downstream, ou pode implementar algumas funções AR por si só, como motion tracking. Alguns frame sources fornecem interfaces de controle de dispositivos de câmera, permitindo que usuários selecionem parâmetros de câmera como resolution, focus mode etc.

Tipos de frame source

De acordo com o pacote Unity que fornece o frame source, frame sources podem ser divididos em duas categorias principais:

  • Built-in frame source: frame sources fornecidos pelo pacote EasyAR Sense Unity Plugin, normalmente compatíveis com a maioria dos cenários comuns e alguns headsets.
  • External frame source: frame sources fornecidos por pacotes de extensão EasyAR Sense Unity Plugin, normalmente usados para oferecer suporte a dispositivos headset específicos. Muitas vezes, external frame sources são fornecidos por fabricantes de headsets ou desenvolvedores terceiros.

Diferente de external frame sources, custom camera não é necessariamente fornecida externamente; alguns built-in frame sources também são custom cameras.

Frame source pode fornecer motion data com diferentes degrees of freedom: 0DoF, 3DoF, 5DoF e 6DoF. O mesmo frame source pode fornecer motion data com diferentes degrees of freedom em estados de trabalho diferentes.

A tabela abaixo lista os frame sources fornecidos pelo EasyAR:

Nome Built-in Custom camera Motion data Descrição
CameraDeviceFrameSource Sim Não Nenhum (0DoF) Câmera comum, suporta câmera frontal/traseira e PC
EditorCameraDeviceFrameSource Sim Não Nenhum (0DoF) Câmera comum, suporta apenas debugging no editor
FramePlayer Sim Não Determinado pelo arquivo playback Reproduz arquivos EIF para simular runtime
ThreeDofCameraDeviceFrameSource Sim Não 3DoF Fornece capacidade de tracking 3DoF
InertialCameraDeviceFrameSource Sim Não 5DoF Fornece capacidade de inertial navigation
MotionTrackerFrameSource Sim Não 6DoF Fornece motion tracking implementado pelo EasyAR
ARCoreFrameSource Sim Não 6DoF Fornece motion tracking do ARCore
ARKitFrameSource Sim Não 6DoF Fornece motion tracking do ARKit
AREngineFrameSource Sim Sim 6DoF Fornece motion tracking do AR Engine
VisionOSARKitFrameSource Sim Sim 6DoF Fornece motion tracking do VisionOS ARKit 1
XREALFrameSource Sim Sim 6DoF Fornece motion tracking para dispositivos XREAL 1
ARCoreARFoundationFrameSource Sim Sim 6DoF Fornece motion tracking de ARFoundation correspondente ao ARCore
ARKitARFoundationFrameSource Sim Sim 6DoF Fornece motion tracking de ARFoundation correspondente ao ARKit
PicoFrameSource Não Sim 6DoF Fornece motion tracking para dispositivos Pico 1
RokidFrameSource Não Sim 6DoF Fornece motion tracking para dispositivos Rokid 1

Seleção de frame source em runtime

A scene hierarchy da session contém um ou mais componentes frame source. Durante o runtime da session, nem todos os componentes frame source serão usados.

A screenshot abaixo mostra uma scene hierarchy com apenas um componente frame source:

alt text

A screenshot abaixo mostra uma scene hierarchy contendo vários componentes frame source:

alt text

Cada fonte de frames tem funções diferentes, o que também determina seus cenários de uso e dispositivos aplicáveis. Durante a montagem de session, um e apenas um desses componentes é selecionado como fonte de frames da session.

A propriedade AssembleOptions.FrameSourceSelection define como a fonte de frames é selecionada quando session é executada:

Nome Método
Auto (padrão) Seleciona automaticamente o primeiro nó filho disponível e active na ordem de transform.
Manual Especificação manual. Só é possível especificar um nó filho da session.
FramePlayer Usa FramePlayer.
Dica

A ordem de transform dos objetos Unity pode ser verificada com Transform.GetSiblingIndex(), ou pela ordem dos objetos na visualização Hierarchy, mas a opção a seguir precisa estar desativada (por padrão, ela fica desativada): Edit > Preferences > General > Enable Alphanumeric Sorting.

Durante a montagem de session, a fonte de frames é selecionada após as etapas a seguir:

  1. Session percorre seus nós filhos e coleta todos os componentes de fonte de frames active na ordem de transform.
  2. A lista de candidatos é filtrada de acordo com a estratégia de seleção de fonte em AssembleOptions (AssembleOptions.FrameSource):
    • Auto (padrão): mantém todos os candidatos.
    • Manual: mantém apenas a fonte de frames especificada manualmente.
    • FramePlayer: substitui a lista de candidatos por FramePlayer.
  3. A lista de candidatos é filtrada novamente, removendo os seguintes componentes:
    • Componentes desativados pelos próprios componentes.
    • Todos os componentes de câmera personalizada quando a câmera personalizada está desativada (AssembleOptions.EnableCustomCamera é false).
  4. (Plataforma Android) Se a configuração de timeout de AssembleOptions.DeviceList for maior que 0, e a lista de candidatos contiver MotionTrackerFrameSource, ARCoreFrameSource ou AREngineFrameSource, será feita uma tentativa de baixar a lista correspondente mais recente de dispositivos compatíveis. Após a atualização baixada, a disponibilidade dessas fontes de frames pode mudar. Quando o download for concluído ou expirar, as etapas seguintes continuam.
  5. Verifique a disponibilidade dos componentes candidatos restantes na ordem da lista chamando FrameSource.CheckAvailability() e acessando FrameSource.IsAvailable.
  6. Selecione a primeira fonte de frames cujo resultado de verificação esteja disponível.

As condições de desativação do próprio componente são definidas dentro do componente. Casos comuns incluem:

Se nenhuma fonte de frames for selecionada ao final, session entrará no estado Broken, e o valor do campo BrokenReason no relatório de session será NoAvailabileFrameSource.

Nota

Depois que a lista de dispositivos for atualizada, se a lista de dispositivos mudar, a disponibilidade da fonte de frames também poderá mudar. Consulte suporte a dispositivos e relatório de session para entender o comportamento de session nesse caso.

Próximas etapas

Tópicos relacionados


  1. Para suporte de dispositivos, consulte suporte a headsets do EasyAR.