Schnittebenen

Eine Schnittebene ist eine visuelle Funktion, die Pixel auf einer Seite einer virtuellen Ebene beschneidet und das Innere von Gittermodellen enthüllt. In der folgenden Abbildung wird der Effekt veranschaulicht. Auf der linken Seite wird das ursprüngliche Gittermodell angezeigt, auf der rechten Seite sehen Sie das Innere des Gittermodells:

Cut plane

CutPlaneComponent

Sie fügen der Szene eine Schnittebene hinzu, indem Sie eine CutPlaneComponent erstellen. Die Position und die Ausrichtung der Ebene werden von der Besitzerentität der Komponente bestimmt.

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
}

CutPlaneComponent-Eigenschaften

Die folgenden Eigenschaften werden für eine Schnittebenenkomponente bereitgestellt:

  • Enabled: Sie können das Ausschneiden von Flugzeugen vorübergehend deaktivieren, indem Sie die Komponente deaktivieren. Deaktivierte Schnittebenen verursachen keinen Renderingmehraufwand und werden auch nicht in den globalen Grenzwert von Schnittebenen einbezogen.

  • Normal: Gibt an, welche Richtung (+X,-X,+Y,-Y,+Z,-Z) als Normalebene verwendet wird. Diese Richtung ist relativ zur Ausrichtung der Besitzerentität. Verschieben und drehen Sie die Besitzerentität zur genauen Platzierung.

  • FadeColor und FadeLength:

    Wenn der Alphawert von FadeColor ungleich NULL ist, werden Pixel in der Nähe der Schnittebene in Richtung des RGB-Anteils von FadeColor ausgeblendet. Die Stärke des Alphakanals bestimmt, ob die Ausblendung vollständig bis in die Ausblendfarbe oder nur teilweise erfolgt. FadeLength definiert, über welche Entfernung diese Ausblendung stattfindet.

  • ObjectFilterMask: Eine Filterbitmaske, die bestimmt, welche Geometrie von der Schnittebene beeinflusst wird. Ausführliche Informationen finden Sie im nächsten Absatz.

Selektive Schnittebenen

Es ist möglich, einzelne Schnittebenen so zu konfigurieren, dass sie nur bestimmte Geometrien betreffen. Die folgende Abbildung veranschaulicht, wie dieses Setup in der Praxis aussehen kann:

Selective cut planes

Die Filterung erfolgt durch den Vergleich logischer Bitmasken zwischen einer Bitmaske auf der Seite der Schnittebene und einer zweiten Bitmaske, die für die Geometrie festgelegt ist. Wenn das Ergebnis eines logischen AND-Vorgangs zwischen den Masken nicht null ist, wirkt sich die Schnittebene auf die Geometrie aus.

  • Die Bitmaske für die Schnittebenenkomponente wird über deren ObjectFilterMask-Eigenschaft festgelegt
  • Die Bitmaske für eine Geometrie-Unterhierarchie wird über die Eigenschaft HierarchicalStateOverrideComponent festgelegt

Beispiele:

Schnittebenen-Filtermaske Geometrie-Filtermaske Ergebnis des logischen AND Wirkt sich die Schnittebene auf die Geometrie aus?
(0000 0001) == 1 (0000 0001) == 1 (0000 0001) == 1 Ja
(1111 0000) == 240 (0001 0001) == 17 (0001 0000) == 16 Ja
(0000 0001) == 1 (0000 0010) == 2 (0000 0000) == 0 Nein
(0000 0011) == 3 (0000 1000) == 8 (0000 0000) == 0 Nein

Tipp

Das Festlegen der ObjectFilterMask einer Schnittebene auf 0 bedeutet, dass sie sich in keiner Weise auf Geometrie auswirkt, da das Ergebnis eines logischen AND niemals einen anderen Wert als null ergeben kann. Das Renderingsystem berücksichtigt solche Ebenen von vornherein nicht, dies stellt also ein unaufwändiges Verfahren zum Deaktivieren einzelner Schnittebenen dar. Außerdem werden diese Schnittebenen im Grenzwert von 8 aktiven Ebenen nicht berücksichtigt.

Begrenzungen

  • Azure Remote Rendering unterstützt maximal acht aktive Schnittebenen . Sie können weitere Schnittebenenkomponenten erstellen, aber wenn Sie versuchen, mehrere Komponenten gleichzeitig zu aktivieren, wird die Aktivierung ignoriert. Deaktivieren Sie zuerst andere Ebenen, wenn Sie die Komponenten austauschen möchten, die sich auf die Szene auswirken sollen.
  • Schnittebenen sind ein rein visuelles Feature, das sich nicht auf das Ergebnis räumlicher Abfragen auswirkt. Wenn Sie einen Strahl in ein aufgeschnittenes Gittermodell werfen möchten, können Sie den Ausgangspunkt des Strahls so anpassen, dass er auf der Schnittebene liegt. Auf diese Weise kann der Strahl nur auf sichtbare Teile treffen.

Überlegungen zur Leistung

Jede aktive Schnittebene verursacht beim Rendern geringfügige Kosten. Deaktivieren oder löschen Sie Schnittebenen, wenn Sie nicht benötigt werden.

API-Dokumentation

Nächste Schritte