После добавления 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-модели, сначала создайте новый материал с помощью 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 .

Для создания пользовательской текстуры сначала необходимо сохранить файл изображения в папку /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.