Sdílet prostřednictvím


Řezy roviny

Vyříznutá rovina je vizuální funkce, která vystřihuje pixely na jedné straně virtuální roviny, která odhalí vnitřní části ok. Na následujícím obrázku je znázorněn efekt. Vlevo je vidět původní síť, na pravé straně může vypadat uvnitř sítě:

Cut plane

CutPlaneComponent

Do scény přidáte rovinu řezu vytvořením CutPlaneComponent. Umístění a orientace roviny je určeno entitou vlastníka komponenty.

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 – vlastnosti

V komponentě roviny řezu jsou vystaveny následující vlastnosti:

  • Enabled: Dočasně můžete vypnout roviny vyjmutí tím, že komponentu zakážete. Zakázané roviny řezů neúčtují režijní náklady na vykreslování a také se nezapočítávají do globálního limitu roviny řezů.

  • Normal: Určuje směr (+X,-X,+Y,-Y,+Z,-Z),-Z) jako normální rovinu. Tento směr je relativní vzhledem k orientaci entity vlastníka. Přesunutí a otočení entity vlastníka pro přesné umístění

  • FadeColor a FadeLength:

    Pokud je alfa hodnota FadeColor nenulová, pixely v blízkosti roviny řezu zmizí směrem k rgb části FadeColor. Síla alfa kanálu určuje, zda se úplně zeslabí směrem k barvě prolnutí, nebo pouze částečně. FadeLength definuje, ve které vzdálenosti bude toto prolnutí probíhat.

  • ObjectFilterMask: Maska bitu filtru, která určuje, která geometrie je ovlivněna rovinou řezu. Podrobné informace najdete v následujícím odstavci.

Selektivní roviny řezů

Je možné nakonfigurovat jednotlivé roviny řezů tak, aby ovlivnily pouze konkrétní geometrii. Následující obrázek znázorňuje, jak může toto nastavení vypadat v praxi:

Selective cut planes

Filtrování funguje prostřednictvím porovnání logické masky bitů mezi bitovou maskou na straně roviny řezu a druhou bitovou maskou nastavenou na geometrii. Pokud výsledek logické AND operace mezi maskami není nulový, rovina řezu ovlivní geometrii.

  • Bitová maska komponenty roviny řezu je nastavena prostřednictvím jeho ObjectFilterMask vlastnosti.
  • Bitová maska v pod hierarchii geometrie je nastavena prostřednictvím HierarchicalStateOverrideComponent

Příklady:

Vyjmutí masky filtru roviny Maska filtru geometrie Výsledek logického AND Rovina řezu ovlivňuje geometrii?
(0000 0001) == 1 (0000 0001) == 1 (0000 0001) == 1 Ano
(1111 0000) == 240 (0001 0001) == 17 (0001 0000) == 16 Ano
(0000 0001) == 1 (0000 0010) == 2 (0000 0000) == 0 No
(0000 0011) == 3 (0000 1000) == 8 (0000 0000) == 0 No

Tip

Nastavení roviny řezu ObjectFilterMask na hodnotu 0 znamená, že nebude mít vliv na žádnou geometrii, protože výsledek logické AND roviny nemůže být nikdy nenulový. Vykreslovací systém nebude tyto roviny považovat za první místo, takže se jedná o jednoduchou metodu zakázání jednotlivých rovin vyjmutí. Tyto roviny řezů se také nezapočítávají do limitu 8 aktivních rovin.

Omezení

  • Azure Remote Rendering podporuje maximálně osm aktivních rovin řezů. Můžete vytvořit více součástí roviny řezů, ale pokud se pokusíte povolit více současně, bude aktivace ignorována. Pokud chcete přepnout komponenty, které by měly mít vliv na scénu, zakažte nejprve jiné roviny.
  • Roviny řezů jsou čistě vizuální funkce, nemají vliv na výsledek prostorových dotazů. Pokud chcete paprsek přetypovat do rozříznuté sítě, můžete upravit počáteční bod paprsku tak, aby byl na rovině řezu. Tímto způsobem může paprsk narazit pouze na viditelné části.

Důležité informace o výkonu

Za každou aktivní rovinu řezu se během vykreslování účtují malé náklady. Pokud nejsou potřeba, zakažte nebo odstraňte roviny vyjmutí.

Dokumentace k rozhraní API

Další kroky