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
- Pahami konsep dasar, komposisi, dan workflow AR Session.
- Pahami konsep dasar seperti kamera, input frame.
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:
![]()
Screenshot berikut menunjukkan scene hierarchy yang berisi beberapa komponen frame source:

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:
- Session menelusuri child node-nya dan mengumpulkan semua komponen frame source yang active sesuai urutan transform.
- 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.
- Daftar kandidat difilter lagi, menghapus komponen berikut:
- Komponen yang dinonaktifkan oleh komponen itu sendiri.
- Semua komponen kamera kustom saat kamera kustom dimatikan (AssembleOptions.EnableCustomCamera adalah false).
- (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.
- Periksa ketersediaan komponen kandidat yang tersisa sesuai urutan daftar dengan memanggil FrameSource.CheckAvailability() dan mengakses FrameSource.IsAvailable.
- Pilih frame source pertama yang hasil pemeriksaannya tersedia.
Kondisi penonaktifan dari komponen itu sendiri didefinisikan di dalam komponen. Kasus umum meliputi:
- Berjalan pada sistem yang tidak didukung, misalnya AREngineFrameSource dinonaktifkan pada sistem non-Android.
- SDK pihak ketiga yang diperlukan tidak terpasang, misalnya XREALFrameSource dinonaktifkan saat XREAL SDK tidak terpasang.
- Kondisi konfigurasi tidak terpenuhi, misalnya MotionTrackerFrameSource dinonaktifkan saat MotionTrackerCameraDeviceQualityLevel perangkat lebih rendah daripada MotionTrackerFrameSource.DeviceQualityLevel.
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
- Coba menambahkan sekelompok frame source dalam scene
Topik terkait
- Dukungan perangkat dan session report
- Dukungan headset EasyAR
- Buat external frame source untuk menggunakan custom camera