Table of Contents

Sumber data frame kamera dan input di Unity —— Sumber frame (Frame Source)

Sumber frame adalah penyedia data frame input di Unity. Artikel ini memperkenalkan konsep dasar, jenis, dan metode pemilihan saat runtime untuk sumber frame.

Sebelum memulai

Apa itu sumber frame

Sumber frame (FrameSource) adalah penyedia frame input (InputFrame), yang mengabstraksikan kamera dan perangkat atau fungsi lain yang menyediakan data frame input.

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

Sumber frame mungkin hanya menyediakan data untuk fungsi AR hilir, atau mungkin mengimplementasikan beberapa fungsi AR itu sendiri, seperti pelacakan gerakan. Beberapa sumber frame menyediakan antarmuka kontrol untuk perangkat kamera, memungkinkan pengguna memilih parameter kamera seperti resolusi, mode fokus, dll.

Jenis sumber frame

Dibedakan berdasarkan paket Unity yang menyediakannya, sumber frame dapat dibagi menjadi dua kategori utama:

  • Sumber frame bawaan: Disediakan oleh paket plugin EasyAR Sense Unity, biasanya mendukung sebagian besar skenario penggunaan umum dan beberapa headset.
  • Sumber frame eksternal: Disediakan oleh paket ekstensi plugin EasyAR Sense Unity, biasanya digunakan untuk mendukung perangkat headset tertentu. Seringkali, sumber frame eksternal disediakan oleh produsen headset atau pengembang pihak ketiga.

Berbeda dengan sumber frame eksternal, kamera kustom tidak selalu disediakan secara eksternal; beberapa sumber frame bawaan juga termasuk kamera kustom.

Sumber frame dapat menyediakan data gerakan dengan derajat kebebasan berbeda: 0DoF, 3DoF, 5DoF, dan 6DoF. Sumber frame yang sama mungkin menyediakan data gerakan dengan derajat kebebasan berbeda dalam status kerja berbeda.

Tabel berikut mencantumkan sumber frame yang disediakan oleh EasyAR:

Nama Bawaan Kamera kustom Data gerakan Deskripsi
CameraDeviceFrameSource Ya Tidak Tidak (0DoF) Kamera biasa, mendukung depan/belakang dan PC
EditorCameraDeviceFrameSource Ya Tidak Tidak (0DoF) Kamera biasa, hanya untuk debugging di editor
FramePlayer Ya Tidak Tergantung file Memutar file EIF, simulasi runtime
ThreeDofCameraDeviceFrameSource Ya Tidak 3DoF Menyediakan kemampuan pelacakan 3DoF
InertialCameraDeviceFrameSource Ya Tidak 5DoF Menyediakan navigasi inersia
MotionTrackerFrameSource Ya Tidak 6DoF Menyediakan pelacakan gerakan yang diimplementasikan EasyAR
ARCoreFrameSource Ya Tidak 6DoF Menyediakan pelacakan gerakan ARCore
ARKitFrameSource Ya Tidak 6DoF Menyediakan pelacakan gerakan ARKit
AREngineFrameSource Ya Ya 6DoF Menyediakan pelacakan gerakan AR Engine
VisionOSARKitFrameSource Ya Ya 6DoF Menyediakan pelacakan gerakan VisionOS ARKit 1
XREALFrameSource Ya Ya 6DoF Menyediakan pelacakan gerakan perangkat XREAL 1
ARCoreARFoundationFrameSource Ya Ya 6DoF Menyediakan pelacakan gerakan ARFoundation untuk ARCore
ARKitARFoundationFrameSource Ya Ya 6DoF Menyediakan pelacakan gerakan ARFoundation untuk ARKit
PicoFrameSource Tidak Ya 6DoF Menyediakan pelacakan gerakan perangkat Pico 1
RokidFrameSource Tidak Ya 6DoF Menyediakan pelacakan gerakan perangkat Rokid 1

Pemilihan sumber frame saat runtime

Struktur hierarki scene session berisi satu atau lebih komponen sumber frame. Saat session berjalan, tidak semua komponen sumber frame akan digunakan.

Cuplikan layar berikut menunjukkan struktur hierarki scene dengan satu komponen sumber frame:

alt text

Cuplikan layar berikut menunjukkan struktur hierarki scene dengan beberapa komponen sumber frame:

alt text

Setiap sumber data frame memiliki fungsi yang berbeda, yang sekaligus menentukan skenario penggunaan dan perangkat yang sesuai. Saat perakitan sesi, satu dan hanya satu dari komponen ini akan dipilih sebagai sumber data frame untuk sesi tersebut.

Properti AssembleOptions.FrameSourceSelection mendefinisikan metode pemilihan sumber data frame saat sesi berjalan:

Nama Metode
Auto (default) Pilih secara otomatis, memilih node anak pertama yang tersedia dan aktif sesuai urutan transform.
Manual Tentukan secara manual. Hanya dapat menentukan node anak sesi.
FramePlayer Gunakan FramePlayer.
Kiat

Urutan transform objek Unity dapat dinilai menggunakan Transform.GetSiblingIndex(), atau dilihat dari urutan objek di tampilan Hierarchy, tetapi opsi berikut harus dinonaktifkan (secara default dinonaktifkan): Edit > Preferences > General > Enable Alphanumeric Sorting.

Selama proses perakitan sesi, sumber data frame dipilih setelah melalui langkah-langkah berikut:

  1. Sesi melakukan iterasi melalui node anaknya, mengumpulkan semua komponen sumber data frame yang aktif sesuai urutan transform.
  2. Menyaring daftar kandidat berdasarkan strategi pemilihan sumber (AssembleOptions.FrameSource) di AssembleOptions:
    • Auto (default): Mempertahankan semua kandidat.
    • Manual: Hanya mempertahankan sumber data frame yang ditentukan secara manual.
    • FramePlayer: Mengganti daftar kandidat dengan FramePlayer.
  3. Menyaring kembali daftar kandidat, menghapus komponen berikut:
    • Komponen yang dinonaktifkan oleh komponen itu sendiri.
    • Semua komponen kamera khusus saat kamera khusus dinonaktifkan (AssembleOptions.EnableCustomCamera bernilai false).
  4. (Platform Android) Jika pengaturan waktu tunggu AssembleOptions.DeviceList lebih besar dari 0, dan daftar kandidat berisi MotionTrackerFrameSource, ARCoreFrameSource, atau AREngineFrameSource, akan mencoba mengunduh daftar dukungan perangkat terbaru yang sesuai. Setelah pembaruan unduhan selesai, ketersediaan sumber data frame ini mungkin berubah. Setelah unduhan selesai atau waktu tunggu habis, lanjutkan ke langkah berikutnya.
  5. Memeriksa ketersediaan komponen kandidat yang tersisa secara berurutan (memanggil FrameSource.CheckAvailability() dan mengakses FrameSource.IsAvailable).
  6. Memilih sumber data frame pertama yang hasil pemeriksaannya tersedia.

Di sini, kondisi penonaktifan komponen itu sendiri didefinisikan secara internal oleh komponen, umumnya dalam situasi berikut:

Jika pada akhirnya tidak ada sumber data frame yang terpilih, sesi akan masuk ke status Broken, dan dalam laporan sesi, nilai bidang BrokenReason adalah NoAvailabileFrameSource.

Catatan

Setelah pembaruan daftar perangkat selesai, jika daftar perangkat berubah, ketersediaan sumber data frame juga mungkin berubah. Silakan merujuk ke dukungan perangkat dan laporan sesi untuk memahami perilaku sesi saat ini.

Langkah selanjutnya

Topik terkait


  1. Dukungan perangkat dapat merujuk ke Dukungan headset EasyAR.