Table of Contents

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

    1. 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;
    2. 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:

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

Buat

Kontrol berjalan

Akses komponen dan hasil

Referensi komponen