Personnaliser des modèles 3D dans votre application

Appareils XR concernés
Ces conseils vous aident à créer des expériences pour ces types d'appareils XR.
Casques XR
Lunettes XR filaires

Une fois que vous avez ajouté un modèle 3D à votre application, vous pouvez personnaliser l'expérience visuelle et interactive pour l'améliorer. Par exemple, vous pouvez lire et contrôler des animations glTF intégrées, définir des propriétés de matériaux personnalisées (comme les couleurs de base ou la rugosité métallique) et appliquer des textures personnalisées à vos modèles 3D. Ces fonctionnalités vous permettent de modifier dynamiquement l'apparence et le comportement d'un objet au moment de l'exécution.

Animer des modèles 3D

Dans la spécification glTF, les modèles 3D peuvent contenir des animations intégrées. Les animations squelettiques (avec squelette), rigides et avec cibles de morphing (formes de fusion) sont toutes compatibles avec le SDK Jetpack XR. Les animations Material créées avec l'extension glTF KHR_animation_pointer sont également acceptées.

Pour lire une animation, spécifiez le nom de la piste spécifique dans la liste animations. Appuyez sur GltfAnimation.start() pour commencer à jouer. Vous pouvez éventuellement spécifier la vitesse, le temps de recherche et si l'animation doit être mise en boucle ou non à l'aide de GltfAnimationStartOptions.

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

Vous pouvez également pause(), resume() et stop() des animations, ainsi qu'utiliser seekTo() pour accéder à un moment précis de la piste d'animation. Pour interroger l'état actuel de l'animation, utilisez GltfAnimation.AnimationState.

Personnaliser les propriétés matérielles de votre modèle 3D

Le système de matériaux de Jetpack XR est basé sur la spécification glTF™ 2.0, et les modèles 3D sont rendus à l'aide du rendu basé sur la physique (PBR). Vous pouvez ajuster les attributs matériels lors de l'exécution pour modifier l'apparence d'un objet de manière dynamique en fonction de l'entrée utilisateur ou de l'état actuel de l'application.

Un Material définit un ensemble de propriétés visuelles pour la surface d'un objet et détermine comment cette surface interagit avec la lumière dans la scène.

Dans Jetpack XR, les classes KhronosPbrMaterial et KhronosUnlitMaterial sont utilisées pour créer et manipuler ces matériaux. Comme leur nom l'indique, les KhronosUnlitMaterials ne sont pas éclairés et ne sont pas affectés par l'éclairage de la scène. KhronosPbrMaterial vous permet de personnaliser un plus grand nombre de propriétés, telles que la couleur de l'éclat, le caractère métallique ou rugueux d'un objet, et s'il émet de la lumière.

Pour en savoir plus sur chaque propriété acceptée et sur les paramètres personnalisables dans Android XR, consultez notre documentation de référence. Pour mieux comprendre ces propriétés, consultez le glossaire Khronos.

Exemple de modification des couleurs de base sur un modèle 3D

Pour personnaliser les propriétés matérielles de votre modèle 3D, vous devez d'abord créer le nouveau matériau à l'aide de KhronosPbrMaterial. Vous devez définir le AlphaMode approprié pour l'apparence visuelle que vous souhaitez obtenir :

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

Ensuite, définissez les propriétés que vous souhaitez modifier. Dans cet exemple, nous utilisons setBaseColorFactor pour modifier la couleur de base. Cette méthode nécessite un Vector4, où les composants x, y, z et w correspondent respectivement aux valeurs RGBA (rouge, vert, bleu et alpha) :

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

Créer des textures personnalisées pour votre modèle 3D

Une Texture est un composant Image que vous pouvez appliquer à la surface d'un modèle 3D pour lui donner de la couleur, des détails ou d'autres informations sur la surface. L'API Jetpack XR Texture vous permet de charger des données d'image, telles que des fichiers PNG, à partir du dossier /assets/ de votre application de manière asynchrone.

Lorsque vous chargez une texture, vous pouvez spécifier un TextureSampler, qui contrôle la façon dont la texture est affichée. L'échantillonneur définit les propriétés de filtrage (lorsque la texture apparaît plus petite ou plus grande que sa taille d'origine) et les modes d'habillage (pour gérer les coordonnées en dehors de la plage standard [0, 1]). Un objet Texture est une simple donnée. Il doit être attribué à un Material pour avoir un effet visuel sur un modèle 3D.

Exemple de modification de la texture d'un modèle 3D

Pour créer une texture personnalisée, vous devez d'abord enregistrer le fichier image dans votre dossier /assets/. Il est également recommandé de créer un sous-répertoire textures dans ce dossier.

Une fois le fichier enregistré dans le répertoire approprié, créez la texture avec l'API Texture. C'est également là que vous appliquerez un TextureSampler facultatif si nécessaire :

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

Définissez ensuite le type de texture et ses paramètres correspondants. Dans cet exemple, nous appliquons une texture d'occlusion et définissons l'intensité :

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

Appliquer des matériaux et des textures à vos objets 3D

Pour appliquer la nouvelle matière ou texture, remplacez la matière existante pour un nœud spécifique sur votre nœud glTF. Pour ce faire, appelez setMaterialOverride sur GltfModelNode :

gltfModelNode.setMaterialOverride(
    material = pbrMaterial
)

Pour supprimer les matériaux nouvellement créés, appelez clearMaterialOverride sur le nœud précédemment remplacé dans votre GltfModelNode. Votre modèle 3D retrouve alors son état par défaut :

gltfModelNode.clearMaterialOverride()


glTF et le logo glTF sont des marques de The Khronos Group Inc.