Настраивайте 3D-модели в своем приложении.

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

После добавления 3D-модели в приложение вы можете улучшить визуальное и интерактивное взаимодействие, настроив её. Например, вы можете воспроизводить и управлять встроенными glTF-анимациями, определять пользовательские свойства материала (например, базовые цвета или металлическую шероховатость) и применять пользовательские текстуры к вашим 3D-моделям. Эти возможности позволяют динамически изменять внешний вид и поведение объекта во время выполнения.

Анимированные 3D-модели

В соответствии со спецификацией glTF, 3D-модели могут иметь встроенные анимации. В Jetpack XR SDK поддерживаются скелетные (риггированные), жесткие и морфинг-целевые (бленд-формы) анимации. Также поддерживаются анимации материалов, созданные с помощью расширения glTF KHR_animation_pointer .

Чтобы воспроизвести анимацию, укажите имя конкретной дорожки из списка animations . Вызовите GltfAnimation.start() для начала воспроизведения. При желании вы можете указать скорость, время перемотки и зацикливание анимации с помощью GltfAnimationStartOptions .

val animation = gltfEntity.animations.find { it.name == "Walk" }
animation?.start(GltfAnimationStartOptions(shouldLoop = true))

Вы также можете приостанавливать, возобновлять и останавливать анимацию с помощью функций pause() , resume() и stop() , а также использовать seekTo() для перехода к определенному моменту времени в дорожке анимации. Для запроса текущего состояния анимации используйте GltfAnimation.AnimationState .

Настройте свойства материала вашей 3D-модели.

Система материалов Jetpack XR основана на спецификации glTF™ 2.0 , а 3D-модели отображаются с использованием физически корректного рендеринга (PBR) . Вы можете настраивать атрибуты материалов во время выполнения, чтобы динамически изменять внешний вид объекта в зависимости от ввода пользователя или текущего состояния приложения.

Material определяет набор визуальных свойств поверхности объекта и определяет, как эта поверхность взаимодействует со светом в сцене.

В Jetpack XR для создания и управления этими материалами используются классы KhronosPbrMaterial и KhronosUnlitMaterial . Как следует из названия, KhronosUnlitMaterials не освещены и не подвержены влиянию освещения сцены. KhronosPbrMaterial позволяет настраивать более широкий спектр свойств, таких как цвет блеска, степень металличности или шероховатости объекта, а также излучает ли он свет.

Для получения более подробной информации о каждом поддерживаемом свойстве и настраиваемых параметрах в Android XR см. нашу справочную документацию . Для лучшего понимания этих свойств см. глоссарий Khronos .

Пример изменения базовых цветов на 3D-модели.

Чтобы настроить свойства материала вашей 3D-модели, сначала создайте новый материал с помощью KhronosPbrMaterial . Вам потребуется установить соответствующий AlphaMode для желаемого визуального эффекта:

val pbrMaterial = KhronosPbrMaterial.create(
    session = xrSession,
    alphaMode = AlphaMode.OPAQUE
)

Далее определите свойства, которые вы хотите изменить. В этом примере мы используем setBaseColorFactor для изменения базового цвета. Для этого метода требуется объект Vector4 , где компоненты x , y , z и w соответствуют значениям RGBA (красный, зеленый, синий и альфа-канал) соответственно:

pbrMaterial.setBaseColorFactor(
    Vector4(
        x = 0.5f,
        y = 0.0f,
        z = 0.5f,
        w = 1.0f
    )
)

Создавайте собственные текстуры для своей 3D-модели.

Texture — это графический ресурс, который можно применить к поверхности 3D-модели для придания ей цвета, детализации или другой информации о поверхности. API текстур Jetpack XR позволяет асинхронно загружать данные изображений, такие как файлы PNG, из папки /assets/ вашего приложения.

При загрузке текстуры можно указать TextureSampler , который управляет отображением текстуры. Сэмплер определяет свойства фильтрации (когда текстура отображается меньше или больше своего исходного размера) и режимы обертывания (для обработки координат, выходящих за пределы стандартного диапазона [0, 1] ). Сам по себе объект Texture — это просто данные; для визуального эффекта на 3D-модели его необходимо присвоить объекту Material .

Пример изменения текстуры на 3D-модели.

Для создания пользовательской текстуры сначала необходимо сохранить файл изображения в папку /assets/ . В качестве рекомендации, вы можете также создать подкаталог textures в этой папке.

После сохранения файла в соответствующей директории создайте текстуру с помощью Texture API. Здесь же, при необходимости, можно применить TextureSampler :

val texture = Texture.create(
    session = xrSession,
    path = Path("textures/texture_file.png")
)

Далее определите тип текстуры и задайте соответствующие параметры. В этом примере мы применяем текстуру окклюзии и задаем силу затенения:

pbrMaterial.setOcclusionTexture(
    texture = texture,
    strength = 1.0f
)

Примените материалы и текстуры к вашим 3D-объектам.

Чтобы применить новый материал или текстуру, переопределите существующий материал для конкретного узла в вашем glTF-узле. Для этого вызовите setMaterialOverride для GltfModelNode :

gltfModelNode.setMaterialOverride(
    material = pbrMaterial
)

Чтобы удалить вновь созданные материалы, вызовите clearMaterialOverride для ранее переопределенного узла в вашем GltfModelNode . Это вернет вашу 3D-модель в состояние по умолчанию:

gltfModelNode.clearMaterialOverride()


glTF и логотип glTF являются товарными знаками Khronos Group Inc.