Uygulamanıza 3D model ekleme

Geçerli XR cihazlar
Bu kılavuz, bu tür XR cihazlar için deneyimler oluşturmanıza yardımcı olur.
XR Kulaklıklar
Kablolu XR Gözlükler

Jetpack XR SDK, 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 fiziksel 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 gökyüzü kutusu belirtilmişse 3D modeller, ortam gökyüzü kutusu tarafından sağlanan aydınlatma bilgileriyle aydınlatılır. Yansıtıcı malzemeler ve parlak noktalar da ortam gökyüzü kutusunu yansıtır. Geçiş modu etkinleştirilmişse aydınlatma, yansımalar ve parlak noktalar tek yönlü ışığın bulunduğu basit ve parlak bir odaya göre ayarlanır.

Desteklenen materyallere hızlıca göz atmak için Khronos sitesindeki glTF PBR Properties (glTF PBR Özellikleri) bölümüne bakın.

Jetpack XR SDK ile oluşturulan uygulamaların 3D modelleri yüklemesinin iki temel yolu vardır.

Etkinlik alanına 3D model yerleştirme

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

/models dizinine öğe ekleme örneği

glTF modelini yüklemek için GltfModel.create() işlevini ç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 önerilir. Böylece kullanıcılar, modellerinizin belleğe yüklenmesini beklemek zorunda kalmaz.

glTF'yi ActivitySpace içine eklememiz gerekir. GltfModelEntity.create adlı işlevi çağırarak bir öğe oluşturun ve ActivitySpace içine yerleştirin. En iyi uygulama olarak, uygulamanın, uzamsal özelliklere izin veren bir durumda olduğunu kontrol etmeniz gerekir.

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

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

Yüklenen 3D model örneği

Bir 3D modeli Compose SceneCoreEntity'ye yerleştirme

glTF'yi GltfModel.create() kullanarak belleğe yüklemeniz gerekse de kullanıcı arayüzünüzü XR için Jetpack Compose ile oluşturuyorsanız 3D modelleri SceneCoreEntity içine yerleştirebilirsiniz. Düzeninize 3D nesne yerleştirmek için SceneCoreEntity kullanma başlıklı makaleyi inceleyin.

3D modelleri animasyon haline getirme

3D modeller, glTF spesifikasyonunun bir parçası olarak animasyonlar içerebilir. İskeletli (rigged), sert, şekil değiştirme hedefli (karıştırma şekilleri) animasyonların tümü Jetpack XR SDK'sında desteklenir. KHR_animation_pointer glTF uzantısıyla oluşturulan materyal animasyonları da desteklenir.

Bir animasyonu oynatmak için startAnimation() işlevini çağırın ve animasyonun adını belirtin. İsteğe bağlı olarak animasyonun süresiz olarak döngüye girmesini isteyip istemediğinizi belirtebilirsiniz.

gltfEntity.startAnimation(loop = true, animationName = "Walk")

startAnimation işlevini ikinci kez çağırdığınızda mevcut animasyon durur ve yeni animasyon başlar.

getAnimationState() işlevini kullanarak animasyonun mevcut durumunu sorgulayabilirsiniz.

startAnimation() çağrılırken belirtilen animasyon adı yoksa çağrı sessizce başarısız olur, çalışan tüm animasyonlar durur ve getAnimationState(), STOPPED değerini döndürür.

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 ve 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 yok sayılmasıdır.

Scene Viewer, bir amaç kullanılarak çağrılan ve FullSpace Modu'nda çalışan ayrı bir uygulamadır. Bu nedenle, bu yöntemi çağırdığınızda uygulamanız artık görünmez ve Scene Viewer odaklanır. Değiştirmiş olabileceğiniz tüm 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'daki etkileşim seçenekleri hakkında daha fazla bilgi için 3D model tasarım belgelerimize bakın.

glTF uzantıları

Jetpack XR SDK, 3D modellerin özelliklerini genişleten çeşitli gfTF uzantılarını destekler. Bu özellikler hem GltfModelEntity hem de Sahne Görüntüleyici üzerinden kullanılabilir.