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

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

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

Атрибуты материала можно настраивать во время выполнения, чтобы динамически изменять внешний вид объекта в зависимости от ввода пользователя или текущего состояния приложения.

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

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

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

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

Пример изменения базовых цветов на 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 = 0.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 для объекта GltfModelEntity :

gltfModelEntity.setMaterialOverride(
    material = pbrMaterial,
    nodeName = "Node Name"
)

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

gltfModelEntity.clearMaterialOverride(
    nodeName = "Node Name"
)


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