Добавьте 3D-модели в свое приложение

Применимые устройства XR
Данное руководство поможет вам создавать приложения для устройств XR такого типа.
XR-гарнитуры
Проводные XR-очки

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

Если пользователь или ваше приложение указали скайбокс SpatialEnvironment , 3D-модели будут освещаться с использованием информации об освещении, предоставляемой скайбоксом окружения. Отражающие материалы и блики также будут отражать скайбокс окружения. Если включена функция сквозного освещения, то освещение, отражения и блики будут основаны на освещенной комнате с одним направленным источником света.

Для быстрого ознакомления с поддерживаемыми материалами обратитесь к свойствам glTF PBR на сайте Khronos. Чтобы узнать, как настраивать ваши 3D-модели с помощью этих и других свойств, см. раздел «Настройка 3D-моделей в вашем приложении».

Добавьте файл glTF в папку assets.

После того, как у вас есть файл glTF, следующим шагом будет добавление его в каталог assets в Android Studio. Мы рекомендуем создать каталог models для лучшей организации типов ресурсов.

Пример добавления ресурсов в каталог /models

Добавьте 3D-объект, используя SpatialGltfModel.

Android XR поддерживает формат glTF для 3D-моделей, обычно сохраняемых в виде файлов .glb . Чтобы добавить эти объекты в свой макет, используйте компонент SpatialGltfModel . Этот API упрощает процесс загрузки ресурсов и управления их состоянием.

Для отображения модели сначала определите её источник и состояние с помощью rememberSpatialGltfModelState . Вы можете загружать модели из папки assets вашего приложения, по URI или raw data .

val modelState = rememberSpatialGltfModelState(
    source = SpatialGltfModelSource.fromPath(
        Paths.get("models/model_name.glb")
    )
)

После определения состояния используйте составной объект SpatialGltfModel для его отображения в подпространстве.

SpatialGltfModel(state = modelState, modifier = SubspaceModifier)

Разместите 3D-модель, используя Compose SceneCoreEntity.

Для размещения 3D-модели с помощью SceneCoreEntity сначала необходимо загрузить glTF-файл в память, используя GltfModel.create() . Затем вы можете разместить 3D-модель в SceneCoreEntity , чтобы связать компоненты SceneCore с макетами Compose for XR. См. раздел « Использование SceneCoreEntity для размещения 3D-объекта в вашем макете» .

Разместите 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-модели

Загрузите 3D-модель с помощью средства просмотра сцены.

Если вам нужен самый простой способ загрузить 3D-модель с базовыми возможностями взаимодействия, вы можете использовать Scene Viewer так же, как и на мобильном устройстве . Ключевое отличие Scene Viewer на Android XR от версии для мобильных устройств заключается в том, что Scene Viewer поддерживает только параметр URI файла, указывающий на файл glTF, а все остальные параметры игнорируются.

Scene Viewer — это отдельное приложение, которое запускается с помощью Intent и работает в режиме полного рабочего пространства. В результате, при его запуске ваше приложение перестанет быть видимым, и фокус перейдет к 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.
}

Для получения более подробной информации о возможностях интерактивного взаимодействия в окне просмотра сцен обратитесь к нашей документации по проектированию 3D-моделей .

расширения glTF

Jetpack XR SDK поддерживает несколько расширений gfTF, которые расширяют возможности 3D-моделей. Эти возможности доступны как через GltfModelEntity , так и через Scene Viewer.