Table of Contents

Pintu masuk untuk Unity AR —— AR Session

Sesi AR (session) adalah pintu masuk untuk semua fungsi AR. Melalui konten berikut, Anda akan memahami konsep dasar, komponen, alur eksekusi dari AR Session serta hubungannya dengan AR Session dari Unity AR Foundation. Anda juga akan mempelajari bagaimana aliran data EasyAR Sense benar-benar bekerja di Unity.

Apa itu ar session

Semua proses ar (seperti pelacakan objek) dieksekusi di pustaka asli, yaitu di dalam EasyAR Sense. Session adalah pintu masuk utama untuk fungsi ar di Unity. Ia mengelola proses operasi dan status sistem ar, termasuk membaca data dari kamera fisik dan sensor, menganalisis dunia nyata, menggerakkan pergerakan dan rendering bagian lain seperti kamera virtual di scene, dan lain-lain.

flowchart LR
  A((图像<br>和其它数据))
  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 saat menggunakan easyar di unity, yang dapat berjalan secara independen dari fungsi ar pihak ketiga atau sistem apa pun. Sedangkan session ar foundation adalah bagian dari kerangka kerja unity xr, yang hanya dapat menggunakan fungsionalitas 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 tidak perlu menginstal dan menggunakan ar foundation secara bersamaan. Misalnya, pelacakan gambar, pelacakan gerakan, dan sebagainya, semuanya disediakan secara independen oleh easyar sense.

Dalam beberapa kasus, mungkin perlu menggabungkan easyar sense dengan ar foundation untuk memanfaatkan fungsionalitas tambahan (seperti deteksi bidang pada perangkat tertentu) dan antarmuka yang disediakan oleh ar foundation. Dalam situasi ini, easyar sense berinteraksi dengan mesin unity melalui antarmuka yang disediakan oleh ar foundation.

Namun, karena easyar menyediakan lebih banyak fitur dan adaptasi perangkat yang lebih lengkap dibandingkan ar sistem, penggunaan ar foundation secara independen biasanya tidak dapat mencapai hasil yang sama dengan easyar.

Komponen session

Sebuah session yang umumnya terdiri dari komponen-komponen berikut:

  • frame source: Komponen yang menyediakan gambar kamera fisik dan data sensor, terkadang komponen ini juga menyediakan data pelacakan gerak. Contohnya CameraDeviceFrameSource dan MotionTrackerFrameSource
  • frame filter(s): Komponen yang menyediakan fungsi AR spesifik, contohnya ImageTrackerFrameFilter
  • camera: Objek kamera virtual dalam adegan
  • origin: Objek titik asal pelacakan gerak
Catatan

Dalam konsep AR Foundation, pelacakan gerak dianggap sebagai fungsi wajib sehingga selalu menyediakan origin.
Sedangkan dalam sistem EasyAR, pelacakan gerak adalah fungsi opsional, sehingga origin juga opsional.

[Opsional] aliran data session

Aliran data adalah salah satu konsep inti EasyAR Sense. Ini tidak memengaruhi pengembangan aplikasi AR Anda di Unity. Jika Anda ingin memahami lebih dalam cara kerja session, Anda dapat membaca bagian ini.

Di Unity, sebuah session biasanya merepresentasikan aliran data EasyAR Sense.

flowchart LR
  S[Sumber Frame]
  R[Perekam Frame Input<br>Perekam Frame Input Video]
  ift[iFrameThrottler]
  iff[iFrameFork]
  i2f[i2FAdapter]
  fb[fbFrameFork]  
  i2o[i2OAdapter]

  FOT[Pelacak Objek]
  FIT[Pelacak Gambar]
  FMT[Mega Tracker]
  FSSM[Peta Spasial Sparse]
  FST[Pelacak Permukaan]
  FDS[Peta Spasial Padat]
  FCR[Pengenal Cloud]
  
  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

Aliran data ini dibuat selama proses inisialisasi session. Kecuali jalur data yang ditebalkan, koneksi komponen lain bergantung pada komponen AR yang diaktifkan selama inisialisasi.

Dengan memodifikasi komponen yang diaktifkan dalam session, Anda dapat secara fleksibel mengubah struktur dan fungsi aliran data, serta dengan mudah mengaktifkan beberapa fungsi AR sekaligus. Metode ini akan dijelaskan secara rinci dalam paragraf berikutnya.

Sesi alur kerja

flowchart LR
  i[Inisialisasi<br>Initialize]
  a[Perakitan<br>Assemble]
  starta["Mulai (terakit)<br>StartSession(Assembled)"]
  start[Mulai<br>StartSession]
  update((Pembaruan<br>update))
  stop[Hentikan<br>StopSession]
  di[Deinisialisasi<br>Deinitialize]

  i --> a --> starta --> update --> stop --> di
  i --> start --> update

  • Inisialisasi
    Inisialisasi adalah proses memulai EasyAR Sense menggunakan kunci lisensi. Sebelum inisialisasi, hanya sedikit antarmuka EasyAR Sense yang dapat digunakan. Setelah inisialisasi, fungsi AR baru akan diaktifkan.

  • Perakitan (Assembling)
    Proses perakitan akan memilih komponen yang sesuai dari adegan berdasarkan konfigurasi opsi perakitan dan menghubungkannya menjadi satu unit kerja utuh. Proses ini biasanya dilakukan secara otomatis saat memulai, tetapi juga dapat dipanggil secara manual melalui antarmuka perakitan sebelum memulai. Setelah perakitan selesai, sesi yang sudah terakit dapat dimulai untuk melewati proses perakitan, sehingga mempercepat waktu mulai.
    Proses perakitan juga memiliki tujuan penting untuk menilai ketersediaan komponen AR dan sumber input, serta memilih sumber input yang paling sesuai dari semua kandidat. Langkah ini juga dapat digunakan untuk menentukan apakah sesi saat ini dapat berjalan di perangkat saat ini.

    Proses perakitan terbagi menjadi dua tahap:

    1. Tahap pertama akan memulai pembaruan daftar dukungan perangkat dan mulai merakit setelah menunggu waktu tetap sesuai konfigurasi. Jika daftar dukungan perangkat telah selesai diperbarui setelah penantian tahap pertama, maka proses perakitan selesai;
    2. Jika tidak, proses perakitan akan memasuki tahap kedua yang dieksekusi setelah pembaruan daftar dukungan perangkat selesai. Pada tahap ini, jika sumber frame yang tersedia berubah dari tidak tersedia (seperti pada tahap pertama) menjadi tersedia, dan sesi gagal dimulai setelah tahap pertama, maka sesi akan mencoba memulai ulang.

    Terlepas dari apakah daftar perangkat telah diperbarui pada tahap pertama, sesi akan melanjutkan langkah selanjutnya setelah tahap pertama selesai.

  • Memulai
    Memulai adalah proses menjalankan fungsi AR. Sebelum memulai, komponen fungsi AR tidak akan memproses data apa pun. Setelah berhasil dimulai, sesi akan mulai mengontrol pergerakan beberapa objek di adegan dan mengontrol render gambar kamera fisik saat menggunakan beberapa sumber input.

  • Pembaruan
    Proses pembaruan dieksekusi setiap frame dalam siklus render Unity. Proses pembaruan akan memodifikasi transform kamera virtual (untuk beberapa sumber input), titik asal, dan target pelacakan setiap frame berdasarkan hasil operasi fungsi AR saat ini. Waktu eksekusi proses pembaruan tidak sama di semua perangkat, tetapi pasti dieksekusi sebelum rendering.

  • Menghentikan
    Menghentikan akan mengakhiri operasi fungsi AR. Objek di adegan tidak akan lagi dikendalikan oleh sesi, dan data sumber input tidak akan diproses.

  • Deinisialisasi
    Deinisialisasi akan melepaskan beberapa sumber daya global (tidak membongkar pustaka dinamis). Setelah deinisialisasi, komponen fungsi AR tidak dapat digunakan.

Catatan

Semua fungsi 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[Memulai<br>StartSession]
  update((Memperbarui<br>update))
  stop[Menghentikan<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 dieksekusi secara otomatis pada titik waktu berikut:

Status sesi

ARSession.State menjelaskan status sesi. Sebuah sesi memiliki beberapa status berikut:

Status Deskripsi
None Status awal, sesi belum dimulai atau dirakit
Broken Sesi rusak karena perakitan gagal atau alasan lain
Assembling Dalam proses perakitan, proses perakitan biasanya dapat berlangsung beberapa frame
Assembled Perakitan berhasil diselesaikan, tetapi belum dimulai
Ready Sesi berhasil dimulai, status ini hanya akan bertahan satu frame
Running Sesi sedang berjalan
Paused Sesi dijeda

Biasanya status sesi akan berubah saat memanggil antarmuka seperti memulai dan menghentikan. Selama berjalan, jika terjadi kesalahan serius, sesi juga dapat memasuki status Broken. Sesi yang memasuki status Broken tidak dapat melanjutkan operasi, harus memanggil perintah berhenti lalu memulai ulang.

Status sesi dapat digunakan untuk memahami apakah sesi saat ini dalam kondisi siap pakai. Sebagian besar fungsi hanya dapat digunakan saat status Ready atau Running.

Status pelacakan gerak

ARSession.TrackingStatus mendeskripsikan status pelacakan gerak sesi, menunjukkan kualitas pelacakan gerak perangkat. Statusnya meliputi:

Status Deskripsi
Optional<MotionTrackingStatus>.Empty Fungsi pelacakan gerak tidak diaktifkan atau sesi tidak berjalan
NotTracking Hasil pelacakan gerak tidak tersedia, mungkin karena sedang inisialisasi, kehilangan pelacakan, atau sedang relokasi
Limited Pelacakan gerak valid tetapi hasil kurang baik, mungkin karena tekstur area saat ini terlalu lemah atau gerakan terlalu cepat
Tracking Kualitas pelacakan gerak baik
Catatan

Dalam konsep AR Foundation, pelacakan gerak dianggap sebagai fungsi wajib, sehingga status pelacakannya digabungkan dengan status sesi.
Sedangkan dalam sistem EasyAR, pelacakan gerak adalah fungsi opsional, sehingga status pelacakannya berdiri sendiri dan mungkin kosong.

Status pelacakan fungsi AR lainnya di mana

Karena fungsi AR dapat melacak sejumlah objek secara bersamaan, status pelacakan gambar dan fungsi AR lainnya tidak berada dalam sesi, melainkan dalam komponen target pelacakan.

Dapat menggunakan TargetController.IsTracked untuk mengetahui apakah target pelacakan sedang dalam status terlacak, atau menggunakan peristiwa TargetController.TargetFound dan TargetController.TargetLost untuk menyesuaikan logika konten aplikasi saat status pelacakan berubah.

Langkah selanjutnya

Membuat

Mengontrol eksekusi

Mengakses komponen dan hasil

Referensi komponen