Uygulamanıza 3D model ekleme

Uygun XR cihazlar
Bu kılavuz, bu tür XR cihazları için deneyimler geliştirmenize yardımcı olur.
XR Kulaklığı
Kablolu XR Gözlükleri

Jetpack XR SDK'sı, 3D modellerle çalışırken glTF 2.0 açık standardını destekler. Android XR, Jetpack XR SDK ile oluşturulan uygulamaları oluştururken 3D modeller, glTF 2.0 standardında belirtilen fizik tabanlı oluşturma(PBR) teknikleriyle (desteklenen uzantılarla birlikte) oluşturulur. Autodesk Maya, Maxon ZBrush, Blender ve Spline gibi çoğu dijital içerik oluşturma (dcc) aracı, 3D modelleri glTF biçiminde (.gltf veya .glb dosyaları) dışa aktarabilir.

Kullanıcı veya uygulamanız tarafından bir SpatialEnvironment skybox belirtilmişse 3D modeller, ortam skybox'ı tarafından sağlanan ışıklandırma bilgileriyle aydınlatılır. Yansıtıcı malzemeler ve aynasal vurgular da ortam gökyüzü kutusunu yansıtır. Doğrudan geçiş etkinleştirildiyse ışıklandırma, yansımalar ve parlak vurgular, tek yönlü ışık alan aydınlık bir odaya göre ayarlanır.

Desteklenen malzemelere hızlı bir genel bakış için Khronos sitesindeki glTF PBR Özellikleri'ne bakın. 3D modellerinizi bu ve diğer özelliklerle nasıl özelleştireceğinizi öğrenmek için Uygulamanızdaki 3D modelleri özelleştirme başlıklı makaleyi inceleyin.

Öğeler klasörünüze glTF dosyası ekleme

glTF dosyanızı oluşturduktan sonraki adım, dosyayı Android Studio'daki öğeler dizinine eklemektir. Öğe türlerinizi daha iyi organize etmek için bir models dizini oluşturmanızı öneririz.

/models dizinine öğe ekleme örneği

SpatialGltfModel kullanarak 3D nesne ekleme

Android XR, genellikle .glb dosyası olarak kaydedilen 3D modeller için glTF biçimini destekler. Bu nesneleri düzeninize eklemek için SpatialGltfModel simgesini kullanın. SpatialGltfModel, glTF biçimindeki 3D modelleri uzamsal düzeninize eklemenize olanak tanıyan bir alt alan oluşturulabiliridir. Bu API, öğeleri yükleme ve durumlarını yönetme sürecini basitleştirir.

Bir modeli görüntülemek için önce rememberSpatialGltfModelState kullanarak kaynağını ve durumunu tanımlayın. Modelleri uygulamanızın assets klasöründen, bir URI veya raw data üzerinden yükleyebilirsiniz.

val modelState = rememberSpatialGltfModelState(
    source = SpatialGltfModelSource.fromPath(
        Paths.get("models/model_name.glb")
    )
)

Durum tanımlandıktan sonra, alt uzayda oluşturmak için SpatialGltfModel composable'ı kullanın:

SpatialGltfModel(state = modelState, modifier = SubspaceModifier)

Kodla ilgili önemli noktalar

  • Eşzamansız yükleme: Model eşzamansız olarak yüklenir. İlk oluşturma sırasında, içsel boyutu sıfır olabilir. Model hazır olduğunda düzen yeniden ölçülür.
  • Durumu kontrol etme: Yükleme durumunu sorgulamak veya animasyonları kontrol etmek için SpatialGltfModelState.status kullanın.
  • Boyutlandırma ve ölçeklendirme: Varsayılan olarak, düzen boyutu öğenin sınırlayıcı kutusuyla eşleşir. Modeli belirtilen sınırlara sığacak şekilde eşit olarak ölçeklendirmek için bunu SubspaceModifier.size ile geçersiz kılabilirsiniz.

Compose SceneCoreEntity kullanarak 3D model yerleştirme

SceneCoreEntity kullanarak 3D model yerleştirmek için önce GltfModel.create() kullanarak glTF'yi belleğe yüklemeniz gerekir. Ardından, SceneCore bileşenleri ile XR için Compose düzenleri arasında köprü oluşturmak üzere 3D modeli SceneCoreEntity içine yerleştirebilirsiniz. Düzeninize 3D nesne yerleştirmek için SceneCoreEntity kullanma başlıklı makaleyi inceleyin.

Jetpack Scenecore kullanarak 3D model yerleştirme

glTF modelini yüklemek için GltfModel.create() yöntemini çağırın.

val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))

Bu noktada model belleğe yüklenir ancak henüz oluşturulmaz. Yüklenecek çok sayıda 3D modeliniz varsa veya modeliniz büyükse bunları önceden eşzamansız olarak yüklemeniz iyi bir fikirdir. Bu sayede kullanıcılar, modellerinizin belleğe yüklenmesini beklemek zorunda kalmaz.

glTF'yi ActivitySpace'e ekleyin. Bir varlık oluşturup ActivitySpace içine yerleştirmek için GltfModelEntity.create yöntemini çağırın. En iyi uygulama olarak, uygulamanın uzamsal özelliklere izin veren bir durumda olup olmadığını kontrol etmeniz gerekir.

if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) {
    val gltfEntity = GltfModelEntity.create(session, gltfModel)
}

Uygulamanızı çalıştırdığınızda yüklenen 3D modeli görebilirsiniz.

Yüklenen 3D model örneği

Scene Viewer'ı kullanarak 3D model yükleme

Temel etkileşim özelliklerine sahip bir 3D modeli yüklemenin en basit yolunu arıyorsanız Scene Viewer'ı mobil cihazlarda olduğu gibi kullanmayı tercih edebilirsiniz. Android XR'daki Scene Viewer ile mobil cihazlardaki Scene Viewer arasındaki temel fark, Scene Viewer'ın yalnızca glTF dosyasına işaret eden dosya URI parametresini desteklemesi ve diğer tüm parametrelerin yoksayılmasıdır.

Scene Viewer, bir intent kullanılarak çağrılan ve Tam Ekran Alanı modunda çalışan ayrı bir uygulamadır. Bu nedenle, bu API'yi çağırdığınızda uygulamanız artık görünmez ve Scene Viewer odaklanır. Değiştirdiğiniz ortamlar, kullanıcının sistem tercihlerine sıfırlanır.

Android XR'da Scene Viewer'da bir glTF dosyasını görüntülemek için Intent kullanma örneğini aşağıda bulabilirsiniz:

val url =
    "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/Avocado/glTF/Avocado.gltf"
val sceneViewerIntent = Intent(Intent.ACTION_VIEW)
val intentUri =
    Uri.parse("https://arvr.google.com/scene-viewer/1.2")
        .buildUpon()
        .appendQueryParameter("file", url)
        .build()
sceneViewerIntent.setData(intentUri)
try {
    startActivity(sceneViewerIntent)
} catch (e: ActivityNotFoundException) {
    // There is no activity that could handle the intent.
}

Scene Viewer'ın etkileşim seçenekleri hakkında daha fazla bilgi için 3D model tasarımı belgelerimizi inceleyin.

glTF uzantıları

Jetpack XR SDK, 3D modellerin özelliklerini genişleten çeşitli glTF uzantılarını destekler. Bu özellikler hem GltfModelEntity hem de Scene Viewer'da kullanılabilir.