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.
- Aşağıdaki bölümde açıklandığı şekilde
ActivitySpace
içine yükleyin: ActivitySpace'e 3D model yerleştirme - Amaç üzerinden yerleşik sahne görüntüleyiciyi kullanma
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.
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.
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.
KHR_animation_pointer
KHR_draco_mesh_compression
KHR_lights_punctual
KHR_materials_clearcoat
KHR_materials_sheen
KHR_materials_unlit
KHR_materials_variants
KHR_mesh_quantization
KHR_texture_basisu
KHR_texture_transform
EXT_texture_webp