При работе с 3D-моделями Jetpack XR SDK поддерживает открытый стандарт glTF 2.0. Когда Android XR отрисовывает приложения, созданные с помощью Jetpack XR SDK, 3D-модели будут отрисовываться с использованием физически корректной отрисовки(PBR), указанной в стандарте glTF 2.0 (вместе с поддерживаемыми расширениями). Большинство инструментов для создания цифрового контента, например Autodesk Maya, Maxon ZBrush, Blender и Spline, позволяют экспортировать 3D-модели в формат glTF (файлы .gltf или .glb).
Если пользователь или ваше приложение задали SpatialEnvironment скайбокс, 3D-модели будут освещены в соответствии с информацией, предоставленной скайбоксом окружения. Отражающие материалы и блики также будут отражать скайбокс окружения. Если сквозной режим включен, освещение, отражения и блики будут основаны на ярком освещении комнаты с одним направленным источником света.
Краткую информацию о поддерживаемых материалах можно найти на сайте Khronos в разделе glTF PBR Properties. Чтобы узнать, как задать эти и другие свойства для 3D-моделей, ознакомьтесь с разделом Как настроить 3D-модели в приложении.
Как добавить файл glTF в папку объектов
После того как у вас появится файл glTF, следующим шагом будет добавление его в каталог ресурсов в Android Studio. Мы рекомендуем создать каталог models, чтобы упорядочить объекты.

Как добавить 3D-объект с помощью SpatialGltfModel
Android XR поддерживает формат glTF для 3D-моделей, которые обычно сохраняются в виде файлов .glb. Чтобы добавить эти объекты в макет, используйте composable-функцию SpatialGltfModel. Этот API упрощает процесс загрузки объектов и управления их состоянием.
Чтобы отобразить модель, сначала определите ее источник и состояние с помощью rememberSpatialGltfModelState. Вы можете загружать модели из папки assets приложения, URI или raw data.
val modelState = rememberSpatialGltfModelState( source = SpatialGltfModelSource.fromPath( Paths.get("models/model_name.glb") ) )
После того как состояние определено, используйте composable-функцию SpatialGltfModel, чтобы отрисовать его в подпространстве.
SpatialGltfModel(state = modelState, modifier = SubspaceModifier)
Как разместить 3D-модель с помощью Compose SceneCoreEntity
Чтобы разместить 3D-модель с помощью SceneCoreEntity, сначала нужно загрузить glTF в память с помощью GltfModel.create(). Затем вы можете поместить 3D-модель в SceneCoreEntity, чтобы связать компоненты SceneCore с макетами Compose для XR. Подробнее о том, как разместить 3D-объект в макете с помощью SceneCoreEntity…
Как разместить 3D-модель с помощью Jetpack Scenecore
Чтобы загрузить модель glTF, вызовите метод GltfModel.create().
val gltfModel = GltfModel.create(session, Paths.get("models", "saturn_rings.glb"))
На этом этапе модель загружается в память, но ещё не отрисовывается. Если вам нужно загрузить много 3D-моделей или модель имеет большой размер, рекомендуется загружать их асинхронно заранее. Это позволит пользователям не ждать, пока ваши модели загрузятся в память.
Добавьте glTF-файл в ActivitySpace. Вызовите метод GltfModelEntity.create, чтобы создать объект и поместить его в ActivitySpace. Рекомендуем проверять, находится ли приложение в состоянии, которое позволяет использовать пространственные возможности.
if (session.scene.spatialCapabilities.contains(SpatialCapability.SPATIAL_3D_CONTENT)) { val gltfEntity = GltfModelEntity.create(session, gltfModel) }
Теперь при запуске приложения вы увидите загруженную 3D-модель.

Как загрузить 3D-модель с помощью Scene Viewer
Если вам нужно загрузить трехмерную модель с базовыми возможностями взаимодействия, вы можете использовать Scene Viewer так же, как на мобильном устройстве. Основное отличие между Scene Viewer на Android XR и на мобильных устройствах заключается в том, что Scene Viewer поддерживает только параметр URI файла, указывающий на файл glTF, а все остальные параметры игнорируются.
Scene Viewer – это отдельное приложение, которое запускается с помощью намерения и работает в режиме полного пространства. В результате при вызове приложение больше не будет видно, а фокус будет установлен на Scene Viewer. Все настройки, которые вы могли изменить, будут сброшены до системных настроек пользователя.
Вот пример использования Intent для просмотра файла glTF в Scene Viewer на устройстве 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. }
Подробнее о вариантах взаимодействия с Scene Viewer рассказывается в документации по дизайну 3D-моделей.
Расширения glTF
Jetpack XR SDK поддерживает несколько расширений glTF, которые расширяют возможности 3D-моделей. Эти возможности доступны как в GltfModelEntity, так и в 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