Podczas pracy z modelami 3D pakiet Jetpack XR SDK obsługuje otwarty standard glTF 2.0. Gdy Android XR renderuje aplikacje utworzone za pomocą pakietu Jetpack XR SDK, modele 3D są renderowane za pomocą technik renderingu opartego na fizyce(PBR) określonych w standardzie glTF 2.0 (wraz z obsługiwanymi rozszerzeniami). Większość narzędzi do tworzenia treści cyfrowych (dcc), takich jak Autodesk Maya, Maxon ZBrush, Blender i Spline, może eksportować modele 3D do formatu glTF (pliki .gltf
lub .glb
).
Jeśli użytkownik lub aplikacja określił(a) niebo SpatialEnvironment
, modele 3D będą oświetlane za pomocą informacji o oświetleniu pochodzących z nieba. Materiały odbijające światło i odbicia selektywne będą odbijać niebo. Jeśli opcja Przepuszczanie jest włączona, oświetlenie, odbicia i odbłyski będą oparte na prostym, jasnym pomieszczeniu z jednym światłem kierunkowym.
Krótki przegląd obsługiwanych materiałów znajdziesz w specyfikacji glTF PBR na stronie Khronos.
Aplikacje utworzone za pomocą pakietu Jetpack XR SDK mogą wczytywać modele 3D na 2 główne sposoby.
- Wczytaj go do
ActivitySpace
, postępując zgodnie z instrukcjami podanymi w artykule Umieszczanie modelu 3D wActivitySpace
. - Korzystanie z wbudowanego widoku sceny za pomocą intencji
Umieszczenie modelu 3D w ActivitySpace
Po utworzeniu pliku glTF należy go dodać do katalogu zasobów w Android Studio. Zalecamy utworzenie katalogu models
, aby lepiej uporządkować typy zasobów.
Aby załadować model glTF, wywołaj funkcję GltfModel.create()
.
val gltfModel = GltfModel.create(session, "models/saturn_rings.glb").await()
W tym momencie model jest wczytywany do pamięci, ale nie jest jeszcze renderowany. Jeśli masz dużo modeli 3D do załadowania lub Twój model jest duży, warto je załadować asynchronicznie z wyprzedzeniem. Dzięki temu użytkownicy nie muszą czekać na załadowanie modeli do pamięci.
Musimy dodać plik glTF do ActivitySpace
. Wywołaj funkcję GltfModelEntity.create
, aby utworzyć element i umieścić go w ActivitySpace
. Zalecamy sprawdzenie, czy aplikacja jest w stanie, w którym można korzystać z funkcji przestrzennych.
if (session.scene.spatialCapabilities .hasCapability(SpatialCapabilities.SPATIAL_CAPABILITY_3D_CONTENT) ) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
Teraz, gdy uruchomisz aplikację, powinien się wyświetlić wczytany model 3D.
Umieszczenie modelu 3D w składzie
Nadal musisz wczytywać plik glTF do pamięci za pomocą funkcji GltfModel.create()
, ale jeśli tworzysz interfejs użytkownika za pomocą Jetpack Compose for XR, możesz umieszczać modele 3D w Volume
. Zapoznaj się z artykułem Używanie objętości do umieszczania obiektów 3D na stronie.
Animowanie modeli 3D
Zgodnie ze specyfikacją glTF modele 3D mogą zawierać osadzone animacje.
Pakiet SDK Jetpack XR obsługuje animacje szkieletowe (z rigiem), sztywnych obiektów oraz animacje morph target (kształty przejściowe). Obsługiwane są też animacje materiałów utworzone za pomocą rozszerzenia KHR_animation_pointer
glTF.
Aby odtworzyć animację, wywołaj funkcję startAnimation()
i wskaż nazwę animacji. Opcjonalnie możesz określić, czy animacja ma się odtwarzać w pętli.
gltfEntity.startAnimation(loop = true, animationName = "Walk")
Po wywołaniu startAnimation
po raz drugi bieżąca animacja zostanie zatrzymana i rozpocznie się nowa.
Bieżący stan animacji możesz sprawdzić za pomocą elementu getAnimationState()
.
Jeśli nazwa animacji podana podczas wywołania funkcji startAnimation()
nie istnieje, wywołanie zakończy się bez żadnego komunikatu, wszystkie uruchomione animacje zostaną zatrzymane, a funkcja getAnimationState()
zwróci wartość STOPPED
.
Wczytywanie modelu 3D za pomocą przeglądarki scen
Jeśli szukasz najprostszego sposobu na załadowanie modelu 3D z podstawowymi funkcjami interakcji, możesz użyć narzędzia Scene Viewer tak jak na urządzeniu mobilnym. Główna różnica między aplikacją Scene Viewer na Androida XR a na urządzenia mobilne polega na tym, że Scene Viewer obsługuje tylko parametr URI pliku wskazujący na plik glTF. Wszystkie inne parametry są ignorowane.
Scene Viewer to osobna aplikacja, która jest wywoływana za pomocą intencji i działa w trybie pełnego widoku. W efekcie, gdy go wywołasz, Twoja aplikacja nie będzie już widoczna, a program Scene Viewer będzie miał fokus. Wszystkie zmienione środowiska zostaną przywrócone do ustawień systemowych użytkownika.
Oto przykład użycia Intent
do wyświetlenia pliku glTF w przeglądarce Scene Viewer na urządzeniu z Androidem 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. }
Więcej informacji o opcjach interakcji w Scene Viewer znajdziesz w dokumentacji dotyczącej projektowania modeli 3D.
rozszerzenia glTF,
Pakiet Jetpack XR SDK obsługuje kilka rozszerzeń glTF, które zwiększają możliwości modeli 3D. Te funkcje są dostępne w GltfEntity
i w narzędziu do przeglądania scen.
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