Kamera Unity di scene AR
Pengalaman AR Unity bergantung pada kamera. Artikel ini menjelaskan peran kamera di scene AR dan bagaimana session mengontrol properti kamera agar pengalaman AR berjalan dengan benar.
Sebelum mulai
- Pelajari konsep dasar, komponen, dan alur kerja session dari Pengantar ARSession.
Peran kamera di scene AR
Di Unity, kamera digunakan untuk menampilkan dunia game kepada player, tetapi di scene AR perannya jauh lebih penting. Kamera tidak hanya merender konten virtual, tetapi juga harus selaras dengan dunia nyata agar objek virtual terlapisi dengan benar pada scene nyata.
Video ini menunjukkan sebuah scene AR sederhana. Sisi kiri adalah tampilan
Scenedan sisi kanan adalah tampilanGame. Video direkam di modePlayUnity Editor menggunakan data simulation. Konten di tampilanGamesama dengan yang dilihat pengguna di ponsel di dunia nyata.Pada video ini, kamera yang mewakili pengguna (ikon kamera) bergerak sesuai pergerakan pengguna di dunia nyata. Kerucut putih menunjukkan posisi dan orientasi kamera selama periode sebelumnya. Di tampilan
Game, kamera tidak hanya menampilkan konten virtual dari tampilanScene, tetapi juga melapisi gambar dunia nyata di bagian bawah konten virtual. Inilah perilaku kamera yang umum di scene AR.
Untuk memastikan objek virtual terlapisi dengan benar pada scene nyata, beberapa properti kamera perlu disesuaikan sesuai status runtime AR. Properti tersebut meliputi:
- transform kamera (posisi dan orientasi)
- field of view (FOV), aspect ratio, dan projection matrix kamera
- pengaturan culling kamera (
<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>)
Peringatan
Saat mengembangkan aplikasi, memodifikasi properti kamera pada session camera tidak didukung, karena dapat menyebabkan konten virtual tidak selaras dengan dunia nyata dan memengaruhi pengalaman pengguna. Bahkan jika properti ini diubah dengan cara tertentu, sistem AR akan menimpa perubahan tersebut saat runtime, atau perilaku yang tidak terduga dapat terjadi karena data yang dirender dan data yang dihitung tidak konsisten.
Bergantung pada objek yang mengontrol properti ini, kamera yang digunakan session dapat dibagi menjadi dua jenis: kamera yang dikontrol session dan kamera yang tidak dikontrol session.
Kamera yang dikontrol session
Jika session camera tidak berasal dari sistem eksternal apa pun, seperti headset atau AR Foundation, session akan secara otomatis mengontrol properti kamera di atas agar kamera selaras dengan dunia nyata dengan benar.
transform
Transform kamera (posisi dan orientasi) disesuaikan oleh session sesuai status runtime fitur AR. Secara umum, session memperbarui posisi dan orientasi kamera berdasarkan data motion tracking dan/atau data tracking target untuk memastikan konten yang dilihat pengguna sesuai dengan dunia nyata.
Di Unity, titik referensi pusat untuk semua tracking AR disebut session origin, dan aturan yang menentukan origin ini selama runtime session disebut center mode. Perilaku transform kamera berbeda pada center mode yang berbeda:
Pada center mode
<xref:u:easyar.ARSession.ARCenterMode.Camera>, kamera dapat bergerak bebas.Secara umum, mode
<xref:u:easyar.ARSession.ARCenterMode.Camera>jarang digunakan oleh aplikasi.Pada center mode lain, seperti
<xref:u:easyar.ARSession.ARCenterMode.FirstTarget>, kamera tidak dapat bergerak bebas.<xref:u:easyar.ARSession.ARCenterMode.FirstTarget>adalah mode yang digunakan oleh sebagian besar aplikasi AR.
Peringatan
Nilai scale dari transform kamera harus selalu tetap (1, 1, 1). Memodifikasi scale kamera dapat menyebabkan perilaku yang tidak terduga.
Projection matrix
Projection matrix kamera diperbarui setiap frame oleh session sesuai intrinsics kamera fisik untuk memastikan konten virtual terlapisi dengan benar pada scene nyata.
Pengaturan culling
Pengaturan culling kamera (<xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType>) disesuaikan sesuai pengaturan mirror pada session agar konten virtual dirender dengan benar di scene nyata.
Ketika pengaturan yang sesuai dengan kamera saat ini di <xref:u:easyar.ARSession.HorizontalFlip> adalah <xref:u:easyar.ARSession.ARHorizontalFlipMode.World>, <xref:UnityEngine.GL.invertCulling?displayProperty=nameWithType> akan diatur menjadi true. Ini adalah konfigurasi default untuk kamera depan.
Video stream latar belakang AR
Di scene AR, kamera biasanya merender video stream dari kamera fisik sebagai latar belakang untuk meningkatkan imersi. Session secara otomatis menangani pengambilan dan rendering video stream, serta memastikan video stream selaras dengan konten virtual.
Kamera yang tidak dikontrol session
Saat menggunakan headset atau AR Foundation, atau saat implementasi menetapkan <xref:u:easyar.FrameSource.IsCameraUnderControl> sebagai false untuk <xref:u:easyar.FrameSource>, session tidak mengontrol properti kamera di atas. Sebagai gantinya, properti tersebut dikontrol oleh sistem eksternal.
Peringatan
Meskipun session tidak mengontrol properti kamera dalam kasus ini, properti tersebut tetap dikontrol oleh sistem pihak ketiga seperti SDK headset atau AR Foundation, sehingga memodifikasi properti ini saat pengembangan tetap tidak didukung.
Pertimbangan saat menyalin kamera
Kadang Anda perlu menyalin parameter session camera ke kamera lain. Dalam kasus itu, perhatikan dua hal berikut:
- Waktu pengambilan properti: saat menggunakan kamera yang dikontrol, rujuk ke Mendapatkan output session untuk memperoleh parameter ini pada waktu yang tepat; saat menggunakan kamera yang tidak dikontrol session, rujuk dokumentasi sistem pihak ketiga untuk memperolehnya pada waktu yang tepat.
- Field of view (FOV), aspect ratio, dan projection matrix kamera: gunakan
<xref:UnityEngine.Camera.projectionMatrix?displayProperty=nameWithType>untuk mendapatkan projection matrix kamera dan menyalinnya ke kamera lain.<xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType>dan<xref:UnityEngine.Camera.aspect?displayProperty=nameWithType>secara matematis merupakan bagian dari projection matrix, jadi hanya menggunakan<xref:UnityEngine.Camera.fieldOfView?displayProperty=nameWithType>dan<xref:UnityEngine.Camera.aspect?displayProperty=nameWithType>tidak cukup.
Langkah berikutnya
- Baca Konfigurasi kamera untuk mempelajari cara mengonfigurasi kamera agar mendapatkan pengalaman AR terbaik