Jetpack XR SDK'da üç boyutlu ortamlar, sanal sahnenin arka planını özelleştirmek için uygulamanıza ekleyebileceğiniz sürükleyici ortamlardır. Üç boyutlu ortamlar yalnızca bir uygulama Tam Ekran Alanı'ndayken görünür.
Uzamsal ortamlara genel bakış
SpatialEnvironment, bir uygulamanın uzamsal ortam tercihlerini yönetir. Bağımsız bir gökyüzü kutusu görüntüsü ile glTF tarafından belirtilen geometrinin birleşiminden oluşur. Aynı anda yalnızca tek bir skybox resmi ve tek bir glTF geometri dosyası ayarlanabilir.
Skybox, kullanıcının sanal sahnede etrafında gördüğü görüntüyü temsil eder ve gökyüzü, dağlar veya şehir manzarası gibi uzak bir arka plan ortamı illüzyonu yaratır. Kullanıcı, gökyüzü kutusuyla etkileşime giremez veya ona yaklaşamaz. Jetpack XR SDK'sı, OpenEXR standardındaki küresel gökyüzü kutularını destekler. EXR skybox, uygulamanız için etkileyici bir arka plan sağlamanın yanı sıra uygulamanız tarafından yüklenen 3D modellere görüntü tabanlı aydınlatma (IBL) da sağlar. Daha fazla bilgi için 3D modellerle çalışma kılavuzuna bakın.
Üç boyutlu ortamlar, glTF standardında 3D geometri içeriği de barındırabilir. Bu şekilde yüklenen ortam geometrisi, gerçek dünyadaki zeminle otomatik olarak hizalanır. Ortam geometrisi, paralaks efektiyle gökyüzü kutusuna karışan ön plan ve orta plan öğeleri aracılığıyla ortamınıza gerçekçilik katmanın harika bir yoludur.
Üç boyutlu ortamlar için tasarım kılavuzunda, üç boyutlu ortamlar oluşturmak için kullanabileceğiniz farklı öğe türleri ve güvenli, keyifli üç boyutlu ortamlar oluşturma hakkında bilgi edinebilirsiniz.
Uygulamanızın uzamsal ortamını aşağıdaki üç yapılandırmadan birine ayarlayabilirsiniz:
- Skybox resmi ve glTF geometrisinin birleşimi.
- Geçiş yüzeyi: Görüntülenen ortam, cihazın dışa bakan kameralarından gelen canlı feed'dir. Tam opaklıkta bu geçiş yüzeyi, gökyüzü kutusunu ve geometriyi tamamen kapatır.
- Geçiş yüzeyinin tam opaklıkta veya sıfır opaklıkta olmadığı karma bir yapılandırma. Bu durumda, geçiş yüzeyi yarı şeffaf hale gelir ve arkasındaki gökyüzü kutusu ve geometri ile alfa karışımı oluşturur.
Üç boyutlu ortamlar için üç boyutlu özellikler
SpatialCapability: Mevcut oturumun uzamsal özelliklerini temsil eder. Belirli uzamsal özellikler, uzamsal ortamlarla ilgilidir.SpatialCapability.PASSTHROUGH_CONTROL: Etkinliğin şu anda geçiş özelliğini etkinleştirip etkinleştiremeyeceğini gösterir.SpatialCapability.APP_ENVIRONMENT: Etkinliğin şu anda kendi uzamsal ortamını ayarlayıp ayarlayamayacağını gösterir.
Üç boyutlu ortam kaynaklarını içe aktarma ve yükleme
Üç boyutlu ortamlar için glTF ve EXR kaynakları, Session sınıfı kullanılarak eşzamansız olarak yüklenir.
glTF kaynağı oluşturma
glTF kaynağı, glTF'nin yerel bir dosyadan yüklendiği bir GltfModel olarak oluşturulabilir. GltfModel, uzamsal uygulama ortamının bir parçası olarak kullanılabilir.
val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))
Görüntü tabanlı ışıklandırma kaynağı oluşturma
Görüntü tabanlı ışıklandırma kaynağı, ışıklandırmanın yerel bir dosyadan yüklendiği bir ImageBasedLightingAsset olarak oluşturulabilir.
Skybox'larınız için IBL'nin ZIP dosyasını oluşturmak üzere ImageBasedLightingAsset, cmgen ile birlikte kullanılabilir. Daha fazla bilgi için ortam öğelerini optimize etme kılavuzumuzu inceleyin.
val lightingForSkybox = ImageBasedLightingAsset.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))
Uygulamanız için SpatialEnvironmentPreference ayarlama
preferredSpatialEnvironment özelliği, bir uygulamanın tercih edilen uzamsal ortamını kontrol eder. Bu özellik bir tercih belirlemek için kullanıldığında, isPreferredSpatialEnvironmentActive zaten true değilse hemen bir değişikliğe neden olmaz. Cihaz, XR arka planının değiştirilebileceği bir duruma girdiğinde ve SpatialCapability.APP_ENVIRONMENT özelliği kullanılabilir olduğunda uygulama için tercih edilen üç boyutlu ortam otomatik olarak gösterilir.
Tercihi null olarak ayarlarsanız uygulama için tercih edilen uzamsal ortam devre dışı bırakılır. Bu durumda, varsayılan sistem ortamı gösterilir.
Belirtilen SpatialEnvironmentPreference boş değilse ancak tüm özellikleri boşsa uzamsal ortam, siyah bir gökyüzü kutusundan oluşur ve geometri içermez.
SpatialEnvironment durumundaki değişikliklerle ilgili bildirim almak için addOnSpatialEnvironmentChangedListener yöntemini kullanın.
Temel kullanım
Bu kod snippet'i, ortam geometrisi ve gökyüzü kutusu kaynaklarını oluşturur ve ardından uzamsal ortam tercihini ayarlar. Bu tercih kaydedilir ve uygulama kendi ortamını ayarlama özelliğine sahip olduğunda uygulanır.
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. }
İleri seviye kullanım
Ortam üzerinde daha ayrıntılı kontrole ihtiyaç duyduğunuz daha gelişmiş kullanım alanları için SpatialCapability kontrollerini dahil edebilir ve uzamsal ortam tercihini ne zaman ayarlamak istediğinizi belirlemek için bir addOnSpatialEnvironmentChangedListener uygulayabilirsiniz.
Uygulamanızın uzamsal ortamı için PassthroughOpacityPreference değerini ayarlama
Uygulamanın üç boyutlu sanal arka planının bileşenlerinden biri, geçiş yüzeyidir. Bu durumda, cihazın dışa bakan kameralarından gelen canlı feed arka plan olarak gösterilir.
setPassthroughOpacityPreference, bir uygulama için tercih edilen şeffaf mod opaklığını ayarlamak amacıyla kullanılır. Bu yöntem yalnızca bir tercih belirler ve SpatialCapability.PASSTHROUGH_CONTROL özelliği kullanılabilir olmadığı sürece anında bir değişikliğe neden olmaz. Cihaz, şeffaf mod opaklığının değiştirilebileceği bir duruma girdiğinde ve SpatialCapability.PASSTHROUGH_CONTROL özelliği kullanılabilir olduğunda, uygulama için tercih edilen şeffaf mod opaklığı otomatik olarak uygulanır.
Şeffaf görüntü opaklığı tercihi için değerler 0.0f (sıfır opaklık, şeffaf görüntü yüzeyinin görünür olmadığı durum) ile 1.0f (tam opaklık, şeffaf görüntü yüzeyinin uzamsal ortamı gizlediği durum) arasında değişir. setPassthroughOpacityPreference parametresi, null değer alabilen bir kayan nokta değeridir. Değerin null olarak ayarlanması, uygulamanın şeffaf mod opaklık tercihi olmadığını gösterir ve şeffaf mod kontrolünü sisteme döndürür.
Temel kullanım
Bu kod snippet'i, geçiş opaklığı tercihini ayarlar. Bu tercih kaydedilir ve uygulama, geçiş opaklığını ayarlama özelliğine sahip olduğunda uygulanır.
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. }
İleri seviye kullanım
Şeffaf görüntü opaklığı üzerinde daha hassas kontrol gerektiren daha gelişmiş kullanım alanları için SpatialCapability kontrollerini dahil edebilir ve şeffaf görüntü opaklığı tercihini ne zaman ayarlamak istediğinizi belirlemek için addOnPassthroughOpacityChangedListener kullanarak bir dinleyici ekleyebilirsiniz.
Öğe optimizasyonu
Kullanıcılarınızın SpatialEnvironment ayarlaması için öğe oluştururken öğelerinizin makul bir dosya boyutunu korurken yüksek kaliteli çözünürlük elde ettiğinden emin olun. Daha fazla bilgi için Ortam öğelerini optimize etme ile ilgili kılavuzumuzu inceleyin.
Mevcut geçiş opaklığını belirleme
val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity