Uygulamanıza 3D model ekleme

Jetpack XR SDK'sı, 3D modellerle çalışırken glTF 2.0 açık standardını destekler. Android XR, Jetpack XR SDK'sı ile oluşturulan uygulamaları oluştururken 3D modelleri, glTF 2.0 standardında belirtilen fiziksel tabanlı oluşturma(PBR) teknikleriyle (desteklenen extensions ile birlikte) oluşturur. 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 ışıklandırma bilgileriyle aydınlatılır. Yansıtıcı malzemeler ve parıltılı vurgular da ortam skybox'unu yansıtır. Geçiş etkinleştirildiyse ışıklandırma, yansımalar ve parıltı vurguları, tek yönlü ışık içeren basit ve parlak bir odaya dayanır.

Desteklenen materyallere hızlıca göz atmak için Khronos sitesinde glTF PBR Özellikleri'ne bakın.

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

Etkinlik alanına 3D model yerleştirme

glTF dosyanız hazır olduğunda sonraki adım, dosyayı Android Studio'nun assets dizinine eklemektir. Öğe türlerinizi daha iyi düzenlemek için bir models dizini oluşturmanızı öneririz.

/modeller dizinine öğe ekleme örneği

glTF modelini yüklemek için createGltfResourceAsync işlevini çağırın.

// load the gltf file
val gltfModel = xrSession.createGltfResourceAsync("models/saturn_rings.glb").await()

Bu noktada model belleğe yüklenir ancak henüz oluşturulmaz. Yüklemeniz gereken ç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ın modellerinizin belleğe yüklenmesini beklemesi gerekmez.

glTF'yi ActivitySpace dosyasına eklememiz gerekiyor. Bir öğe oluşturmak ve ActivitySpace içine yerleştirmek için createGltfEntity işlevini çağırın. En iyi uygulama olarak, uygulamanın mekansal özelliklere izin veren bir durumda olup olmadığını kontrol etmeniz gerekir.

// check for spatial capabilities
if (xrSession.getSpatialCapabilities().hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT)){
  // create the gltf entity using the gltf file from the previous snippet
   val gltfEntity = xrSession.createGltfEntity(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 bir derleme hacmine yerleştirme

createGltfResourceAsync kullanarak glTF'yi belleğe yüklemeniz gerekecek olsa da kullanıcı arayüzünüzü XR için Jetpack Compose ile oluşturuyorsanız 3D modelleri Volume içine yerleştirebilirsiniz. Düzenlemenize 3D nesne yerleştirmek için Hacim kullanma başlıklı makaleyi inceleyin.

3D modelleri animasyonlu hale getirme

glTF spesifikasyonunun bir parçası olarak 3D modellere animasyon yerleştirilebilir. Jetpack XR SDK'sında iskelet (rig), katı, şekil değiştirme hedefi (karışım şekilleri) animasyonlarının tümü desteklenir. KHR_animation_pointer glTF uzantısıyla oluşturulan malzeme animasyonları da desteklenir.

Bir animasyonu oynatmak için startAnimation işlevini çağırın ve animasyonu belirtin. İsteğe bağlı olarak, animasyonun sonsuz döngüye girip girmeyeceğini belirtebilirsiniz.

//start a looping walk animation for a model
gltfEntity.startAnimation(loop = true, animationName = "Walk")

startAnimation işlevi ikinci kez çağrılırsa mevcut animasyon durdurulur ve yeni animasyon başlar.

getAnimationState() aracılığıyla animasyonun mevcut durumunu sorgulayabilirsiniz.

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

Sahne Görüntüleyici'yi kullanarak 3D model yükleme

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

Sahne Görüntüleyici, bir intent aracılığıyla çağrılan ve Tam Alan Modu'nda çalışan ayrı bir uygulamadır. Bu nedenle, bu özelliği çağırdığınızda uygulamanız artık görünmez ve sahne görüntüleyiciye odaklanılır. Değiştirmiş olabileceğiniz tüm ortamlar, kullanıcının sistem tercihlerine sıfırlanır.

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

val THREED_MODEL_URL = "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/FlightHelmet/glTF/FlightHelmet.gltf"
val MIME_TYPE = "model/gltf-binary"
val sceneViewerIntent = Intent(Intent.ACTION_VIEW)
val intentUri =
  Uri.parse("https://arvr.google.com/scene-viewer/1.2")
     .buildUpon()
     .appendQueryParameter("file", THREED_MODEL_URL)
     .build()
sceneViewerIntent.setDataAndType(intentUri, MIME_TYPE)
startActivity(sceneViewerIntent)

Sahne Görüntüleyici'nin etkileşim seçenekleri hakkında daha fazla bilgi için 3D model tasarımı dokümanlarımıza bakın.

glTF uzantıları

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