Condividi tramite


Piani di taglio

Un piano di taglio è una funzionalità visiva per il ritaglio dei pixel su un lato di un piano virtuale, rivelando l'interno delle mesh. L'immagine di seguito illustra l'effetto. A sinistra viene visualizzata la mesh originale, a destra è possibile esaminare l'interno della mesh:

Cut plane

CutPlaneComponent

Per aggiungere un piano di taglio alla scena, è necessario creare un CutPlaneComponent. Il percorso e l'orientamento del piano sono determinati dall'entità proprietario del componente.

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
}

Proprietà di CutPlaneComponent

Le proprietà seguenti sono esposte in un componente del piano di taglio:

  • Enabled: è possibile disattivare temporaneamente i piani di taglio disabilitando il componente. I piani di taglio disabilitati non comportano un sovraccarico di rendering e non vengono conteggiati rispetto al limite globale dei piani di taglio.

  • Normal: specifica la direzione (+X,-X,+Y,-Y,+Z,-Z) viene usata come normale del piano. Questa direzione è relativa all'orientamento dell'entità proprietario. Spostare e ruotare l'entità proprietario per il posizionamento esatto.

  • FadeColor e FadeLength:

    Se il valore alfa di FadeColor è diverso da zero, i pixel vicini al piano di taglio si dissolveranno verso la parte RGB di FadeColor. La potenza del canale alfa determina se la dissolvenza sarà totale verso il colore di dissolvenza o solo parziale. FadeLength definisce la distanza a cui avverrà la dissolvenza.

  • ObjectFilterMask: maschera di bit del filtro che determina la geometria interessata dal piano di taglio. Per informazioni dettagliate, vedere il paragrafo successivo.

Piani di taglio selettivi

È possibile configurare singoli piani di taglio in modo che influiscano solo sulla geometria specifica. L'immagine seguente illustra l'aspetto di questa configurazione in pratica:

Selective cut planes

Il filtro funziona tramite il confronto di maschera bit logica tra una maschera di bit sul lato del piano di taglio e una seconda maschera di bit impostata sulla geometria. Se il risultato di un'operazione logica AND tra le maschere non è zero, il piano di taglio influirà sulla geometria.

  • La maschera di bit sul componente del piano di taglio viene impostata tramite la relativa ObjectFilterMask proprietà
  • La maschera di bit in una sotto gerarchia di geometria viene impostata tramite HierarchyStateOverrideComponent

Esempi:

Maschera filtro piano taglia Maschera di filtro geometry Risultato della logica AND Il piano di taglio influisce sulla geometria?
(0000 0001) == 1 (0000 0001) == 1 (0000 0001) == 1
(1111 0000) == 240 (0001 0001) == 17 (0001 0000) == 16
(0000 0001) == 1 (0000 0010) == 2 (0000 0000) == 0 No
(0000 0011) == 3 (0000 1000) == 8 (0000 0000) == 0 No

Suggerimento

L'impostazione di un piano di taglio su ObjectFilterMask 0 significa che non influirà su alcuna geometria perché il risultato della logica AND non può mai essere diverso da null. Il sistema di rendering non considererà questi piani al primo posto, quindi si tratta di un metodo leggero per disabilitare singoli piani di taglio. Questi piani di taglio non vengono conteggiati anche rispetto al limite di 8 piani attivi.

Limiti

  • Azure Rendering remoto supporta un massimo di otto piani di taglio attivi. È possibile creare più componenti dei piano di taglio, ma se si tenta di abilitarne più di uno simultaneamente, l'abilitazione verrà ignorata. Disabilitare prima altri piani se si desidera cambiare i componenti che devono influire sulla scena.
  • I piani di taglio sono una funzionalità puramente visiva, non influiscono sul risultato delle query spaziali. Se si vuole eseguire il ray casting in una mesh tagliata aperta, è possibile regolare il punto iniziale del raggio in modo che si trovi sul piano di taglio. In questo modo, il raggio può raggiungere solo le parti visibili.

Considerazioni sulle prestazioni

Ogni piano di taglio attivo comporta un piccolo addebito durante il rendering. Disabilitare o eliminare i piani di taglio quando non sono necessari.

Documentazione sull'API

Passaggi successivi