Sdílet prostřednictvím


Přepsání hierarchického stavu

V mnoha případech je nutné dynamicky měnit vzhled částí modelu, například skrytí dílčích grafů nebo přepínání částí na transparentní vykreslování. Změna materiálů jednotlivých částí není praktická, protože vyžaduje iteraci v celém grafu scény a správu klonování a přiřazení materiálu na každém uzlu.

K dosažení tohoto případu použití s nejnižší možnou režií použijte příkaz HierarchicalStateOverrideComponent. Tato komponenta implementuje hierarchické aktualizace stavu na libovolné větve grafu scény. To znamená, že stav může být definován na libovolné úrovni v grafu scény a odvádí hierarchii dolů, dokud se nepřepíše novým stavem nebo se použije u objektu typu list.

Představte si například model auta a chcete přepnout celé auto tak, aby byl průhledný, s výjimkou vnitřní části motoru. Tento případ použití zahrnuje pouze dvě instance komponenty:

  • První komponenta je přiřazená kořenovému uzlu modelu a zapne transparentní vykreslování celého vozu.
  • Druhá komponenta je přiřazena ke kořenovému uzlu modulu a přepíše stav znovu tím, že explicitně vypne režim see-through.

Poznámka:

Bodové cloudy nezpřístupňují graf celé scény (viz rozdíly typu sítě), takže přiřazení hierarchického přepsání kořenové entitě cloudového modelu bodu použije stav na celý cloud bodu. Některé funkce přepsání stavu navíc nejsou podporovány pro bodové cloudy, jak je uvedeno v příslušné části.

Funkce

Pevná sada stavů, které lze přepsat, jsou:

  • Hidden: Příslušné sítě v grafu scény jsou skryté nebo zobrazené.

  • Tint color: Vykreslovaný objekt může být barevně barevným odstínem jeho jednotlivé barvy a barevným nádechem. Na obrázku níže je znázorněno barevné zabarvení ráfku kola.

    Barva nádechu použitá k otočení objektu zeleně

  • See-through: Geometrie se vykreslí poloprůhledně, například pro odhalení vnitřních částí objektu. Následující obrázek znázorňuje vykreslení celého auta v režimu see-through s výjimkou červeného brzdového třmenu:

    Režim zobrazení použitý k průhlednosti vybraných objektů

    Důležité

    Efekt zobrazení funguje pouze při použití režimu vykreslování TileBasedComposition.

    Poznámka:

    Efekt zobrazení je ignorován pro bodové mraky.

  • Shell: Geometrie je vykreslena jako průhledné desatuované prostředí. Tento režim umožňuje vymýtit nevýznamné části scény a přitom zachovat smysl pro tvar a relativní umístění. Pokud chcete změnit vzhled vykreslování prostředí, použijte stav ShellRenderingSettings . Podívejte se na následující obrázek modelu auta, který je zcela vykreslený, s výjimkou modrých pružin:

    Režim prostředí používaný k prolnutí konkrétních objektů

    Důležité

    Efekt prostředí funguje pouze při použití režimu vykreslování TileBasedComposition.

    Poznámka:

    Efekt prostředí se ignoruje pro bodové mraky.

  • Selected: Geometrie se vykreslí s obrysem výběru.

    Možnost osnovy použitá ke zvýraznění vybrané části

    Poznámka:

    Vykreslování osnovy výběru se ignoruje pro mračna bodů.

  • DisableCollision: Geometrie je vyloučená z prostorových dotazů. Příznak Hidden nemá vliv na příznak stavu kolizí, takže tyto dva příznaky jsou často nastavené dohromady.

  • TransparencyWritesDepth: Aktivuje hloubkové zápisy pro See-through a materiálové transparence ve stromu scény komponenty. Pomocí tohoto příznaku See-through můžou mít transparenci povolené nebo zakázané zápisy do podstromu, i když TransparencyWritesDepth jsou vynucovány globálně. V případě průhlednosti materiálu se příznak chová inkluzivním způsobem, což znamená, že pokud TransparencyWritesDepth je povoleno buď přepsáním, globálně vynuceným, nebo prostřednictvím příznaků materiálu, je pro objekty vykreslené tímto materiálem povolené hloubkové zápisy.

  • UseCutPlaneFilterMask: K řízení výběru roviny vyjmutí použijte individuální masku bitu filtru. Tento příznak určuje, zda má být použita nebo zděděna jednotlivá maska filtru z nadřazeného objektu. Samotná maska bitu filtru je nastavena prostřednictvím CutPlaneFilterMask vlastnosti. Podrobné informace o tom, jak filtrování funguje, najdete v odstavci Selektivní roviny vyjmutí. Podívejte se na následující příklad, kde je vyjmut pouze pneumatika a ráfek, zatímco zbytek scény zůstává nedotčený. Selektivní roviny řezů

  • UseOverrideMaterial: Pokud je to povoleno, materiál uložený v OverrideMaterial je použit k vykreslení geometrie s tímto materiálem. Jedná se o efektivní způsob, jak přepnout vykreslování větších částí modelu na vyhrazený materiál, aniž byste museli přepínat jednotlivé díly. Barevné materiály mohou přepsat materiály PBR a naopak. Musí však být zaručeno, že model poskytuje povinné vrcholové proudy, například vrchol normální v případě, že přepsaný materiál je materiál PBR. Přepsání, která přepíná na průhlednost, fungují spolehlivě pouze v režimu vykreslování TileBasedComposition.

    Poznámka:

    Přepsat materiál je ignorován pro mračna bodů.

Tip

Jako alternativu k vypnutí viditelnosti a prostorových dotazů pro úplný dílčí graf enabled je možné přepnout stav herního objektu. Pokud je hierarchie zakázaná, má tato možnost přednost před libovolnou HierarchicalStateOverrideComponent.

Hierarchické přepsání

Lze HierarchicalStateOverrideComponent je připojit na více úrovních hierarchie objektů. Vzhledem k tomu, že u entity může existovat pouze jedna komponenta každého typu, každý HierarchicalStateOverrideComponent spravuje stavy skrytých, vybraných, barevných odstínů a kolizí.

Každý stav je proto možné nastavit na jeden z těchto stavů:

  • ForceOn – stav je povolený pro všechny sítě na tomto uzlu a pod tímto uzlem.
  • ForceOff – stav je zakázán pro všechny sítě na tomto uzlu a pod tímto uzlem.
  • InheritFromParent - na stav nemá tato součást přepsání vliv.

Stavy můžete změnit přímo nebo prostřednictvím SetState funkce:

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);

Barva barevných odstínů

Přepsání tint color je mírně speciální v tom, že je zapnuto/vypnuto/dědit stav i barevný nádech vlastnosti. Alfa část barvy nádechu definuje váhu efektu tinting: Pokud je nastavená hodnota 0,0, není viditelná žádná barva nádechu a pokud je nastavená na hodnotu 1,0, objekt se vykreslí čistě barevným nádechem. U hodnot mezi hodnotami se konečná barva směšuje s barevným nádechem. Barvu barevných odstínů je možné změnit pro jednotlivé snímky, aby se dosáhlo barevné animace.

Důležité informace o výkonu

Samotná instance HierarchicalStateOverrideComponent nepřidá příliš velkou režii za běhu. Vždy je ale vhodné zachovat nízký počet aktivních komponent. Například při implementaci systému výběru, který zvýrazní vybraný objekt, je doporučeno odstranit komponentu při odebrání zvýraznění. Sdružte komponenty s neutrálními funkcemi, které se můžou rychle sečíst.

Transparentní vykreslování přináší větší úlohu na gpu serveru než standardní vykreslování. Pokud jsou velké části grafu scény přepnuty na průchozí, přičemž je vidět mnoho vrstev geometrie, může se stát kritickým bodem výkonu. Totéž platí pro objekty s obrysy výběru a pro vykreslování prostředí .

Dokumentace k rozhraní API

Další kroky