Pintu masuk Unity AR - AR Session
AR session adalah pintu masuk semua fitur AR. Melalui bagian berikut, Anda akan memahami konsep dasar, komposisi, alur berjalan AR Session, serta hubungannya dengan AR Session milik Unity AR Foundation. Anda juga akan memahami bagaimana alur data EasyAR Sense bekerja di Unity.
Apa itu AR Session
Semua proses AR, seperti pelacakan objek, dijalankan di dalam pustaka native, yaitu EasyAR Sense. session adalah titik masuk utama fitur AR di Unity. Session mengelola proses dan status berjalan sistem AR, termasuk membaca data dari kamera fisik dan sensor, menganalisis dunia nyata, menggerakkan pergerakan kamera virtual dan objek lain dalam scene, serta rendering.
flowchart LR
A((Gambar<br>dan data lainnya))
B[Session]
C([Camera])
O([Origin])
T([Target])
A --> B
B -. transform .-> C
B -. transform .-> O
B -. transform .-> T
[Opsional] Session EasyAR dan session AR Foundation
Session EasyAR adalah komponen inti untuk menggunakan EasyAR di Unity, dan dapat berjalan secara independen dari fitur AR pihak ketiga atau sistem apa pun. Sementara itu, session AR Foundation adalah bagian dari framework Unity XR dan hanya dapat menggunakan fitur yang disediakan oleh plugin Unity XR seperti ARKit atau ARCore.
flowchart TD
A1[EasyAR<br>AR Session]
A2[EasyAR Sense]
A1 --> A2
B1[AR Foundation<br>AR Session]
B2[ARKit Plugin]
B3[ARCore Plugin]
B1 --> B2
B1 --> B3
Saat menggunakan EasyAR, biasanya Anda tidak perlu menginstal dan menggunakan AR Foundation secara bersamaan. Misalnya, pelacakan gambar, pelacakan gerakan, dan sebagainya disediakan secara independen oleh EasyAR Sense.
Dalam beberapa kondisi, EasyAR Sense mungkin perlu digabungkan dengan AR Foundation untuk memanfaatkan fitur dan antarmuka tambahan yang disediakan AR Foundation, seperti deteksi bidang pada sebagian perangkat. Dalam kondisi ini, EasyAR Sense berinteraksi dengan engine Unity melalui antarmuka yang disediakan AR Foundation.
Namun, karena EasyAR menyediakan lebih banyak fitur daripada AR sistem dan adaptasi perangkat yang lebih lengkap, penggunaan AR Foundation secara mandiri biasanya tidak dapat mencapai efek yang sama dengan EasyAR.
Komposisi session
Sebuah session tipikal terutama terdiri dari bagian berikut:
- frame source: komponen yang menyediakan gambar kamera fisik dan data sensor. Terkadang komponen ini juga menyediakan data pelacakan gerakan, seperti CameraDeviceFrameSource dan MotionTrackerFrameSource
- frame filter(s): komponen yang menyediakan fitur AR tertentu, seperti ImageTrackerFrameFilter
- camera: objek kamera virtual dalam scene
- origin: objek titik asal pelacakan gerakan
Catatan
Dalam konsep AR Foundation, pelacakan gerakan dianggap sebagai fitur wajib, sehingga selalu menyediakan sebuah origin.
Dalam sistem EasyAR, pelacakan gerakan adalah fitur opsional, sehingga origin juga opsional.
[Opsional] Alur data session
Alur data adalah salah satu konsep inti EasyAR Sense. Ini tidak memengaruhi pengembangan aplikasi AR Anda di Unity. Jika ingin memahami prinsip kerja session secara lebih mendalam, Anda dapat membaca bagian ini.
Di Unity, sebuah session biasanya merepresentasikan sebuah alur data EasyAR Sense.
flowchart LR
S[Frame Source]
R[Input Frame Recorder<br>Video Input Frame Recorder]
ift[iFrameThrottler]
iff[iFrameFork]
i2f[i2FAdapter]
fb[fbFrameFork]
i2o[i2OAdapter]
FOT[Object Tracker]
FIT[Image Tracker]
FMT[Mega Tracker]
FSSM[Sparse Spatial Map]
FST[Surface Tracker]
FDS[Dense Spatial Map]
FCR[Cloud Recognizer]
ofj[oFrameJoin]
off[oFrameFork]
ofb[oFrameBuffer]
O(( ))
ODS(( ))
OCR(( ))
S ==> R ==> ift ==> iff
iff --> i2f
i2f --> fb
fb -.-> FOT -.-> ofj
fb -.-> FIT -.-> ofj
iff ==> i2o ==> ofj ==> off ==> ofb ==> O
iff -.-> FMT -.-> ofj
iff -.-> FSSM -.-> ofj
iff -.-> FST -.-> ofj
iff -.-> FDS -.-> ODS
iff -.-> FCR -.-> OCR
off --> i2f
ofb --> ift
Alur data ini dibuat selama proses start session. Selain jalur data yang ditebalkan pada gambar, apakah bagian lain terhubung bergantung pada komponen AR yang diaktifkan selama proses start.
Karena itu, dengan mengubah komponen yang diaktifkan dalam session, struktur dan fungsi alur data dapat diubah secara fleksibel, dan beberapa fitur AR juga dapat diaktifkan secara bersamaan dengan mudah. Metode ini akan dijelaskan secara rinci pada paragraf berikutnya.
Alur session
flowchart LR
i[Inisialisasi<br>Initialize]
a[Perakitan<br>Assemble]
starta["Mulai (sudah dirakit)<br>StartSession(Assembled)"]
start[Mulai<br>StartSession]
update((Pembaruan<br>update))
stop[Berhenti<br>StopSession]
di[Deinisialisasi<br>Deinitialize]
i --> a --> starta --> update --> stop --> di
i --> start --> update
Inisialisasi
Inisialisasi adalah proses menggunakan license key untuk memulai EasyAR Sense. Sebelum inisialisasi, hanya sangat sedikit antarmuka EasyAR Sense yang dapat digunakan. Setelah inisialisasi, fitur AR baru akan diaktifkan.Perakitan (Assembling)
Proses perakitan memilih komponen yang sesuai dari scene berdasarkan konfigurasi opsi perakitan, lalu menghubungkannya menjadi satu unit kerja utuh. Proses ini biasanya dilakukan otomatis saat start, tetapi juga dapat dipanggil secara manual sebelum start melalui antarmuka perakitan. Setelah perakitan selesai, Anda dapat memulai session yang telah dirakit untuk melewati proses perakitan, sehingga mempercepat start.
Proses perakitan juga memiliki kegunaan penting lain, yaitu menentukan ketersediaan komponen AR dan sumber input, lalu memilih sumber input paling sesuai dari semua kandidat. Langkah ini juga dapat digunakan untuk menentukan apakah session saat ini dapat berjalan pada perangkat saat ini.Proses perakitan dibagi menjadi dua tahap
- Tahap pertama akan memulai pembaruan daftar dukungan perangkat dan mulai merakit setelah menunggu waktu tetap sesuai konfigurasi. Jika setelah penantian tahap pertama daftar dukungan perangkat telah selesai diperbarui, proses perakitan berakhir;
- Jika tidak, proses perakitan masuk ke tahap kedua, yang dijalankan setelah daftar dukungan perangkat selesai diperbarui. Pada tahap ini, jika frame source yang tersedia berubah dari tidak ada pada tahap pertama menjadi ada, dan session gagal start setelah tahap pertama, session akan mencoba start ulang.
Terlepas dari apakah daftar perangkat selesai diperbarui pada tahap pertama, session akan melanjutkan langkah berikutnya setelah tahap pertama selesai.
Start
Start adalah proses memulai fitur AR berjalan. Sebelum start, komponen fitur AR tidak akan memproses data apa pun. Setelah start normal, session akan mulai mengontrol pergerakan sebagian objek dalam scene, dan saat menggunakan sebagian sumber input, session juga mengontrol rendering gambar kamera fisik.Update
Proses update dijalankan pada setiap frame dalam loop rendering Unity. Proses update akan memodifikasi transform kamera virtual (untuk sebagian sumber input), origin, dan target pelacakan pada setiap frame berdasarkan hasil berjalan fitur AR yang sedang digunakan. Waktu eksekusi proses update pada perangkat berbeda tidak selalu sama, tetapi pasti dijalankan sebelum rendering.Stop
Stop akan menghentikan fitur AR berjalan. Objek dalam scene tidak lagi dikontrol oleh session, dan data dari sumber input tidak akan diproses.Deinisisialisasi
Deinisisialisasi akan melepaskan sebagian resource global, tetapi tidak membongkar pustaka dinamis. Setelah deinisisialisasi, komponen fitur AR tidak dapat digunakan.
Catatan
Semua fitur AR hanya dapat digunakan setelah ARSession.StartSession.
Siklus hidup default session
flowchart LR
uload("BeforeSceneLoad")
ustart("MonoBehaviour.Start")
udestroy("MonoBehaviour.OnDestroy")
oi{Initialize<br>OnStartup}
ostart{AutoStart}
i[Inisialisasi<br>Initialize]
start[Mulai<br>StartSession]
update((Pembaruan<br>update))
stop[Berhenti<br>StopSession]
uload -.-> ustart -.-> udestroy
uload --> oi -. true .-> i
ustart --> ostart -. true .-> start
udestroy --> stop
i --> start --> update --> stop
Siklus hidup session umumnya ditentukan oleh waktu pemanggilan antarmuka. Dengan pengaturan default, session akan otomatis dijalankan pada waktu berikut:
Inisialisasi (EasyARSettings.InitializeOnStartup ==
true)
Inisialisasi otomatis dijalankan pada waktu BeforeSceneLoad Unity.Start (ARSession.AutoStart ==
true)
Start otomatis dijalankan pada waktu MonoBehaviour.Start() milik session.Stop
Stop otomatis dijalankan pada waktu MonoBehaviour.OnDestroy() milik session.
Status session
ARSession.State menjelaskan status session. Sebuah session memiliki beberapa status berikut:
| Status | Deskripsi |
|---|---|
| None | Status awal, session belum dimulai atau dirakit |
| Broken | session rusak karena kegagalan perakitan atau alasan lain |
| Assembling | Sedang dalam proses perakitan, yang biasanya dapat berlangsung beberapa frame |
| Assembled | Perakitan berhasil selesai, tetapi belum start |
| Ready | session berhasil start, status ini hanya berlangsung satu frame |
| Running | session sedang berjalan |
| Paused | session dijeda |
Biasanya status session berubah saat antarmuka seperti start dan stop dipanggil. Selama berjalan, jika terjadi kesalahan serius, session juga dapat masuk ke status Broken. Session yang masuk ke status Broken tidak dapat dipulihkan untuk berjalan, dan harus dihentikan lalu di-start ulang.
Anda dapat memahami apakah session saat ini dalam status tersedia melalui status session. Sebagian besar fitur hanya dapat digunakan saat status Ready atau Running.
Status pelacakan gerakan
ARSession.TrackingStatus menjelaskan status pelacakan gerakan session. Ini menunjukkan kualitas pelacakan gerakan perangkat, dengan beberapa status berikut:
| Status | Deskripsi |
|---|---|
| Optional<MotionTrackingStatus>.Empty | Fungsi pelacakan gerakan belum diaktifkan atau session belum berjalan |
| NotTracking | Hasil pelacakan gerakan tidak tersedia; alasannya mungkin sedang inisialisasi, pelacakan hilang, atau sedang relokalisasi |
| Limited | Pelacakan gerakan valid, tetapi hasilnya kurang baik; alasannya mungkin tekstur area saat ini terlalu lemah atau gerakan terlalu cepat |
| Tracking | Kualitas pelacakan gerakan baik |
Catatan
Dalam konsep AR Foundation, pelacakan gerakan dianggap sebagai fitur wajib, sehingga status pelacakannya digabungkan dengan status session.
Dalam sistem EasyAR, pelacakan gerakan adalah fitur opsional, sehingga status pelacakan berdiri sendiri dan mungkin kosong.
Di mana status pelacakan fitur AR lainnya
Karena fitur AR dapat melacak beberapa objek sekaligus, status pelacakan gambar dan status pelacakan fitur AR lainnya tidak berada dalam session, melainkan dalam komponen target pelacakan.
Anda dapat menggunakan TargetController.IsTracked untuk mengetahui apakah target pelacakan sedang berada dalam status terlacak, atau menggunakan event TargetController.TargetFound dan TargetController.TargetLost untuk menyesuaikan logika konten aplikasi saat status pelacakan berubah.
Langkah berikutnya
- Menggunakan session dalam aplikasi
- Eksperimen cepat
- Komponen dasar lainnya
- Prinsip kerja session lainnya
- Unity XR dan AR Foundation
- Prinsip dasar Sense
Buat
- Coba membuat session dalam scene
Kontrol berjalan
- Pahami metode dan fungsi inisialisasi
- Pahami cara menentukan ketersediaan dan dukungan perangkat
- Pahami metode mengontrol eksekusi session
Akses komponen dan hasil
- Coba mengakses komponen fitur AR
- Pahami cara memperoleh hasil berjalan session
Referensi komponen
- Referensi komponen ARSession