Menambahkan model 3D ke aplikasi

Perangkat XR yang kompatibel
Panduan ini membantu Anda membangun pengalaman untuk jenis perangkat XR ini.
Headset XR
Kacamata XR Berkabel

Saat bekerja dengan model 3D, Jetpack XR SDK mendukung standar terbuka glTF 2.0. Saat merender aplikasi yang dibuat dengan Jetpack XR SDK, Android XR akan merender model 3D dengan teknik rendering berbasis fisik(PBR) yang ditentukan dalam standar glTF 2.0 (bersama dengan ekstensi yang didukung). Sebagian besar alat pembuatan konten digital (dcc), seperti Autodesk Maya, Maxon ZBrush, Blender, dan Spline, dapat mengekspor model 3D ke format glTF (file .gltf atau .glb).

Jika skybox SpatialEnvironment telah ditentukan oleh pengguna atau aplikasi Anda, model 3D akan diterangi dengan informasi pencahayaan yang disediakan oleh skybox lingkungan. Material reflektif dan sorotan spekular juga akan memantulkan skybox lingkungan. Jika passthrough telah diaktifkan, pencahayaan, pantulan, dan sorotan spekular akan didasarkan pada ruangan yang sederhana dan terang dengan satu cahaya terarah.

Untuk ringkasan singkat tentang materi yang didukung, lihat Properti PBR glTF di situs Khronos.

Ada dua cara utama bagi aplikasi yang dibuat dengan Jetpack XR SDK untuk memuat model 3D.

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.

Contoh menambahkan aset ke direktori /models

Untuk memuat model glTF, panggil GltfModel.create().

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

Pada tahap ini, model dimuat ke dalam memori, tetapi belum dirender. Jika Anda memiliki banyak model 3D untuk dimuat atau model Anda berukuran besar, sebaiknya muat model tersebut secara asinkron terlebih dahulu. Dengan begitu, pengguna tidak perlu menunggu model Anda dimuat ke dalam memori.

Kita perlu menambahkan glTF ke ActivitySpace. Panggil GltfModelEntity.create untuk membuat entity dan menempatkannya ke dalam ActivitySpace. Sebagai praktik terbaik, Anda harus memeriksa apakah aplikasi berada dalam status yang memungkinkan kemampuan spasial.

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

Sekarang Anda akan melihat model 3D yang dimuat saat menjalankan aplikasi.

Contoh model 3D yang dimuat

Menempatkan model 3D ke dalam Compose SceneCoreEntity

Meskipun Anda tetap perlu memuat glTF ke dalam memori menggunakan GltfModel.create(), Anda dapat menempatkan model 3D ke dalam SceneCoreEntity jika membuat UI dengan Jetpack Compose untuk XR. Lihat Menggunakan SceneCoreEntity untuk menempatkan objek 3D dalam tata letak.

Menganimasikan model 3D

Sebagai bagian dari spesifikasi glTF, model 3D dapat memiliki animasi yang disematkan. Animasi kerangka (rigged), kaku, target morph (bentuk campuran) semuanya 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 berulang tanpa batas.

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

Dengan 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 tanpa pemberitahuan, semua animasi yang sedang berjalan akan berhenti, dan getAnimationState() akan menampilkan STOPPED.

Memuat model 3D menggunakan Scene Viewer

Jika Anda mencari cara paling sederhana 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 menggunakan intent dan berjalan dalam Mode Ruang Penuh. Akibatnya, saat Anda memanggilnya, aplikasi Anda tidak akan lagi terlihat dan Scene Viewer akan memiliki fokus. Lingkungan yang mungkin telah Anda ubah akan direset ke preferensi sistem pengguna.

Berikut contoh penggunaan Intent untuk melihat file glTF di Scene Viewer di Android XR:

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.
}

Untuk mengetahui informasi selengkapnya tentang opsi interaktivitas untuk Scene Viewer, lihat dokumentasi desain model 3D kami.

Ekstensi glTF

Jetpack XR SDK mendukung beberapa ekstensi glTF yang memperluas kemampuan model 3D. Kemampuan ini tersedia melalui GltfModelEntity dan Scene Viewer.