Personalizar modelos 3D no app

Dispositivos XR relevantes
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos XR.
Headsets XR
Óculos XR com fio

Depois de adicionar um modelo 3D ao app, você pode melhorar a experiência visual e interativa personalizando-o. Por exemplo, é possível reproduzir e controlar animações glTF incorporadas, definir propriedades de materiais personalizados (como cores básicas ou rugosidade metálica) e aplicar texturas personalizadas aos seus modelos 3D. Com esses recursos, é possível alterar dinamicamente a aparência e o comportamento de um objeto no tempo de execução.

Animar modelos 3D

Como parte da especificação glTF, os modelos 3D podem ter animações incorporadas. Animações esqueléticas (manipuladas), rígidas e de destino de transformação (formas de combinação) são todas compatíveis com o SDK do Jetpack XR. Também há suporte para animações do Material criadas com a KHR_animation_pointer extensão glTF.

Para tocar uma animação, especifique o nome da faixa específica na lista de animations. Chame GltfAnimation.start() para começar a jogar. Você pode especificar a velocidade, o tempo de busca e se a animação deve ser repetida usando GltfAnimationStartOptions.

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

Você também pode pause(), resume() e stop() animações, além de usar seekTo() para pular para um momento específico na faixa de animação. Para consultar o estado atual da animação, use GltfAnimation.AnimationState.

Personalizar as propriedades de material do modelo 3D

O sistema de materiais do Jetpack XR é baseado na especificação glTF™ 2.0 (em inglês), e os modelos 3D são renderizados usando a renderização baseada em física (PBR) (em inglês). É possível ajustar os atributos de material durante o tempo de execução para mudar a aparência de um objeto de forma dinâmica com base na entrada do usuário ou no estado atual do app.

Um Material define um conjunto de propriedades visuais para a superfície de um objeto e determina como essa superfície interage com a luz na cena.

No Jetpack XR, as classes KhronosPbrMaterial e KhronosUnlitMaterial são usadas para criar e manipular esses materiais. Como o nome sugere, KhronosUnlitMaterials não são iluminados e não são afetados pela iluminação da cena. Com KhronosPbrMaterial, é possível personalizar uma variedade maior de propriedades, como cor de brilho, nível de metalização ou aspereza de um objeto e se ele emite luz.

Para mais informações sobre cada propriedade compatível e os parâmetros personalizáveis no Android XR, consulte nossa documentação de referência. Para entender melhor essas propriedades, consulte o glossário da Khronos.

Exemplo de mudança das cores básicas em um modelo 3D

Para personalizar as propriedades de material do seu modelo 3D, primeiro crie o novo material usando KhronosPbrMaterial. Você precisará definir o AlphaMode adequado para a aparência visual que você quer alcançar:

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

Em seguida, defina as propriedades que você quer modificar. Neste exemplo, usamos setBaseColorFactor para mudar a cor de base. Esse método requer um Vector4, em que os componentes x, y, z e w correspondem aos valores RGBA (vermelho, verde, azul e alfa), respectivamente:

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

Criar texturas personalizadas para seu modelo 3D

Uma Texture é um recurso de imagem que pode ser aplicado à superfície de um modelo 3D para fornecer cor, detalhes ou outras informações de superfície. A API Jetpack XR Texture permite carregar dados de imagem, como arquivos PNG, da pasta /assets/ do app de forma assíncrona.

Ao carregar uma textura, é possível especificar um TextureSampler, que controla como a textura é renderizada. O sampler define propriedades de filtragem (para quando a textura aparece menor ou maior que o tamanho original) e modos de ajuste (para processar coordenadas fora do intervalo padrão [0, 1]). Um objeto Texture por si só é apenas um dado. Ele precisa ser atribuído a um Material para ter um efeito visual em um modelo 3D.

Exemplo de como mudar a textura em um modelo 3D

Para criar uma textura personalizada, primeiro salve o arquivo de imagem na pasta /assets/. Como prática recomendada, crie um subdiretório textures nessa pasta também.

Depois de salvar o arquivo no diretório adequado, crie a textura com a API Texture. É aqui também que você aplicaria um TextureSampler opcional, se necessário:

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

Em seguida, defina o tipo de textura e os parâmetros correspondentes. Neste exemplo, aplicamos uma textura de oclusão e definimos a intensidade:

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

Aplicar materiais e texturas aos objetos 3D

Para aplicar o novo material ou textura, substitua o material atual por um nó específico no nó glTF. Para fazer isso, chame setMaterialOverride no GltfModelNode:

gltfModelNode.setMaterialOverride(
    material = pbrMaterial
)

Para remover os materiais recém-criados, chame clearMaterialOverride no nó substituído anteriormente no seu GltfModelNode. Isso retorna o modelo 3D ao estado padrão:

gltfModelNode.clearMaterialOverride()


glTF e o logotipo do glTF são marcas registradas da Khronos Group Inc.