Partager via


Maillages

Les maillages sont des ressources partagées non modifiables, qui peuvent uniquement être créées via une conversion de modèle. Les maillages sont utilisés pour le rendu, mais également pour fournir une représentation physique pour les requêtes ray cast. Pour placer un maillage dans l’espace 3D, ajoutez un MeshComponent à une Entité.

Types de maillages

Il existe deux types distincts de ressources de maillage dans ARR : les maillages triangulaires et les nuages de points. Les deux types sont représentés par la même classe d’API Mesh. À l’exception des différences mineures de comportement pour les différents types de maillage, la fonctionnalité d’API exposée est identique.

Le service de conversion détermine automatiquement le type de maillage approprié en fonction de l’extension de fichier source. Par exemple, un fichier FBX est toujours converti en maillage triangulaire, tandis que PLY est traité comme un nuage de points. Pour obtenir la liste complète des formats de fichiers pris en charge, reportez-vous à la liste des formats de fichier source.

Il existe deux différences importantes pour l’utilisateur entre les conversions de nuages de point cloud et de maillages triangulaires :

  • Les maillages de nuages de points n’exposent aucun matériau. L’apparence visuelle des points est définie uniquement par leur couleur par point,
  • les nuages de points n’exposent pas de graphique de scène. Au lieu de cela, tous les points sont attachés à l’entité de nœud racine.

Propriétés des ressources de maillage

Les propriétés de la classe Mesh sont les suivantes :

  • Matériaux : tableau de matériaux. Chaque matériau est utilisé par un sous-maillage différent. Plusieurs entrées dans le tableau peuvent faire référence au même matériau. Les entrées de ce tableau ne peuvent pas être modifiées pendant l’exécution, mais les propriétés matérielles peuvent l’être. Pour les nuages de points, ce tableau est vide.

  • Limites : cadre englobant aligné sur l’axe de l’espace local (AABB) des sommets de maillage.

MeshComponent

La classe MeshComponent est utilisée pour placer l’instance d’une ressource de maillage. Chaque MeshComponent fait référence à un maillage unique. Elle peut remplacer les matériaux utilisés pour afficher chaque sous-maille.

Propriétés de la classe MeshComponent

  • Mesh : ressource de maillage utilisée par ce composant.

  • Matériaux : tableau de matériaux spécifié sur le composant de maillage lui-même. Le tableau aura toujours la même longueur que le tableau Matériaux sur la ressource de maillage. Les matériaux dont le maillage par défaut ne doit pas être substitué sont définis sur Null dans ce tableau.

  • UsedMaterials : tableau de matériaux réellement utilisés pour chaque sous-mémoire. Sera identique aux données du tableau Matériaux pour les valeurs non Null. Dans le cas contraire, il contient la valeur du tableau Matériaux de l’instance de maille. Ce tableau est en lecture seule.

Partage de maillages

Une ressource Mesh peut être partagée entre plusieurs instances de composants de maillage. Par ailleurs, la ressource Mesh qui est assignée à un composant de maillage peut à tout moment être changée par programmation. Le code ci-dessous montre comment cloner un maillage :

Entity CloneEntityWithModel(RenderingConnection api, Entity sourceEntity)
{
    MeshComponent meshComp = sourceEntity.FindComponentOfType<MeshComponent>();
    if (meshComp != null)
    {
        Entity newEntity = api.CreateEntity();
        MeshComponent newMeshComp = api.CreateComponent(ObjectType.MeshComponent, newEntity) as MeshComponent;
        newMeshComp.Mesh = meshComp.Mesh; // share the mesh
        return newEntity;
    }
    return null;
}
ApiHandle<Entity> CloneEntityWithModel(ApiHandle<RenderingConnection> api, ApiHandle<Entity> sourceEntity)
{
    if (ApiHandle<MeshComponent> meshComp = sourceEntity->FindComponentOfType<MeshComponent>())
    {
        ApiHandle<Entity> newEntity = *api->CreateEntity();
        ApiHandle<MeshComponent> newMeshComp = api->CreateComponent(ObjectType::MeshComponent, newEntity)->as<RemoteRendering::MeshComponent>();
        newMeshComp->SetMesh(meshComp->GetMesh()); // share the mesh
        return newEntity;
    }
    return nullptr;
}

Documentation de l’API

Étapes suivantes