Vlakken knippen

Een knipvlak is een visuele functie waarmee pixels aan één kant van een virtueel vlak worden geknipt, waardoor de binnenkant van meshes zichtbaar is. In de onderstaande afbeelding ziet u het effect. Aan de linkerkant ziet u de oorspronkelijke mesh, aan de rechterkant kan men in de mesh kijken:

Cut plane

CutPlaneComponent

U voegt een knipvlak toe aan de scène door een CutPlaneComponent te maken. De locatie en stand van het vliegtuig worden bepaald door de entiteit eigenaar van het onderdeel.

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-eigenschappen

De volgende eigenschappen worden weergegeven op een snijvlakonderdeel:

  • Enabled: U kunt snijvlakken tijdelijk uitschakelen door het onderdeel uit te schakelen. Uitgeschakelde knipvlakken hebben geen overhead voor rendering en tellen ook niet mee tegen de limiet van het globale snijvlak.

  • Normal: Geeft aan welke richting (+X,-X,+Y,-Y,+Z,-Z) wordt gebruikt als het vliegtuig normaal. Deze richting is relatief ten opzichte van de afdrukstand van de eigenaarentiteit. Verplaats en draai de entiteit eigenaar voor exacte plaatsing.

  • FadeColor en FadeLength:

    Als de alfawaarde van FadeColor niet nul is, verdwijnen pixels dicht bij het knipvlak naar het RGB-deel van FadeColor. De sterkte van het alfakanaal bepaalt of het volledig naar de fadekleur zal vervagen of slechts gedeeltelijk. FadeLength definieert over welke afstand deze fade plaatsvindt.

  • ObjectFilterMask: Een filterbitmasker dat bepaalt welke geometrie wordt beïnvloed door het snijvlak. Zie de volgende alinea voor gedetailleerde informatie.

Selectief snijvlakken

Het is mogelijk om afzonderlijke knipvlakken te configureren, zodat ze alleen van invloed zijn op specifieke geometrie. In de volgende afbeelding ziet u hoe deze instelling er in de praktijk uitziet:

Selective cut planes

Het filteren werkt door de vergelijking van logische bitmaskers tussen een bitmasker aan de zijde van het snijvlak en een tweede bitmasker dat is ingesteld op de geometrie. Als het resultaat van een logische AND bewerking tussen de maskers niet nul is, heeft het snijvlak invloed op de geometrie.

  • Het bitmasker op het snijvlakonderdeel wordt ingesteld via de ObjectFilterMask eigenschap
  • Het bitmasker op een subhiërarchie van geometrie wordt ingesteld via de HierarchicalStateOverrideComponent

Voorbeelden:

Filtermasker voor knipvlak Geometriefiltermasker Resultaat van logische AND Snijvlak is van invloed op geometrie?
(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 Nee
(0000 0011) == 3 (0000 1000) == 8 (0000 0000) == 0 Nee

Fooi

Het instellen van een knipvlak op ObjectFilterMask 0 betekent dat dit geen invloed heeft op geometrie, omdat het resultaat van logische AND waarden nooit niet null kan zijn. Het renderingsysteem beschouwt deze vliegtuigen niet als eerste, dus dit is een lichtgewicht methode om afzonderlijke knipvlakken uit te schakelen. Deze knipvlakken tellen ook niet mee tegen de limiet van 8 actieve vlakken.

Beperkingen

  • Azure Remote Rendering ondersteunt maximaal acht actieve snijvlakken. U kunt meer knipvlakonderdelen maken, maar als u meer gelijktijdig wilt inschakelen, wordt de activering genegeerd. Schakel eerst andere vliegtuigen uit als u wilt overschakelen welke onderdelen van invloed moeten zijn op de scène.
  • Knipvlakken zijn een puur visuele functie, ze hebben geen invloed op het resultaat van ruimtelijke query's. Als u wel wilt stralen in een knip-open mesh, kunt u het beginpunt van de straal aanpassen om op het snijvlak te zijn. Op deze manier kan de straal alleen zichtbare delen raken.

Prestatieoverwegingen

Voor elke actieve knipvlak worden kleine kosten in rekening gebracht tijdens het renderen. Schakel knipvlakken uit of verwijder ze wanneer ze niet nodig zijn.

API-documentatie

Volgende stappen