После добавления 3D-модели в приложение вы можете улучшить визуальное восприятие, определив пользовательские свойства материала и применив текстуры к объекту. Система материалов Jetpack XR основана на спецификации glTF™ 2.0 , а 3D-модели отображаются с использованием физически корректного рендеринга (PBR) . Это открытые стандарты, поддерживаемые Khronos Group.
Атрибуты материала можно настраивать во время выполнения, чтобы динамически изменять внешний вид объекта в зависимости от ввода пользователя или текущего состояния приложения.
Подробную информацию о каждом поддерживаемом свойстве и настраиваемых параметрах в Android XR см. в нашей справочной документации . Для лучшего понимания этих свойств см. глоссарий Khronos .
Настройте свойства материала вашей 3D-модели.
Material определяет набор визуальных свойств поверхности объекта и определяет, как эта поверхность взаимодействует со светом в сцене.
В Jetpack XR для создания и управления этими материалами используются классы KhronosPbrMaterial и KhronosUnlitMaterial . Как следует из названия, KhronosUnlitMaterials не освещены и не подвержены влиянию освещения сцены. KhronosPbrMaterial позволяет настраивать более широкий спектр свойств, таких как цвет блеска, степень металличности или шероховатости объекта, а также излучает ли он свет.

Чтобы настроить свойства материала вашей 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 .

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