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.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: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: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.Poznámka:
Vykreslování osnovy výběru se ignoruje pro mračna bodů.
DisableCollision
: Geometrie je vyloučená z prostorových dotazů. PříznakHidden
nemá vliv na příznak stavu kolizí, takže tyto dva příznaky jsou často nastavené dohromady.TransparencyWritesDepth
: Aktivuje hloubkové zápisy proSee-through
a materiálové transparence ve stromu scény komponenty. Pomocí tohoto příznakuSee-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 pokudTransparencyWritesDepth
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ímCutPlaneFilterMask
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ý.UseOverrideMaterial
: Pokud je to povoleno, materiál uložený vOverrideMaterial
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í .