Jetpack XR SDK'sında, sanal sahnenin arka planını özelleştirmek için uygulamanıza ekleyebileceğiniz sürükleyici ortamlar olan mekansal ortamlar bulunur. Üç boyutlu ortamlar yalnızca bir uygulama tam ekrandayken görünür.
Mekansal ortamlara genel bakış
SpatialEnvironment
, bir uygulamanın mekansal ortam tercihlerini yönetmek için kullanılır. Bağımsız bir gökyüzü kutusu resminin ve glTF tarafından belirtilen geometrinin birleşimidir. Aynı anda yalnızca tek bir gökyüzü kutusu resmi ve tek bir glTF geometri dosyası ayarlanabilir.
Gökyüzü kutusu, 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ı yanılsaması oluşturur. Kullanıcı, gökyüzü kutusuyla etkileşim kuramaz veya kutuya yaklaşamaz. Jetpack XR SDK'sı, OpenEXR standardında küresel gökyüzü kutularını destekler. EXR gökyüzü kutusu, 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ı ışıklandırma (IBL) da sağlar. Daha fazla bilgi için 3D modellerle çalışma kılavuzuna bakın.
Mekansal ortamlar, glTF standardında 3D geometri içeriği de içerebilir. Bu şekilde yüklenen ortam geometrisi, otomatik olarak gerçek dünya zeminiyle 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 mükemmel bir yoludur.
Uzamsal ortamlar için tasarım kılavuzunda, uzamsal ortamlar oluşturmak için kullanabileceğiniz farklı öğe türleri ve güvenli ve keyifli uzamsal ortamlar oluşturma hakkında bilgi edinebilirsiniz.
Uygulamanızın mekansal ortamını aşağıdaki üç yapılandırmadan birine ayarlayabilirsiniz:
- Gökyüzü kutusu resmi ve glTF geometrisinin bir kombinasyonu.
- Gösterilen ortamın, cihazın dışa bakan kameralarından gelen canlı feed olduğu bir geçiş yüzeyi. Tam opaklıkta bu geçiş yüzeyi, gökyüzü kutusu 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 alfa, arkasındaki gökyüzü kutusu ve geometriyle karışır.
Üç boyutlu ortamlar için üç boyutlu özellikler
SpatialCapabilities
: Geçerli oturumun mekansal özelliklerini temsil eder. Belirli mekansal özellikler, mekansal ortamlarla ilgilidir.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
: Etkinliğin, geçişi şu anda etkinleştirip etkinleştiremeyeceğini belirtir.SPATIAL_CAPABILITY_APP_ENVIRONMENT
: Etkinliğin mevcut zamanda kendi mekansal ortamını ayarlayıp ayarlayamayacağını belirtir.
Mekansal ortam kaynaklarını içe aktarma ve yükleme
Uzamsal ortamlar için glTF ve EXR kaynakları, Session
sınıfı kullanılarak eşzamansız olarak yüklenir.
glTF kaynağı oluşturma
Bir glTF kaynağı, glTF'nin yerel bir dosyadan yüklendiği bir GltfModel
olarak oluşturulabilir. GltfModel
, bir mekansal uygulama ortamının parçası olarak kullanılabilir.
val environmentGeometryFuture = GltfModel.create(session, "DayGeometry.glb") val environmentGeometry = environmentGeometryFuture.await()
EXR resim kaynağı oluşturma
EXR resim kaynağı, EXR'nin yerel bir dosyadan yüklendiği bir ExrImage
olarak oluşturulabilir. ExrImage
, cmgen ile birlikte kullanılarak gökyüzü kutularınız için IBL'nin ZIP dosyasını oluşturabilir. Daha fazla bilgi için ortam öğelerini optimize etmeyle ilgili kılavuzumuzu inceleyin.
val lightingForSkybox = ExrImage.create(session, "BlueSkyboxLighting.zip")
Uygulamanız için SpatialEnvironmentPreference'yi ayarlama
setSpatialEnvironmentPreference
, bir uygulama için tercih edilen mekansal ortamı ayarlamak amacıyla kullanılır. Bu yöntem yalnızca bir tercih belirler ve isSpatialEnvironmentPreferenceActive
zaten doğru olmadığı sürece anında bir değişikliğe neden olmaz. Cihaz, XR arka planının değiştirilebileceği ve SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT
özelliğinin kullanılabileceği bir duruma girdiğinde uygulama için tercih edilen mekansal ortam otomatik olarak gösterilir.
Tercihi null olarak ayarlamak, uygulama için tercih edilen mekansal ortamı devre dışı bırakır. Bunun yerine varsayılan sistem ortamı gösterilir.
Belirtilen SpatialEnvironmentPreference
null değilse ancak tüm özellikleri null ise uzamsal ortam siyah bir gökyüzü kutusundan oluşur ve geometri içermez.
SpatialEnvironment durumundaki değişikliklerden haberdar olmak için addOnSpatialEnvironmentChangedListener
öğesini kullanın.
Temel kullanım
Bu kod snippet'i, ortam geometrisini ve gökyüzü kutusu kaynaklarını oluşturur ve ardından mekansal ortam tercihini ayarlar. Bu tercih hatırlanır ve uygulama kendi ortamını ayarlama özelliğine sahip olduğunda uygulanır.
val spatialEnvironmentPreference = SpatialEnvironment.SpatialEnvironmentPreference(lightingForSkybox, environmentGeometry) val preferenceResult = session.scene.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. }
İleri düzey kullanım
Ortam üzerinde daha ayrıntılı kontrole ihtiyaç duyduğunuz daha gelişmiş kullanım alanları için SpatialCapabilities
kontrolleri ekleyebilir ve uzamsal ortam tercihini ne zaman ayarlamak istediğinizi belirlemek için bir addOnSpatialEnvironmentChangedListener
uygulayabilirsiniz.
Uygulamanızın mekansal ortamı için PassthroughOpacityPreference ayarını yapma
Bir uygulamanın sürükleyici sanal arka planının bileşenlerinden biri geçiş yüzeyidir. Bu durumda, gösterilen arka plan, cihazın dışa bakan kameralarından gelen canlı feed'dir.
setPassthroughOpacityPreference
, bir uygulama için tercih edilen geçiş opaklığını ayarlamak amacıyla kullanılır. Bu yöntem yalnızca bir tercih belirler ve SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
özelliği kullanılamıyorsa anında bir değişikliğe neden olmaz. Cihaz, geçiş saydamlığının değiştirilebileceği bir duruma girdikten ve SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL
özelliği kullanılabilir hale geldikten sonra uygulama için tercih edilen geçiş saydamlığı otomatik olarak uygulanır.
Geçiş opaklık tercihi değerleri 0.0f
(geçiş yüzeyinin görünmediği sıfır opaklık) ile 1.0f
(geçiş yüzeyinin mekansal ortamı gizlediği tam opaklık) arasında değişir. setPassthroughOpacityPreference
parametresi, boş bırakılabilen bir kayan nokta sayısıdır. Değerin null olarak ayarlanması, uygulamanın geçiş saydamlığı tercihi olmadığını gösterir ve geçiş kontrolünü sisteme döndürür.
Temel kullanım
Bu kod snippet'i, aktarma opaklığı tercihini ayarlar. Bu tercih hatırlanır ve uygulamada geçiş opaklığını ayarlama özelliği olduğunda uygulanır.
val preferenceResult = session.scene.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 }
İleri düzey kullanım
Geçiş saydamlığı üzerinde daha ayrıntılı kontrole ihtiyaç duyduğunuz daha gelişmiş kullanım alanları için SpatialCapabilities
kontrollerini dahil edebilir ve geçiş saydamlığı tercihini ne zaman ayarlamak istediğinizi belirlemek için addOnPassthroughOpacityChangedListener
kullanarak bir dinleyici ekleyebilirsiniz.
Öğe optimizasyonu
Kullanıcılarınızın SpatialEnvironment
ayarlarını yapmak için öğeler oluştururken, öğelerinizin makul bir dosya boyutu korurken yüksek kaliteli çözünürlük sağladığından emin olun. Daha fazla bilgi edinmek için ortam öğelerini optimize etmeyle ilgili kılavuzumuza göz atın.
Geçiş saydamlığını belirleme
val currentPassthroughOpacity = session.scene.spatialEnvironment.getCurrentPassthroughOpacity()