Matériaux

Les matériaux sont des ressources partagées qui définissent la façon dont les maillages triangulaires sont rendus. En revanche, les nuages de points n’exposent pas de matériaux.

Les matériaux sont utilisés pour spécifier

  • quelles textures appliquer,
  • s’il faut rendre les objets transparents,
  • l’interaction de l’éclairage avec la surface.

Les matériaux sont créés automatiquement pendant la conversion de modèle et sont accessibles au moment de l’exécution. Vous pouvez également créer des matériaux personnalisés à partir du code et remplacer des matériaux existants. Ce scénario s’applique en particulier quand vous souhaitez partager un matériau entre plusieurs maillages. Les modifications apportées à un matériau sont visibles sur chaque maillage qui y fait référence. Cette méthode peut donc être utilisée pour appliquer facilement des modifications.

Remarque

La modification de matériaux peut être appropriée pour certains cas d’usage tels que la mise en évidence d’un objet spécifique. Cependant, le composant HierarchicalStateOverrideComponent offre un moyen beaucoup plus simple d’obtenir le résultat souhaité.

Types de matériau

Azure Remote Rendering offre deux types de matériau :

  • Les matériaux PBR sont utilisés pour les surfaces qui doivent être rendues sous une forme aussi correcte que possible d’un point de vue physique. Pour ces matériaux, l’éclairage réaliste est calculé à l’aide du rendu physique réaliste (PBR, Physically-Based Rendering). Pour tirer le meilleur parti de ce type de matériau, il est important de fournir des données d’entrée de haute qualité comme les cartes de rugosité et de normale.

  • Les matériaux de couleur sont utilisés pour les cas où aucun éclairage supplémentaire n’est souhaité. Ces matériaux sont toujours de couleur vive et sont plus faciles à configurer. Les matériaux de couleur sont utilisés pour les données qui ne doivent avoir aucun éclairage ou qui intègrent déjà un éclairage statique. Il peut s’agir, par exemple, de modèles obtenus par photogrammétrie.

Affectation de matériel Mesh vs MeshComponent

Les maillages triangulaires comportent un ou plusieurs sous-maillages. Chaque sous-maillage fait référence à un matériau. Vous pouvez modifier le matériau à utiliser directement sur le maillage, ou vous pouvez remplacer le matériau à utiliser pour un sous-maillage sur un MeshComponent.

Quand vous modifiez un matériau directement sur la ressource de maillage, toutes les instances de ce maillage sont affectées. Toutefois, sa modification sur le MeshComponent affecte uniquement cette instance de maillage. La méthode la plus appropriée dépend du comportement souhaité, mais l’approche la plus courante consiste à modifier un MeshComponent.

Déduplication de matériaux

Lors de la conversion, plusieurs matériaux ayant les mêmes propriétés et textures sont automatiquement dédupliqués en un seul matériau. Vous pouvez désactiver cette fonctionnalité dans les paramètres de conversion, mais nous vous recommandons de la laisser activée pour des performances optimales.

Classes de matériaux

Tous les matériaux fournis par l’API sont dérivés de la classe de base Material. Vous pouvez demander leur type avec Material.MaterialSubType ou en les castant directement :

void SetMaterialColorToGreen(Material material)
{
    if (material.MaterialSubType == MaterialType.Color)
    {
        ColorMaterial colorMaterial = material as ColorMaterial;
        colorMaterial.AlbedoColor = new Color4(0, 1, 0, 1);
        return;
    }

    PbrMaterial pbrMat = material as PbrMaterial;
    if (pbrMat != null)
    {
        pbrMat.AlbedoColor = new Color4(0, 1, 0, 1);
        return;
    }
}
void SetMaterialColorToGreen(ApiHandle<Material> material)
{
    if (material->GetMaterialSubType() == MaterialType::Color)
    {
        ApiHandle<ColorMaterial> colorMaterial = material.as<ColorMaterial>();
        colorMaterial->SetAlbedoColor({ 0, 1, 0, 1 });
        return;
    }

    if (material->GetMaterialSubType() == MaterialType::Pbr)
    {
        ApiHandle<PbrMaterial> pbrMat = material.as<PbrMaterial>();
        pbrMat->SetAlbedoColor({ 0, 1, 0, 1 });
        return;
    }
}

Documentation de l’API

Étapes suivantes