Table of Contents

Kamera dan sumber data input frame di Unity -- frame source (Frame Source)

Frame source adalah penyedia data kamera dan input frame di Unity. Artikel ini memperkenalkan konsep dasar, tipe, dan metode pemilihan frame source saat runtime.

Sebelum memulai

Apa itu frame source

Frame source (FrameSource) adalah penyedia input frame (InputFrame), yang mengabstraksi kamera serta perangkat dan fungsi lain yang menyediakan data input frame.

Diagram berikut menunjukkan posisi frame source dalam 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

Frame source mungkin hanya menyediakan data untuk digunakan oleh fungsi AR downstream, atau mungkin juga mengimplementasikan beberapa fungsi AR sendiri, seperti motion tracking. Sebagian frame source menyediakan interface kontrol untuk perangkat kamera, memungkinkan pengguna memilih parameter kamera seperti resolution, focus mode, dan sebagainya.

Tipe frame source

Berdasarkan paket Unity yang menyediakan frame source, frame source dapat dibagi menjadi dua kategori:

  • Built-in frame source: frame source yang disediakan oleh paket EasyAR Sense Unity Plugin, biasanya mendukung sebagian besar skenario penggunaan umum dan beberapa headset.
  • External frame source: frame source yang disediakan oleh paket ekstensi EasyAR Sense Unity Plugin, biasanya digunakan untuk mendukung perangkat headset tertentu. Sering kali, external frame source disediakan oleh produsen headset atau developer pihak ketiga.

Berbeda dari external frame source, custom camera tidak selalu disediakan secara eksternal; sebagian built-in frame source juga merupakan custom camera.

Frame source dapat menyediakan data motion dengan degrees of freedom berbeda: 0DoF, 3DoF, 5DoF, dan 6DoF. Frame source yang sama mungkin menyediakan data motion dengan degrees of freedom berbeda pada status kerja berbeda.

Tabel berikut mencantumkan frame source yang disediakan oleh EasyAR:

Nama Built-in Custom camera Data motion Deskripsi
CameraDeviceFrameSource Ya Tidak Tidak ada (0DoF) Kamera biasa, mendukung kamera depan/belakang dan PC
EditorCameraDeviceFrameSource Ya Tidak Tidak ada (0DoF) Kamera biasa, hanya mendukung debugging di editor
FramePlayer Ya Tidak Ditentukan file playback Memutar ulang file EIF untuk simulasi runtime
ThreeDofCameraDeviceFrameSource Ya Tidak 3DoF Menyediakan kemampuan tracking 3DoF
InertialCameraDeviceFrameSource Ya Tidak 5DoF Menyediakan kemampuan inertial navigation
MotionTrackerFrameSource Ya Tidak 6DoF Menyediakan motion tracking yang diimplementasikan EasyAR
ARCoreFrameSource Ya Tidak 6DoF Menyediakan motion tracking dari ARCore
ARKitFrameSource Ya Tidak 6DoF Menyediakan motion tracking dari ARKit
AREngineFrameSource Ya Ya 6DoF Menyediakan motion tracking dari AR Engine
VisionOSARKitFrameSource Ya Ya 6DoF Menyediakan motion tracking dari VisionOS ARKit 1
XREALFrameSource Ya Ya 6DoF Menyediakan motion tracking untuk perangkat XREAL 1
ARCoreARFoundationFrameSource Ya Ya 6DoF Menyediakan motion tracking ARFoundation yang sesuai dengan ARCore
ARKitARFoundationFrameSource Ya Ya 6DoF Menyediakan motion tracking ARFoundation yang sesuai dengan ARKit
PicoFrameSource Tidak Ya 6DoF Menyediakan motion tracking untuk perangkat Pico 1
RokidFrameSource Tidak Ya 6DoF Menyediakan motion tracking untuk perangkat Rokid 1
MetaXRFrameSource Tidak Ya 6DoF Menyediakan motion tracking untuk perangkat Meta XR 1

Pemilihan frame source saat runtime

Scene hierarchy session berisi satu atau beberapa komponen frame source. Saat session berjalan, tidak semua komponen frame source akan digunakan.

Screenshot berikut menunjukkan scene hierarchy yang hanya memiliki satu komponen frame source:

alt text

Screenshot berikut menunjukkan scene hierarchy yang berisi beberapa komponen frame source:

alt text

Setiap frame source memiliki fungsi yang berbeda, dan ini juga menentukan skenario penggunaan serta perangkat yang sesuai. Saat session dirakit, satu dan hanya satu dari komponen ini akan dipilih sebagai frame source untuk session.

Properti AssembleOptions.FrameSourceSelection mendefinisikan cara pemilihan frame source saat session berjalan:

Nama Metode
Auto (default) Memilih otomatis child node pertama yang tersedia dan active berdasarkan urutan transform.
Manual Ditentukan secara manual. Hanya child node dari session yang dapat ditentukan.
FramePlayer Menggunakan FramePlayer.
Kiat

Urutan transform objek Unity dapat diperiksa dengan Transform.GetSiblingIndex(), atau dari urutan objek di tampilan Hierarchy, tetapi opsi berikut harus dimatikan (default-nya mati): Edit > Preferences > General > Enable Alphanumeric Sorting.

Selama perakitan session, frame source dipilih setelah melalui langkah-langkah berikut:

  1. Session menelusuri child node-nya dan mengumpulkan semua komponen frame source yang active sesuai urutan transform.
  2. Daftar kandidat difilter berdasarkan strategi pemilihan source dalam AssembleOptions (AssembleOptions.FrameSource):
    • Auto (default): mempertahankan semua kandidat.
    • Manual: hanya mempertahankan frame source yang ditentukan secara manual.
    • FramePlayer: mengganti daftar kandidat dengan FramePlayer.
  3. Daftar kandidat difilter lagi, menghapus komponen berikut:
  4. (Platform Android) Jika pengaturan timeout AssembleOptions.DeviceList lebih besar dari 0, dan daftar kandidat berisi MotionTrackerFrameSource, ARCoreFrameSource, atau AREngineFrameSource, sistem akan mencoba mengunduh daftar dukungan perangkat terbaru yang sesuai. Setelah pembaruan unduhan, ketersediaan frame source ini dapat berubah. Setelah unduhan selesai atau timeout, langkah berikutnya dilanjutkan.
  5. Periksa ketersediaan komponen kandidat yang tersisa sesuai urutan daftar dengan memanggil FrameSource.CheckAvailability() dan mengakses FrameSource.IsAvailable.
  6. Pilih frame source pertama yang hasil pemeriksaannya tersedia.

Kondisi penonaktifan dari komponen itu sendiri didefinisikan di dalam komponen. Kasus umum meliputi:

Jika pada akhirnya tidak ada frame source yang dipilih, session akan masuk ke status Broken, dan nilai bidang BrokenReason dalam laporan session adalah NoAvailabileFrameSource.

Catatan

Setelah daftar perangkat selesai diperbarui, jika daftar perangkat berubah, ketersediaan frame source juga dapat berubah. Anda dapat merujuk ke dukungan perangkat dan laporan session untuk memahami perilaku session saat itu.

Langkah berikutnya

Topik terkait


  1. Untuk dukungan perangkat, lihat dukungan headset EasyAR.