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
- Entenda os conceitos básicos, composição e workflow de AR Session.
- Entenda conceitos básicos como câmera, input frame.
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:
![]()
A screenshot abaixo mostra uma scene hierarchy contendo vários componentes frame source:

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:
- Session percorre seus nós filhos e coleta todos os componentes de fonte de frames active na ordem de transform.
- 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.
- 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).
- (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.
- Verifique a disponibilidade dos componentes candidatos restantes na ordem da lista chamando FrameSource.CheckAvailability() e acessando FrameSource.IsAvailable.
- 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:
- Execução em um sistema não compatível, por exemplo AREngineFrameSource é desativado em sistemas que não são Android.
- Um SDK de terceiros necessário não está instalado, por exemplo XREALFrameSource é desativado quando XREAL SDK não está instalado.
- As condições configuradas não são atendidas, por exemplo MotionTrackerFrameSource é desativado quando MotionTrackerCameraDeviceQualityLevel do dispositivo é menor que MotionTrackerFrameSource.DeviceQualityLevel.
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
- Tente adicionar um grupo de frame sources na scene
Tópicos relacionados
- Suporte de dispositivos e session report
- Suporte a headsets do EasyAR
- Crie um external frame source para usar custom camera
-
Para suporte de dispositivos, consulte suporte a headsets do EasyAR.↩↩↩↩