Uygulamanıza mekansal ortamlar ekleme

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. Tek seferde 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şime geçemez veya gökyüzü kutusuna 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

Mekansal ortam kaynaklarını içe aktarma ve yükleme

Uzamsal ortamlar için glTF ve EXR kaynakları Session sınıfında eşzamansız olarak yüklenir. Bu dosyalar assets klasöründe depolanmalıdır.

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.

// assume that session is a Session that has been previously created
val environmentGeometryFuture = session.createGltfResourceAsync("DayGeometry.glb")

val environmentGeometry = environmentGeometryFuture.await()

EXR resim kaynağı oluşturma

EXR görüntü kaynağı, EXR'nin yerel bir dosyadan yüklendiği bir ExrImage olarak oluşturulabilir. ExrImage, gökyüzü kutuları çizmek için bir mekansal uygulama ortamının parçası olarak kullanılabilir.

// assume that session is a Session that has been previously created
val skyboxExrFuture = session.createExrImageResourceAsync("BlueSkybox.exr")

val skyboxExr = skyboxExrFuture.await()

Uygulamanız için SpatialEnvironmentPreference'yi ayarlama

setSpatialEnvironmentPreference, bir uygulama için tercih edilen uzamsal 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.

// 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.
}

İ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, cihazın dışa bakan kameralarından gelen canlı feed gösterilir.

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.

// 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
}

İ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 kontrolleri dahil edebilir ve geçiş saydamlığı tercihini ne zaman ayarlamak istediğinizi belirlemek üzere bir addOnPassthroughOpacityChangedListener uygulayabilirsiniz.

Öğ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 elde etmesini sağlamalısınız. glb'nizin mipmap'ler ve ktx2 dokuları kullandığından emin olun. Yüksek poligon sayısı gereksiz güç tüketimine neden olabileceğinden, glb dosyalarınızdaki poligon sayısına da dikkat etmeniz gerekir. Çoğu SpatialEnvironment örneğinin dosya boyutunun büyük kısmı, gökyüzü kutusu için kullanılan resimden gelir. Resimlerinizin optimize edildiğinden emin olmak için öğeleri bir optimizasyon aracından (ör. ktx) geçirin.

Geçiş saydamlığını belirleme

val currentPassthroughOpacity =  session.spatialEnvironment.getCurrentPassthroughOpacity()

Ayrıca bkz.