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 renderowania fizycznego(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 (.gltf lub .glb plików).
Jeśli użytkownik lub Twoja
aplikacja określił(a) pole SpatialEnvironment skybox, modele 3D będą oświetlane informacjami o oświetleniu dostarczonymi przez pole środowiska
skybox. Materiały odblaskowe i odbicia lustrzane będą również odzwierciedlać pole skybox środowiska. Jeśli włączono tryb passthrough, oświetlenie, odbicia i odbicia lustrzane będą oparte na jasnym pomieszczeniu z jednym światłem kierunkowym.
Krótki przegląd obsługiwanych materiałów znajdziesz na stronie Khronos w sekcji glTF PBR Properties. Aby dowiedzieć się, jak dostosować modele 3D za pomocą tych i innych właściwości, przeczytaj artykuł Dostosowywanie modeli 3D w aplikacji
Dodawanie pliku glTF do folderu zasobów
Gdy masz już plik glTF, następnym krokiem jest dodanie go do katalogu zasobów w Android Studio. Aby lepiej uporządkować typy zasobów, zalecamy utworzenie katalogu models.

Dodawanie obiektu 3D za pomocą elementu SpatialGltfModel
Android XR obsługuje format glTF dla modeli 3D, które są zwykle zapisywane jako pliki
.glb. Aby dodać te obiekty do układu, użyj elementu kompozycyjnego
SpatialGltfModel. Ten interfejs API upraszcza proces wczytywania zasobów i zarządzania ich stanem.
Aby wyświetlić model, najpierw zdefiniuj jego źródło i stan za pomocą
rememberSpatialGltfModelState. Modele możesz wczytywać
z folderu assets aplikacji, URI lub
raw data.
val modelState = rememberSpatialGltfModelState( source = SpatialGltfModelSource.fromPath( Paths.get("models/model_name.glb") ) )
Po zdefiniowaniu stanu użyj elementu kompozycyjnego SpatialGltfModel, aby go wyrenderować w podprzestrzeni.
SpatialGltfModel(state = modelState, modifier = SubspaceModifier)
Umieszczanie modelu 3D za pomocą elementu Compose SceneCoreEntity
Aby umieścić model 3D za pomocą elementu SceneCoreEntity, musisz najpierw wczytać
plik glTF do pamięci za pomocą elementu GltfModel.create(). Następnie możesz umieścić model 3D
w elemencie SceneCoreEntity, aby połączyć komponenty SceneCore z
układami Compose for XR. Więcej informacji znajdziesz w artykule
Umieszczanie obiektu 3D w układzie za pomocą elementu SceneCoreEntity.
Umieszczanie modelu 3D za pomocą pakietu Jetpack Scenecore
Aby wczytać model glTF, wywołaj element GltfModel.create().
val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))
W tym momencie model jest wczytany do pamięci, ale nie jest jeszcze renderowany. Jeśli masz do wczytania wiele modeli 3D lub model jest duży, warto wczytać je asynchronicznie z wyprzedzeniem. Dzięki temu użytkownicy nie muszą czekać, aż modele zostaną wczytane do pamięci.
Dodaj plik glTF do elementu ActivitySpace. Wywołaj
GltfModelEntity.create, aby utworzyć encję i umieścić ją w elemencie
ActivitySpace. Zalecamy sprawdzenie, czy aplikacja jest w stanie, który umożliwia korzystanie z funkcji przestrzennych.
if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
Po uruchomieniu aplikacji powinien być widoczny wczytany model 3D.

Wczytywanie modelu 3D za pomocą Scene Viewer
Jeśli szukasz najprostszego sposobu na wczytanie modelu 3D z podstawowymi możliwościami interakcji, możesz optować za użyciem Scene Viewer tak jak na urządzeniu mobilnym. Kluczową różnicą między Scene Viewer na Androidzie XR a na urządzeniu mobilnym jest to, że Scene Viewer obsługuje tylko parametr file URI wskazujący plik glTF, a wszystkie inne parametry są ignorowane.
Scene Viewer to osobna aplikacja, która jest wywoływana za pomocą intencji i działa w trybie pełnej przestrzeni. W związku z tym, gdy ją wywołasz, Twoja aplikacja nie będzie już widoczna, a Scene Viewer będzie aktywny. Wszystkie środowiska, które mogły zostać zmienione zostaną zresetowane do preferencji systemowych użytkownika.
Oto przykład użycia elementu Intent do wyświetlenia pliku glTF w Scene Viewer
na Androidzie 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 interaktywności w Scene Viewer znajdziesz w naszej 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 możliwości są dostępne zarówno w elem
GltfModelEntity, jak i w Scene Viewer.
KHR_animation_pointerKHR_draco_mesh_compressionKHR_lights_punctualKHR_materials_clearcoatKHR_materials_sheenKHR_materials_unlitKHR_materials_variantsKHR_mesh_quantizationKHR_texture_basisuKHR_texture_transformEXT_texture_webp