Di Jetpack XR SDK, lingkungan spasial adalah lingkungan imersif yang dapat Anda tambahkan ke aplikasi untuk menyesuaikan latar belakang adegan virtual. Lingkungan spasial hanya terlihat saat aplikasi berada dalam Ruang Penuh.
Ringkasan lingkungan spasial
SpatialEnvironment
digunakan untuk mengelola preferensi lingkungan spasial aplikasi. Ini adalah komposit dari gambar skybox mandiri dan geometri yang ditentukan glTF. Hanya satu gambar skybox dan satu file geometri glTF yang dapat ditetapkan
dalam satu waktu.
Skybox menampilkan gambar yang dilihat pengguna di sekitarnya dalam adegan virtual, sehingga menciptakan ilusi lingkungan latar belakang yang jauh, seperti langit, pegunungan, atau lanskap kota. Pengguna tidak dapat berinteraksi dengan atau mendekati skybox. Jetpack XR SDK mendukung skybox bola dalam standar OpenEXR. Selain memberikan latar belakang imersif untuk aplikasi Anda, skybox EXR juga menyediakan pencahayaan berbasis gambar (IBL) untuk model 3D yang dimuat oleh aplikasi Anda. Untuk mengetahui informasi selengkapnya, lihat panduan untuk menggunakan model 3D.
Lingkungan spasial juga dapat menyertakan konten geometri 3D dalam standar glTF. Geometri lingkungan yang dimuat dengan cara ini akan otomatis diselaraskan dengan lantai dunia nyata. Geometri lingkungan adalah cara yang bagus untuk menambahkan realisme ke lingkungan Anda melalui elemen latar depan dan latar tengah yang berpadu dengan skybox menggunakan efek paralaks.
Dalam panduan desain untuk lingkungan spasial, Anda dapat mempelajari berbagai jenis aset yang dapat digunakan untuk membuat lingkungan spasial dan cara membuat lingkungan spasial yang aman dan menyenangkan.
Anda dapat menyetel lingkungan spasial aplikasi ke salah satu dari tiga konfigurasi berikut:
- Kombinasi gambar skybox dan geometri glTF.
- Permukaan passthrough, tempat lingkungan yang ditampilkan adalah feed live dari kamera perangkat yang menghadap ke luar. Pada opasitas penuh, permukaan penerusan ini sepenuhnya menutupi skybox dan geometri.
- Konfigurasi campuran, dengan permukaan teruskan tidak pada opasitas penuh, dan juga tidak pada opasitas nol. Dalam hal ini, permukaan teruskan menjadi semi-transparan dan menyatu dengan alpha skybox dan geometri di belakangnya.
Kemampuan spasial untuk lingkungan spasial
SpatialCapabilities
: Menampilkan kemampuan spasial sesi saat ini. Kemampuan spasial tertentu relevan dengan lingkungan spasial.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: Menunjukkan apakah aktivitas dapat mengaktifkan atau menonaktifkan penerusan pada saat ini.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: Menunjukkan apakah aktivitas dapat menyetel lingkungan spasialnya sendiri pada waktu saat ini atau tidak.
Mengimpor dan memuat resource lingkungan spasial
Resource glTF dan EXR untuk lingkungan spasial dimuat secara asinkron dengan
menggunakan class Session
.
Membuat resource glTF
Resource glTF dapat dibuat sebagai GltfModel
, dengan glTF dimuat dari file lokal. GltfModel
dapat digunakan sebagai bagian dari lingkungan aplikasi spasial.
val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))
Membuat resource gambar EXR
Resource gambar EXR dapat dibuat sebagai ExrImage
, dengan EXR dimuat dari file lokal. ExrImage
dapat digunakan dengan cmgen
untuk membuat file ZIP IBL untuk skybox Anda. Lihat panduan kami tentang mengoptimalkan aset lingkungan untuk mengetahui detail selengkapnya.
val lightingForSkybox = ExrImage.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))
Menetapkan SpatialEnvironmentPreference
untuk aplikasi Anda
Properti preferredSpatialEnvironment
mengontrol lingkungan
spasial pilihan untuk aplikasi. Jika digunakan untuk menyetel preferensi, properti ini tidak
akan menyebabkan perubahan langsung kecuali jika isPreferredSpatialEnvironmentActive
sudah true
. Setelah perangkat memasuki status saat latar belakang XR dapat diubah dan kemampuan SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT
tersedia, lingkungan spasial pilihan untuk aplikasi akan ditampilkan secara otomatis.
Menetapkan preferensi ke null
akan menonaktifkan lingkungan spasial pilihan untuk aplikasi, yang berarti lingkungan sistem default akan ditampilkan.
Jika SpatialEnvironmentPreference
yang diberikan tidak null, tetapi semua
propertinya null, maka lingkungan spasial akan terdiri dari skybox hitam
dan tanpa geometri.
Untuk mendapatkan notifikasi tentang perubahan status SpatialEnvironment
, gunakan
addOnSpatialEnvironmentChangedListener
.
Penggunaan dasar
Cuplikan kode ini membuat geometri lingkungan dan resource skybox, lalu menetapkan preferensi lingkungan spasial. Preferensi ini akan diingat, dan akan diterapkan saat aplikasi memiliki kemampuan untuk menyetel lingkungannya sendiri.
val spatialEnvironmentPreference = SpatialEnvironment.SpatialEnvironmentPreference(lightingForSkybox, environmentGeometry) session.scene.spatialEnvironment.preferredSpatialEnvironment = spatialEnvironmentPreference if (session.scene.spatialEnvironment.isPreferredSpatialEnvironmentActive) { // The environment was successfully updated and is now visible, and any listeners // specified using addOnSpatialEnvironmentChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the SPATIAL_CAPABILITY_APP_ENVIRONMENT capability. // Then, any listeners specified using addOnSpatialEnvironmentChangedListener // will be notified. }
Penggunaan lanjutan
Untuk kasus penggunaan yang lebih canggih saat Anda memerlukan kontrol yang lebih baik atas lingkungan, Anda dapat menggabungkan pemeriksaan SpatialCapabilities
dan menerapkan addOnSpatialEnvironmentChangedListener
untuk menentukan kapan Anda ingin menetapkan preferensi lingkungan spasial.
Menetapkan PassthroughOpacityPreference untuk lingkungan spasial aplikasi Anda
Salah satu komponen latar belakang virtual imersif aplikasi adalah permukaan passthrough. Dalam hal ini, latar belakang yang ditampilkan adalah feed live dari kamera yang menghadap ke luar perangkat.
setPassthroughOpacityPreference
digunakan untuk menyetel keburaman teruskan yang disukai untuk aplikasi. Metode ini hanya menyetel preferensi dan tidak menyebabkan perubahan langsung kecuali jika kemampuan SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
tersedia. Setelah perangkat memasuki status saat keburaman terusannya dapat diubah, dan kemampuan SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
tersedia, keburaman terusannya yang disukai untuk aplikasi akan diterapkan secara otomatis.
Nilai untuk preferensi opasitas teruskan berkisar dari 0.0f
(opasitas nol, tempat permukaan teruskan tidak terlihat) hingga 1.0f
(opasitas penuh, tempat permukaan teruskan menyembunyikan lingkungan spasial). Parameter
setPassthroughOpacityPreference
adalah float nullable. Menyetel
nilai ke null menunjukkan bahwa aplikasi tidak memiliki preferensi keburaman teruskan, dan
akan mengembalikan kontrol teruskan ke sistem.
Penggunaan dasar
Cuplikan kode ini menetapkan preferensi keburaman passthrough. Preferensi ini akan diingat, dan akan diterapkan saat aplikasi memiliki kemampuan untuk menyetel opasitas teruskan.
session.scene.spatialEnvironment.preferredPassthroughOpacity = 1.0f if (session.scene.spatialEnvironment.currentPassthroughOpacity == 1.0f) { // The passthrough opacity request succeeded and should be visible now, and any listeners // specified using addOnPassthroughOpacityChangedListener will be notified. } else { // The passthrough opacity preference was successfully set, but not // immediately visible. The passthrough opacity change will be applied // when the activity has the // SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL capability. // Then, any listeners specified using addOnPassthroughOpacityChangedListener // will be notified. }
Penggunaan lanjutan
Untuk kasus penggunaan yang lebih canggih saat Anda memerlukan kontrol yang lebih baik atas keburaman terusannya, Anda dapat menggabungkan pemeriksaan SpatialCapabilities
dan menambahkan pemroses menggunakan addOnPassthroughOpacityChangedListener
untuk menentukan kapan Anda ingin menetapkan preferensi keburaman terusannya.
Pengoptimalan aset
Saat membuat aset untuk menetapkan SpatialEnvironment
pengguna, pastikan aset Anda mencapai resolusi berkualitas tinggi sekaligus mempertahankan ukuran file yang wajar. Untuk mempelajari lebih lanjut, lihat panduan kami tentang mengoptimalkan aset Lingkungan.
Menentukan keburaman teruskan saat ini
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity