Après avoir ajouté un modèle 3D à votre application, vous pouvez améliorer l'expérience visuelle en définissant des propriétés de matériaux personnalisées et en appliquant des textures à l'objet. 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). Il s'agit de normes ouvertes gérées par le groupe Khronos.
Les attributs de matériau peuvent être ajustés lors de l'exécution pour modifier l'apparence d'un objet de manière dynamique en fonction de la saisie de l'utilisateur ou de l'état actuel de l'application.
Pour en savoir plus sur chaque propriété compatible et 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.
Personnaliser les propriétés matérielles de votre modèle 3D
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 permettent de créer et de 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, comme la couleur de l'éclat, le caractère métallique ou rugueux d'un objet, et s'il émet de la lumière.

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 = 0.0f ) )
Créer des textures personnalisées pour votre modèle 3D
Une Texture est un élément d'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 rendue. 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.

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 le nouveau matériau ou la nouvelle texture, remplacez le matériau existant pour un nœud spécifique de votre entité glTF. Pour ce faire, appelez setMaterialOverride sur GltfModelEntity :
gltfModelEntity.setMaterialOverride( material = pbrMaterial, nodeName = "Node Name" )
Pour supprimer les matériaux nouvellement créés, appelez clearMaterialOverride sur le nœud précédemment remplacé de votre GltfModelEntity. Votre modèle 3D retrouve son état par défaut :
gltfModelEntity.clearMaterialOverride( nodeName = "Node Name" )
glTF et le logo glTF sont des marques de The Khronos Group Inc.