Uygulamanıza mekansal ortamlar ekleme

Jetpack XR SDK'sında, uzamsal ortamlar, sanal sahnenin arka planını özelleştirmek için uygulamanıza ekleyebileceğiniz sürükleyici çevrelerdir. Uzamsal ortamlar yalnızca bir uygulama Tam Alan'dayken görünür.

Uzamsal ortamlara genel bakış

Uygulamanın uzamsal ortam tercihlerini yönetmek için SpatialEnvironment kullanılır. Bu, bağımsız bir gökyüzü görüntüsü ve glTF ile belirtilen geometrinin birleşimidir. Aynı anda yalnızca tek bir gökyüzü 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. Bu görüntü, gökyüzü, dağlar veya şehir manzarası gibi uzak bir arka plan ortamı yanılsaması oluşturur. Kullanıcı, skybox ile etkileşimde bulunamaz veya skybox'a yaklaşamaz. Jetpack XR SDK, 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 modeller için görüntü tabanlı aydınlatma (IBL) da sağlar. Daha fazla bilgi için 3D modellerle çalışma rehberine 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ünyadaki zeminle 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 rehberinde, üç boyutlu ortamlar oluşturmak için kullanabileceğiniz farklı öğe türleri ve güvenli ve keyifli üç boyutlu ortamlar oluşturma hakkında bilgi edinebilirsiniz.

Uygulamanızın uzamsal ortamını şu üç yapılandırmadan birine ayarlayabilirsiniz:

  • Bir gökyüzü kutusu resmi ile glTF geometrisinin kombinasyonu.
  • Ortamın, cihazın dışa dönük kameralarından alınan canlı feed olarak gösterildiği bir geçiş yüzeyi. Tam opaklıkta bu geçiş yüzeyi, gökyüzü kutusunu ve geometriyi tamamen kapatır.
  • Geçiş yüzeyinin tam opak olmadığı veya sıfır opak olmadığı karma yapılandırma. Bu durumda, geçiş yüzeyi yarı şeffaf hale gelir ve arka plandaki gökyüzü kutusu ve geometri ile alfa karışımı oluşturur.

Üç boyutlu ortamlar için üç boyutlu özellikler

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

Mekansal 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 GltfModel olarak oluşturulabilir. GltfModel, bir mekansal uygulama ortamının parçası olarak kullanılabilir.

val environmentGeometry = GltfModel.create(session, Paths.get("DayGeometry.glb"))

EXR görüntü kaynağı oluşturma

EXR görüntü kaynağı, EXR'nin yerel bir dosyadan yüklendiği ExrImage olarak oluşturulabilir. Gökyüzü kutularınız için IBL'nin ZIP dosyasını oluşturmak üzere ExrImage ile cmgen kullanılabilir. Daha fazla bilgi için ortam öğelerini optimize etme ile ilgili kılavuzumuzu inceleyin.

val lightingForSkybox = ExrImage.createFromZip(session, Paths.get("BlueSkyboxLighting.zip"))

Uygulamanız için SpatialEnvironmentPreference ayarlama

preferredSpatialEnvironment özelliği, bir uygulama için tercih edilen uzamsal ortamı kontrol eder. Bu özellik bir tercihi ayarlamak 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 ve SpatialCapabilities.SPATIAL_CAPABILITY_APP_ENVIRONMENT özelliğinin kullanılabileceği bir duruma girdiğinde uygulama için tercih edilen uzamsal ortam otomatik olarak gösterilir.

Tercihi null olarak ayarladığınızda uygulama için tercih edilen uzamsal ortam devre dışı bırakılır. Bunun yerine varsayılan sistem ortamı gösterilir.

Belirtilen SpatialEnvironmentPreference değeri null değilse ancak tüm özellikleri null ise uzamsal ortam siyah bir gökyüzü kutusundan ve geometriden oluşur.

SpatialEnvironment durumundaki değişikliklerden haberdar olmak için addOnSpatialEnvironmentChangedListener kullanın.

Temel kullanım

Bu kod snippet'i, ortam geometrisi ve gökyüzü kutusu kaynaklarını oluşturur, ardından uzamsal 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)
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 düzey kullanım

Ortam üzerinde daha ayrıntılı kontrol gerektiren daha gelişmiş kullanım alanlarında, SpatialCapabilities kontrollerini dahil edebilir ve uzamsal ortam tercihini ne zaman ayarlamak istediğinizi belirlemek için addOnSpatialEnvironmentChangedListener uygulayabilirsiniz.

Uygulamanızın uzamsal ortamı için PassthroughOpacityPreference'ı ayarlayın

Bir uygulamanın üç boyutlu sanal arka planının bileşenlerinden biri, geçiş yüzeyidir. Bu durumda gösterilen arka plan, cihazın dışa dönük kameralarından alınan canlı feed'dir.

setPassthroughOpacityPreference, bir uygulama için tercih edilen şeffaflığı ayarlamak üzere kullanılır. Bu yöntem yalnızca bir tercih belirler ve SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL özelliği kullanılabilir durumda olmadığı sürece anında değişiklik yapmaz. Cihaz, geçiş opaklığının değiştirilebileceği bir duruma girdiğinde ve SpatialCapabilities.SPATIAL_CAPABILITY_PASSTHROUGH_CONTROL özelliği kullanılabildiğinde, uygulama için tercih edilen geçiş opaklığı otomatik olarak uygulanır.

Geçiş opaklığı 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 uzamsal ortamı gizlediği tam opaklık) arasında değişir. setPassthroughOpacityPreference parametresi, boş değer atanabilir bir kayan nokta sayısıdır. Değeri null olarak ayarlamak, uygulamanın şeffaflık tercihi olmadığını ve şeffaflık kontrolünü sisteme geri döndüreceğini gösterir.

Temel kullanım

Bu kod snippet'i, geçiş opaklığı tercihini ayarlar. Bu tercih hatırlanır ve uygulama, şeffaflık ayarını yapma ö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 düzey kullanım

Geçiş opaklığı üzerinde daha ayrıntılı kontrol sahibi olmanız gereken daha gelişmiş kullanım alanları için SpatialCapabilities kontrollerini dahil edebilir ve addOnPassthroughOpacityChangedListener kullanarak bir dinleyici ekleyebilirsiniz. Böylece, geçiş opaklığı tercihini ne zaman ayarlamak istediğinizi belirleyebilirsiniz.

Öğe optimizasyonu

Kullanıcılarınızın SpatialEnvironment ayarlanması için öğeler oluştururken öğelerinizin makul bir dosya boyutuyla yüksek kaliteli çözünürlük elde ettiğinden emin olun. Daha fazla bilgi edinmek için Ortam öğelerini optimize etme ile ilgili rehberimize göz atın.

Geçerli geçiş opaklığını belirleme

val currentPassthroughOpacity = session.scene.spatialEnvironment.currentPassthroughOpacity

Ayrıca bkz.