Di Jetpack XR SDK, lingkungan spasial adalah lingkungan imersif yang dapat Anda tambahkan ke aplikasi untuk menyesuaikan latar belakang tampilan virtual. Lingkungan spasial hanya terlihat saat aplikasi berada dalam Ruang Penuh.
Ringkasan lingkungan spasial
SpatialEnvironment
digunakan untuk mengelola preferensi lingkungan
spasial aplikasi. Ini adalah gabungan 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 mewakili gambar yang dilihat pengguna di sekelilingnya dalam tampilan 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 sferis dalam standar OpenEXR. Selain memberikan latar belakang yang imersif untuk aplikasi Anda, skybox EXR juga memberikan pencahayaan berbasis gambar (IBL) ke model 3D yang dimuat oleh aplikasi Anda. Untuk 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 disejajarkan dengan lantai dunia nyata. Geometri lingkungan adalah cara yang bagus untuk menambahkan realisme ke lingkungan Anda melalui elemen latar depan dan tengah yang menyatu dengan skybox dengan 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 menetapkan lingkungan spasial aplikasi ke salah satu dari tiga konfigurasi berikut:
- Kombinasi gambar skybox dan geometri glTF.
- Permukaan passthrough, dengan lingkungan yang ditampilkan adalah feed live dari kamera yang menghadap ke luar perangkat. Pada opasitas penuh, permukaan passthrough ini sepenuhnya menutupi skybox dan geometri.
- Konfigurasi campuran, dengan permukaan passthrough tidak memiliki opasitas penuh, atau opasitas nol. Dalam hal ini, permukaan passthrough menjadi semi-transparan dan alpha menyatu dengan skybox dan geometri di belakangnya.
Kemampuan spasial untuk lingkungan spasial
SpatialCapabilities
: Merepresentasikan kemampuan spasial sesi saat ini. Kemampuan spasial tertentu relevan dengan lingkungan spasial.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: Menunjukkan apakah aktivitas dapat mengaktifkan atau menonaktifkan passthrough pada saat ini atau tidak.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: Menunjukkan apakah aktivitas dapat menetapkan lingkungan spasialnya sendiri atau tidak saat ini.
Mengimpor dan memuat resource lingkungan spasial
Resource glTF dan EXR untuk lingkungan spasial dimuat secara asinkron di
class Session
. File ini harus disimpan di folder aset.
Membuat resource glTF
Resource glTF dapat dibuat sebagai GltfModel
, tempat glTF
dimuat dari file lokal. GltfModel
dapat digunakan sebagai bagian dari lingkungan aplikasi
spasial.
// assume that session is a Session that has been previously created
val environmentGeometryFuture = session.createGltfResourceAsync("DayGeometry.glb")
val environmentGeometry = environmentGeometryFuture.await()
Membuat resource gambar EXR
Resource gambar EXR dapat dibuat sebagai ExrImage
, tempat EXR dimuat
dari file lokal. ExrImage
dapat digunakan sebagai bagian dari lingkungan aplikasi
spasial untuk menggambar skybox.
// assume that session is a Session that has been previously created
val skyboxExrFuture = session.createExrImageResourceAsync("BlueSkybox.exr")
val skyboxExr = skyboxExrFuture.await()
Menetapkan SpatialEnvironmentPreference untuk aplikasi Anda
setSpatialEnvironmentPreference
digunakan untuk menetapkan lingkungan
spasial yang diinginkan untuk aplikasi. Metode ini hanya menetapkan preferensi dan tidak
menyebabkan perubahan langsung kecuali
isSpatialEnvironmentPreferenceActive
sudah
benar. Setelah perangkat memasuki status tempat latar belakang XR dapat diubah dan
kemampuan SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT
tersedia, lingkungan spasial yang diinginkan untuk aplikasi
akan otomatis ditampilkan.
Menetapkan preferensi ke null akan menonaktifkan lingkungan spasial pilihan untuk aplikasi, yang berarti lingkungan sistem default akan ditampilkan.
Jika SpatialEnvironmentPreference
yang diberikan bukan null, tetapi
semua propertinya null, lingkungan spasial akan terdiri dari
skybox hitam dan tidak ada geometri.
Untuk mendapatkan notifikasi tentang perubahan pada 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 menetapkan lingkungannya sendiri.
// Assume that session is a Session that has been previously created
// Create a GLTFResource
val environmentGeometry = session.createGltfResourceAsync("DayGeometry.glb").await()
// Create an ExrImage for the skybox
val skyboxExr = session.createExrImageResourceAsync("BlueSkybox.exr").await()
val spatialEnvironmentPreference = SpatialEnvironmentPreference(skyboxExr, environmentGeometry)
val preferenceResult = session.spatialEnvironment.setSpatialEnvironmentPreference(spatialEnvironmentPreference)
if (preferenceResult == SpatialEnvironment.SetSpatialEnvironmentPreferenceChangeApplied()) {
// The environment was successfully updated and is now visible, and any listeners
// specified using addOnSpatialEnvironmentChangedListener will be notified.
} else if (preferenceResult == SpatialEnvironment.SetSpatialEnvironmentPreferenceChangePending()) {
// The environment is in the process of being updated. Once visible, any listeners
// specified using addOnSpatialEnvironmentChangedListener will be notified.
}
Penggunaan lanjutan
Untuk kasus penggunaan lanjutan yang 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 untuk aplikasi Anda
Salah satu komponen latar belakang virtual imersif aplikasi adalah platform passthrough. Dalam hal ini, latar belakang yang ditampilkan adalah feed live dari kamera yang menghadap ke luar perangkat.
setPassthroughOpacityPreference
digunakan untuk menetapkan opasitas
passthrough yang diinginkan untuk aplikasi. Metode ini hanya menetapkan preferensi dan tidak
menyebabkan perubahan langsung kecuali jika
kemampuan
SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
tersedia. Setelah perangkat memasuki status tempat opasitas
passthrough dapat diubah, dan
kemampuan SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
tersedia, opasitas passthrough yang dipilih untuk aplikasi akan
diterapkan secara otomatis.
Nilai untuk preferensi opasitas passthrough berkisar dari 0.0f
(opasitas nol,
saat platform passthrough tidak terlihat) hingga 1.0f
(opasitas penuh, saat
platform passthrough menyembunyikan lingkungan spasial). Parameter
setPassthroughOpacityPreference
adalah float nullable. Menetapkan
nilai ke null menunjukkan bahwa aplikasi tidak memiliki preferensi opasitas passthrough, dan
akan menampilkan kontrol passthrough ke sistem.
Penggunaan dasar
Cuplikan kode ini menetapkan preferensi opasitas passthrough. Preferensi ini akan diingat, dan akan diterapkan saat aplikasi memiliki kemampuan untuk menetapkan opasitas passthrough.
// Assume that session is a Session that has been previously created
val preferenceResult = session.spatialEnvironment.setPassthroughOpacityPreference(1.0f)
if (preferenceResult == SpatialEnvironment.SetPassthroughOpacityPreferenceChangeApplied()) {
// The passthrough opacity request succeeded and should be visible now, and any listeners specified using addOnPassthroughOpacityChangedListener
// will be notified
} else if (preferenceResult == SpatialEnvironment.SetPassthroughOpacityPreferenceChangePending()) {
// 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 lanjutan yang memerlukan kontrol yang lebih baik atas opasitas
passthrough, Anda dapat menggabungkan pemeriksaan SpatialCapabilities
dan menerapkan
addOnPassthroughOpacityChangedListener
untuk menentukan kapan Anda ingin menetapkan
preferensi opasitas passthrough.
Pengoptimalan aset
Saat membuat aset untuk menetapkan SpatialEnvironment
pengguna, sebaiknya
pastikan aset Anda mencapai resolusi berkualitas tinggi sekaligus mempertahankan
ukuran file yang wajar. Anda harus memastikan bahwa glb menggunakan tekstur mipmap dan ktx2. Anda juga harus peka terhadap jumlah poligon dalam file glb,
karena jumlah poligon yang tinggi dapat menyebabkan konsumsi daya yang tidak perlu. Sebagian besar
ukuran file untuk sebagian besar instance SpatialEnvironment
berasal dari gambar yang digunakan untuk
Skybox. Untuk memastikan gambar Anda dioptimalkan, jalankan aset melalui
alat pengoptimalan (misalnya, ktx).
Menentukan opasitas passthrough saat ini
val currentPassthroughOpacity = session.spatialEnvironment.getCurrentPassthroughOpacity()