Hiërarchische status overschrijven

In veel gevallen is het nodig om het uiterlijk van onderdelen van een model dynamisch te wijzigen, bijvoorbeeld subgrafieken te verbergen of onderdelen over te schakelen naar transparante rendering. Het wijzigen van de materialen van elk betrokken onderdeel is niet praktisch omdat het nodig is om de hele scènegrafiek te herhalen en het klonen en toewijzen van materiaal op elk knooppunt te beheren.

Als u deze use-case wilt uitvoeren met de minst mogelijke overhead, gebruikt u de HierarchicalStateOverrideComponent. Met dit onderdeel worden hiërarchische statusupdates geïmplementeerd voor willekeurige vertakkingen van de scènegrafiek. Dat betekent dat een status kan worden gedefinieerd op elk niveau in de scènegrafiek en de hiërarchie omlaag wordt gedruppeld totdat deze wordt overschreven door een nieuwe status of wordt toegepast op een bladobject.

Denk bijvoorbeeld aan het model van een auto en u wilt de hele auto doorzichtig maken, met uitzondering van het binnenste motoronderdeel. Deze use-case omvat slechts twee exemplaren van het onderdeel:

  • Het eerste onderdeel wordt toegewezen aan het hoofdknooppunt van het model en schakelt transparante rendering in voor de hele auto.
  • Het tweede onderdeel wordt toegewezen aan het hoofdknooppunt van de engine en overschrijft de status opnieuw door de see-through-modus expliciet uit te schakelen.

Notitie

Puntwolken maken geen volledige scènegrafiek beschikbaar (zie verschillen in mesh-typen), dus als u een hiërarchische onderdrukking toewijst aan de hoofdentiteit van een puntcloudmodel, wordt de status toegepast op de volledige puntcloud. Bovendien worden sommige functies voor het overschrijven van statussen niet ondersteund voor puntclouds, zoals vermeld in de desbetreffende sectie.

Functies

De vaste set statussen die kunnen worden overschreven, zijn:

  • Hidden: Respectieve meshes in de scènegrafiek worden verborgen of weergegeven.

  • Tint color: Een gerenderd object kan kleurgekleurd zijn met de afzonderlijke tintkleur en het tintgewicht. In de onderstaande afbeelding ziet u kleurtinten van de velg van een wiel.

    Tint color used to turn an object green

  • See-through: De geometrie wordt semi-transparant weergegeven, bijvoorbeeld om de binnenste delen van een object weer te geven. In de volgende afbeelding ziet u dat de hele auto wordt weergegeven in de see-through-modus, met uitzondering van de rode remklauw:

    See-through mode used to make selected objects transparent

    Belangrijk

    Het see-through-effect werkt alleen wanneer de renderingmodus TileBasedCompositionwordt gebruikt.

    Notitie

    Het see-through-effect wordt genegeerd voor puntwolken.

  • Shell: De geometrie wordt weergegeven als een transparante, verzadigingsschaal. Met deze modus kunt u niet-belangrijke delen van een scène vervagen terwijl u nog steeds een gevoel van vorm en relatieve positionering behoudt. Als u het uiterlijk van de shell-rendering wilt wijzigen, gebruikt u de status ShellRendering Instellingen. Zie de volgende afbeelding voor het automodel dat volledig door shell wordt gerenderd, met uitzondering van de blauwe veren:

    Shell mode used to fade out specific objects

    Belangrijk

    Het shell-effect werkt alleen wanneer de renderingmodus TileBasedCompositionwordt gebruikt.

    Notitie

    Het shell-effect wordt genegeerd voor puntwolken.

  • Selected: De geometrie wordt weergegeven met een selectiekader.

    Outline option used to highlight a selected part

    Notitie

    Weergave van selectieoverzicht wordt genegeerd voor puntwolken.

  • DisableCollision: De geometrie is vrijgesteld van ruimtelijke query's. De Hidden vlag heeft geen invloed op de vlag van de botsingsstatus, dus deze twee vlaggen zijn vaak samen ingesteld.

  • TransparencyWritesDepth: Activeert diepteschrijfbewerkingen voor See-through en materiaaltransparenties in de scènestructuur van de entiteit van het onderdeel. Met deze vlag See-through kunnen transparenties diepte schrijven hebben ingeschakeld of uitgeschakeld in een substructuur, zelfs als TransparencyWritesDepth dit wereldwijd wordt afgedwongen. Voor materiaaltransparantie gedraagt de vlag zich inclusief, wat betekent dat als TransparencyWritesDepth deze is ingeschakeld met onderdrukking, globaal geforceerd of via de vlaggen van het materiaal, diepteschrijven wordt ingeschakeld voor objecten die met dit materiaal worden weergegeven.

  • UseCutPlaneFilterMask: Gebruik een afzonderlijk filterbitmasker om de selectie van het knipvlak te beheren. Met deze vlag wordt bepaald of het afzonderlijke filtermasker moet worden gebruikt of overgenomen van het bovenliggende masker. Het filterbitmasker zelf wordt ingesteld via de CutPlaneFilterMask eigenschap. Raadpleeg de alinea Selectief knippen voor gedetailleerde informatie over de werking van het filter. Zie het volgende voorbeeld waarbij alleen de band en velg worden gesneden terwijl de rest van de scène niet wordt beïnvloed. Selective cut planes

Tip

Als alternatief voor het uitschakelen van de zichtbaarheid en ruimtelijke query's voor een volledige subgrafiek, kan de enabled status van een gameobject worden in- of uitgeschakeld. Als een hiërarchie is uitgeschakeld, heeft dit de voorkeur boven elke hiërarchie HierarchicalStateOverrideComponent.

Hiërarchische onderdrukkingen

De HierarchicalStateOverrideComponent kan worden gekoppeld op meerdere niveaus van een objecthiërarchie. Omdat er slechts één onderdeel van elk type op een entiteit kan zijn, HierarchicalStateOverrideComponent worden de statussen voor verborgen, doorzochte, geselecteerde, kleurtint en botsing beheerd.

Daarom kan elke status worden ingesteld op een van:

  • ForceOn - de status is ingeschakeld voor alle mesh op en onder dit knooppunt
  • ForceOff - de status is uitgeschakeld voor alle meshes op en onder dit knooppunt
  • InheritFromParent - de status niet wordt beïnvloed door dit onderdrukkingsonderdeel

U kunt statussen rechtstreeks of via de SetState functie wijzigen:

HierarchicalStateOverrideComponent component = ...;

// set one state directly
component.HiddenState = HierarchicalEnableState.ForceOn;

// set a state with the SetState function
component.SetState(HierarchicalStates.SeeThrough, HierarchicalEnableState.InheritFromParent);

// set multiple states at once with the SetState function
component.SetState(HierarchicalStates.Hidden | HierarchicalStates.DisableCollision, HierarchicalEnableState.ForceOff);
ApiHandle<HierarchicalStateOverrideComponent> component = ...;

// set one state directly
component->SetHiddenState(HierarchicalEnableState::ForceOn);

// or: set a state with the SetState function
component->SetState(HierarchicalStates::SeeThrough, HierarchicalEnableState::InheritFromParent);

// set multiple states at once with the SetState function
component->SetState(
    (HierarchicalStates)((int32_t)HierarchicalStates::Hidden | (int32_t)HierarchicalStates::DisableCollision), HierarchicalEnableState::ForceOff);

Tintkleur

De tint color onderdrukking is enigszins speciaal omdat er zowel een aan/uit-/overnemen status als een tintkleureigenschap is. Het alfagedeelte van de tintkleur definieert het gewicht van het tinteffect: Als dit is ingesteld op 0,0, is er geen tintkleur zichtbaar en als dit is ingesteld op 1,0, wordt het object weergegeven met pure tintkleur. Voor in-between-waarden wordt de uiteindelijke kleur gemengd met de tintkleur. De tintkleur kan per frame worden gewijzigd om een kleurenanimatie te bereiken.

Prestatieoverwegingen

Een exemplaar van HierarchicalStateOverrideComponent zichzelf voegt niet veel runtime-overhead toe. Het is echter altijd raadzaam om het aantal actieve onderdelen laag te houden. Wanneer u bijvoorbeeld een selectiesysteem implementeert waarin het gekozen object wordt gemarkeerd, wordt u aangeraden het onderdeel te verwijderen wanneer de markering wordt verwijderd. Het behouden van de onderdelen met neutrale functies kan snel optellen.

Transparante rendering zorgt voor meer workload op de GPU's van de server dan standaardrendering. Als grote delen van de scènegrafiek worden overgeschakeld naar see-through, waarbij veel geometrielagen zichtbaar zijn, kan het een prestatieknelpunt worden. Hetzelfde is geldig voor objecten met selectiekaders en voor shell-rendering .

API-documentatie

Volgende stappen