Udostępnij za pośrednictwem


Wycięte płaszczyzny

Płaszczyzna wycinania to funkcja wizualna, która przycina piksele po jednej stronie płaszczyzny wirtualnej, ujawniając wewnątrz siatki. Na poniższej ilustracji przedstawiono efekt. Po lewej stronie widać oryginalną siatkę, po prawej stronie można spojrzeć wewnątrz siatki:

Cut plane

CutPlaneComponent

Dodasz płaszczyznę wycinania do sceny, tworząc element CutPlaneComponent. Lokalizacja i orientacja płaszczyzny jest określana przez jednostkę właściciela składnika.

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
}

Właściwości cutPlaneComponent

Następujące właściwości są uwidocznione w składniku płaszczyzny wycinania:

  • Enabled: Można tymczasowo wyłączyć płaszczyzny wycinania, wyłączając składnik. Wyłączone płaszczyzny wycinania nie powodują narzutów renderowania, a także nie są liczone względem globalnego limitu płaszczyzny cięcia.

  • Normal: określa kierunek (+X,-X,+Y,-Y,+Z,-Z) jest używany jako normalny płaszczyzna. Ten kierunek jest względny względem orientacji jednostki właściciela. Przenieś i obróć jednostkę właściciela w celu dokładnego umieszczania.

  • FadeColor i FadeLength:

    Jeśli wartość alfa elementu FadeColor jest różna od zera, piksele zbliżone do płaszczyzny wycinania zanikają w kierunku części RGB elementu FadeColor. Siła kanału alfa określa, czy w pełni zanika w kierunku koloru zanikania, czy tylko częściowo. FadeLength definiuje, w jakim dystansie nastąpi to zanikanie.

  • ObjectFilterMask: Maska bitów filtru, która określa, która geometria ma wpływ na płaszczyznę cięcia. Aby uzyskać szczegółowe informacje, zobacz następny akapit.

Selektywne płaszczyzny wycinania

Można skonfigurować poszczególne płaszczyzny cięcia tak, aby miały wpływ tylko na konkretną geometrię. Na poniższej ilustracji pokazano, jak ta konfiguracja może wyglądać w praktyce:

Selective cut planes

Filtrowanie działa poprzez porównanie maski bitów logicznych między maską bitową po stronie płaszczyzny cięcia a drugą maską bitową ustawioną na geometrii. Jeśli wynikiem operacji logicznej AND między maskami nie jest zero, płaszczyzna cięcia wpłynie na geometrię.

  • Maska bitowa na składniku płaszczyzny cięcia jest ustawiana za pośrednictwem jego ObjectFilterMask właściwości
  • Maska bitów w pod hierarchii geometrii jest ustawiana za pośrednictwem hierarchicznejStateOverrideComponent

Przykłady:

Maska filtru płaszczyzny wycinania Maska filtru geometrii Wynik logiczny AND Wyciąć płaszczyznę wpływa na geometrię?
(0000 0001) == 1 (0000 0001) == 1 (0000 0001) == 1 Tak
(1111 0000) == 240 (0001 0001) == 17 (0001 0000) == 16 Tak
(0000 0001) == 1 (0000 0010) == 2 (0000 0000) == 0 Nie.
(0000 0011) == 3 (0000 1000) == 8 (0000 0000) == 0 Nie.

Napiwek

Ustawienie płaszczyzny ObjectFilterMask cięcia na wartość 0 oznacza, że nie wpłynie to na geometrię, ponieważ wynik logiczny AND nigdy nie może mieć wartości null. System renderowania nie rozważy tych samolotów w pierwszej kolejności, więc jest to uproszczona metoda wyłączania pojedynczych płaszczyzn wycinania. Te płaszczyzny cięcia również nie liczą się z limitem 8 aktywnych płaszczyzn.

Ograniczenia

  • Usługa Azure Remote Rendering obsługuje maksymalnie osiem aktywnych płaszczyzn wycinania. Możesz utworzyć więcej składników płaszczyzny cięcia, ale jeśli spróbujesz włączyć więcej jednocześnie, zignoruje aktywację. Wyłącz najpierw inne płaszczyzny, jeśli chcesz przełączyć składniki, które powinny mieć wpływ na scenę.
  • Płaszczyzny wycinania są funkcją czysto wizualną, ale nie mają wpływu na wynik zapytań przestrzennych. Jeśli chcesz promieniować rzutować na otwartą siatkę, możesz dostosować punkt początkowy promienia, aby był na płaszczyźnie cięcia. W ten sposób ray może uderzyć tylko widoczne części.

Zagadnienia dotyczące wydajności

Każda aktywna płaszczyzna cięcia wiąże się z niewielkim kosztem podczas renderowania. Wyłącz lub usuń płaszczyzny wycinania, gdy nie są potrzebne.

Dokumentacja interfejsu API

Następne kroki