Delen via


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.

    Tintkleur die wordt gebruikt om een object groen te maken

  • 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:

    Weergavemodus die wordt gebruikt om geselecteerde objecten transparant te maken

    Belangrijk

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

    Notitie

    Het see-through-effect wordt genegeerd voor puntwolken.

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

    Shell-modus die wordt gebruikt om specifieke objecten te vervagen

    Belangrijk

    Het shell-effect werkt alleen wanneer de renderingmodus TileBasedComposition wordt gebruikt.

    Notitie

    Het shell-effect wordt genegeerd voor puntwolken.

  • Selected: De geometrie wordt weergegeven met een selectiekader.

    Overzichtsoptie die wordt gebruikt om een geselecteerd onderdeel te markeren

    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, diepteschrift is 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. Selectief snijvlakken

  • UseOverrideMaterial: Indien ingeschakeld, wordt het ingeslagen OverrideMaterial materiaal gebruikt om de geometrie met dat materiaal weer te geven. Het is een efficiënte manier om de rendering van grotere modelonderdelen over te schakelen naar een speciaal materiaal zonder dat afzonderlijke onderdelen daadwerkelijk hoeven te worden overgeschakeld. Kleurmaterialen kunnen PBR-materialen overschrijven en omgekeerd. Het model moet er echter zeker van zijn dat het model verplichte hoekpuntstromen levert, bijvoorbeeld het hoekpunt normaal als het overschreven materiaal een PBR-materiaal is. Bovendien overschrijft deze wisselknop voor transparantie, werkt alleen betrouwbaar in de renderingmodus TileBasedComposition.

    Notitie

    Het onderdrukkingsmateriaal wordt genegeerd voor puntwolken.

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