Saat menangani model 3D, Jetpack XR SDK mendukung standar terbuka glTF
2.0. Saat Android XR merender aplikasi yang di-build dengan
Jetpack XR SDK, model 3D akan dirender dengan teknik rendering berbasis
fisik(PBR) yang ditentukan dalam standar glTF 2.0
(beserta extensions
yang didukung). Sebagian besar alat pembuatan
konten digital (dcc), seperti Autodesk Maya, Maxon
ZBrush, Blender, dan Spline dapat
mengekspor model 3D ke dalam format glTF (file .gltf
atau .glb
).
Jika skybox SpatialEnvironment
telah ditentukan oleh pengguna
atau oleh aplikasi Anda, model 3D akan diterangi dengan informasi pencahayaan yang disediakan oleh
skybox lingkungan. Bahan reflektif dan sorotan specular juga akan
mencerminkan skybox lingkungan. Jika passthrough telah diaktifkan, pencahayaan, pantulan, dan sorotan specular akan didasarkan pada ruangan yang sederhana dan terang dengan satu lampu terarah.
Untuk ringkasan singkat tentang materi yang didukung, lihat Properti glTF PBR di situs Khronos.
Ada dua cara utama bagi aplikasi yang dibuat dengan Jetpack XR SDK untuk memuat model 3D.
- Muat ke
ActivitySpace
seperti yang dijelaskan di bagian berikut, Menempatkan model 3D ke dalam ActivitySpace - Menggunakan Scene Viewer bawaan melalui intent
Menempatkan model 3D ke dalam ActivitySpace
Setelah Anda memiliki file glTF, langkah berikutnya adalah menambahkannya ke direktori aset
di Android Studio. Sebaiknya buat direktori models
untuk mengatur
jenis aset Anda dengan lebih baik.
Untuk memuat model glTF, panggil createGltfResourceAsync
.
// load the gltf file
val gltfModel = xrSession.createGltfResourceAsync("models/saturn_rings.glb").await()
Pada tahap ini, model dimuat ke dalam memori, tetapi belum dirender. Jika Anda memiliki banyak model 3D yang akan dimuat atau model Anda berukuran besar, sebaiknya muat model tersebut secara asinkron terlebih dahulu. Dengan demikian, pengguna tidak perlu menunggu model Anda dimuat ke dalam memori.
Kita perlu menambahkan glTF ke ActivitySpace
. Panggil
createGltfEntity
untuk membuat entity dan menempatkannya ke dalam
ActivitySpace
. Sebagai praktik terbaik, Anda harus memastikan aplikasi berada dalam status
yang memungkinkan kemampuan spasial.
// 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)
}
Sekarang Anda akan melihat model 3D yang dimuat saat menjalankan aplikasi.
Menempatkan model 3D ke dalam Volume Compose
Meskipun Anda masih perlu memuat glTF ke dalam memori menggunakan
createGltfResourceAsync
, Anda dapat menempatkan model 3D ke dalam
Volume
jika membuat UI dengan Jetpack Compose untuk
XR. Lihat Menggunakan Volume untuk menempatkan objek 3D dalam tata letak.
Menganimasikan model 3D
Sebagai bagian dari spesifikasi glTF, model 3D dapat memiliki animasi yang disematkan.
Semua animasi skeletal (rigged), kaku, dan morph target (blend shape)
didukung di Jetpack XR SDK. Animasi material yang dibuat dengan
ekstensi glTF KHR_animation_pointer
juga didukung.
Untuk memutar animasi, panggil startAnimation
dan tentukan
nama animasi. Secara opsional, Anda dapat menentukan apakah animasi
harus diulang tanpa batas atau tidak.
//start a looping walk animation for a model
gltfEntity.startAnimation(loop = true, animationName = "Walk")
Memanggil startAnimation
untuk kedua kalinya, animasi saat ini akan berhenti dan
animasi baru akan dimulai.
Anda dapat mengkueri status animasi saat ini melalui
getAnimationState()
.
Jika nama animasi yang ditentukan saat memanggil startAnimation()
tidak ada,
panggilan akan gagal secara otomatis, animasi yang berjalan akan berhenti, dan getAnimationState()
akan menampilkan STOPPED
.
Memuat model 3D menggunakan Scene Viewer
Jika Anda mencari cara termudah untuk memuat model 3D dengan kemampuan interaksi dasar, Anda dapat memilih untuk menggunakan Scene Viewer seperti yang Anda lakukan di perangkat seluler. Perbedaan utama antara Scene Viewer di Android XR dan di perangkat seluler adalah Scene Viewer hanya mendukung parameter URI file yang mengarah ke file glTF dan semua parameter lainnya diabaikan.
Scene Viewer adalah aplikasi terpisah yang dipanggil melalui intent dan berjalan dalam Mode Ruang Penuh. Akibatnya, saat Anda memanggilnya, aplikasi Anda tidak akan terlihat lagi dan Scene Viewer akan memiliki fokus. Setiap lingkungan yang mungkin Anda ubah akan direset ke preferensi sistem pengguna.
Berikut adalah contoh penggunaan Intent
untuk
melihat file glTF di Scene Viewer di Android XR:
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)
Untuk mengetahui informasi selengkapnya tentang opsi interaktivitas untuk Scene Viewer, lihat dokumentasi desain model 3D kami.
Ekstensi glTF
Jetpack XR SDK mendukung beberapa ekstensi gfTF yang memperluas kemampuan
model 3D. Kemampuan ini tersedia melalui
GltfEntity
dan Scene Viewer.
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