Plans de coupe

Un plan de coupe est une fonctionnalité visuelle qui découpe les pixels d’un côté d’un plan virtuel, et révèle l’intérieur des maillages. L’image ci-dessous illustre l’effet. La partie gauche affiche le maillage d’origine, celle de droite permet de regarder à l’intérieur du maillage :

Cut plane

CutPlaneComponent

Vous ajoutez un plan de coupe à la scène en créant un élément CutPlaneComponent. L’emplacement et l’orientation du plan sont déterminés par l’entité propriétaire du composant.

void CreateCutPlane(RenderingSession session, Entity ownerEntity)
{
    CutPlaneComponent cutPlane = (CutPlaneComponent)session.Connection.CreateComponent(ObjectType.CutPlaneComponent, ownerEntity);
    cutPlane.Normal = Axis.X; // normal points along the positive x-axis of the owner object's orientation
    cutPlane.FadeColor = new Color4Ub(255, 0, 0, 128); // fade to 50% red
    cutPlane.FadeLength = 0.05f; // gradient width: 5cm
}
void CreateCutPlane(ApiHandle<RenderingSession> session, ApiHandle<Entity> ownerEntity)
{
    ApiHandle<CutPlaneComponent> cutPlane = session->Connection()->CreateComponent(ObjectType::CutPlaneComponent, ownerEntity)->as<CutPlaneComponent>();;
    cutPlane->SetNormal(Axis::X); // normal points along the positive x-axis of the owner object's orientation
    Color4Ub fadeColor;
    fadeColor.channels = { 255, 0, 0, 128 }; // fade to 50% red
    cutPlane->SetFadeColor(fadeColor);
    cutPlane->SetFadeLength(0.05f); // gradient width: 5cm
}

Propriétés CutPlaneComponent

Les propriétés suivantes sont exposées sur un composant de plan de coupe :

  • Enabled: vous pouvez désactiver temporairement les plans coupés en désactivant le composant. Les plans de coupe désactivés n’entraînent pas de surcharge de rendu, et ne sont pas comptabilisés dans la limite globale des plans de coupe.

  • Normal: spécifie la direction (+X,-X,+Y,-Y,+Z,-Z) utilisée comme normale du plan. Cette direction est relative à l’orientation de l’entité propriétaire. Déplacez et faites pivoter l’entité propriétaire pour obtenir un positionnement précis.

  • FadeColor et FadeLength :

    si la valeur alpha de FadeColor est différente de zéro, les pixels proches du plan de coupe s’estompent vers la partie RVB de FadeColor. La puissance du canal alpha détermine s’il s’estompe entièrement dans la couleur du fondu, ou seulement partiellement. FadeLength définit la distance au-delà de laquelle ce fondu doit avoir lieu.

  • ObjectFilterMask: masque de bits de filtre qui détermine la géométrie affectée par le plan de coupe. Pour plus d’informations, consultez le paragraphe suivant.

Plans de coupe sélectifs

Il est possible de configurer des plans de coupe individuels afin qu’ils s’appliquent uniquement à une géométrie spécifique. L’illustration suivante montre à quoi peut ressembler cette configuration dans la pratique :

Selective cut planes

Le filtrage fonctionne via comparaison logique des masques de bits entre un masque de bits sur le côté du plan de coupe et un deuxième masque de bits défini sur la géométrie. Si le résultat d’une opération logique AND entre les masques n’est pas égal à zéro, le plan de coupe affecte la géométrie.

  • Le masque de bits sur le composant du plan de coupe est défini par le biais de sa propriété ObjectFilterMask.
  • Le masque de bits sur une sous-hiérarchie de géométrie est défini via HierarchicalStateOverrideComponent.

Exemples :

Masque de filtre de plan de coupe Masque de filtre de géométrie Résultat de l’opérateur logique AND Le plan de coupe affecte-t-il la géométrie ?
(0000 0001) == 1 (0000 0001) == 1 (0000 0001) == 1 Oui
(1111 0000) == 240 (0001 0001) == 17 (0001 0000) == 16 Oui
(0000 0001) == 1 (0000 0010) == 2 (0000 0000) == 0 Non
(0000 0011) == 3 (0000 1000) == 8 (0000 0000) == 0 Non

Conseil

Le fait de définir la propriété ObjectFilterMask d’un plan de coupe sur 0 signifie qu’il n’affectera aucune géométrie, car le résultat de l’opérateur logique AND ne peut jamais être différent de nul. Le système de rendu ne considère pas ces plans en premier lieu, il s’agit donc d’une méthode légère pour désactiver des plans de coupe individuels. Ces plans de coupe ne sont pas non plus comptabilisés dans la limite de huit plans actifs.

Limites

  • Azure Remote Rendering prend en charge un nombre maximal de huit plans de coupe actifs. Vous pouvez créer des composants de plan de coupe supplémentaires, mais si vous essayez d’en activer davantage simultanément, l’activation est ignorée. Désactivez d’abord les autres plans si vous souhaitez changer les composants qui doivent affecter la scène.
  • Les plans de coupe sont uniquement une fonctionnalité visuelle, ils n’affectent pas le résultat des requêtes spatiales. Si vous ne souhaitez pas utiliser le ray casting sur un maillage ouvert en coupe, vous pouvez ajuster le point de départ du rayon pour qu’il se trouve sur le plan de coupe. De cette façon, le rayon ne peut atteindre que les parties visibles.

Considérations relatives aux performances

Chaque plan de coupe actif entraîne une faible dépense pendant le rendu. Désactivez ou supprimez les plans de coupe lorsqu’ils ne sont pas nécessaires.

Documentation de l’API

Étapes suivantes