Share via


Hierarchikus állapot felülbírálása

Sok esetben dinamikusan módosítani kell a modell egyes részeinek megjelenését, például el kell rejteni az algráfokat, vagy át kell váltani az alkatrészeket transzparens renderelésre. Az egyes érintett rész anyagainak módosítása nem praktikus, mivel az egész jelenetdiagramon át kell iterálni, és kezelni kell az anyag klónozását és hozzárendelését az egyes csomópontokon.

Ha ezt a használati esetet a lehető legkisebb többletterheléssel szeretné elérni, használja a HierarchicalStateOverrideComponent. Ez az összetevő hierarchikus állapotfrissítéseket valósít meg a jelenetdiagram tetszőleges ágain. Ez azt jelenti, hogy az állapotok a jelenetdiagram bármely szintjén definiálhatók, és addig csonkítja a hierarchiát, amíg egy új állapot felül nem bírálja, vagy egy levélobjektumra nem alkalmazza.

Vegyük például az autó modelljét, és a belső motorrész kivételével az egész autót transzparensre szeretné váltani. Ez a használati eset csak az összetevő két példányát foglalja magában:

  • Az első összetevő hozzá van rendelve a modell gyökércsomóponthoz, és bekapcsolja a transzparens renderelést az egész autóhoz.
  • A második összetevő a motor gyökércsomópontjára van rendelve, és a betekintő mód explicit kikapcsolásával ismét felülbírálja az állapotot.

Megjegyzés:

A pontfelhők nem tesznek közzé teljes jelenetdiagramot (lásd a hálótípus különbségeit), ezért ha hierarchikus felülbírálást rendel egy pontfelhőmodell gyökér entitásához, az az állapotot a teljes pontfelhőre alkalmazza. Emellett egyes állapotfelhő-funkciók nem támogatottak a pontfelhők esetében, ahogy az a vonatkozó szakaszban is szerepel.

Funkciók

A felülírható állapotok rögzített készlete a következők:

  • Hidden: A jelenetdiagram megfelelő hálói rejtettek vagy láthatók.

  • Tint color: A renderelt objektumok színárnyalatosak lehetnek az egyes árnyalatok színével és színsúllyal. Az alábbi képen egy kerék peremének színárnyalata látható.

    Tint color used to turn an object green

  • See-through: A geometria félig transzparensen jelenik meg, például egy objektum belső részeinek felfedéséhez. Az alábbi képen a teljes autó látható átlátszatlan módban, kivéve a piros féknyereget:

    See-through mode used to make selected objects transparent

    Fontos

    Az átlátszatlan effektus csak a TileBasedCompositionrenderelési mód használatakor működik.

    Megjegyzés:

    A rendszer figyelmen kívül hagyja az átlátszatos effektust a pontfelhők esetében.

  • Shell: A geometria transzparens, telített felületként jelenik meg. Ez a mód lehetővé teszi a jelenet nem fontos részeinek elhalványulását, miközben továbbra is megtartja az alakérzéket és a relatív pozíciót. A rendszerhéj-renderelés megjelenésének módosításához használja a ShellRendering Gépház állapotot. A kék rugók kivételével az alábbi képen látható, hogy az autómodell teljes mértékben shell-renderelt:

    Shell mode used to fade out specific objects

    Fontos

    A rendszerhéjeffektus csak a TileBasedCompositionrenderelési mód használatakor működik.

    Megjegyzés:

    A rendszerhéjeffektus figyelmen kívül lesz hagyva a pontfelhők esetében.

  • Selected: A geometria egy kijelölési körvonallal jelenik meg.

    Outline option used to highlight a selected part

    Megjegyzés:

    A kijelölési vázlat renderelése a pontfelhők esetében figyelmen kívül lesz hagyva.

  • DisableCollision: A geometria mentesül a térbeli lekérdezések alól. A Hidden jelölő nincs hatással az ütközési állapot jelzőre, ezért ez a két jelző gyakran együtt van beállítva.

  • TransparencyWritesDepth: Aktiválja a mélységi írást és See-through az anyagátírást az összetevő entitásának jelenetfáiban. A jelölő See-through használatával a fóliák mélységi írása engedélyezve vagy letiltva lehet egy részhalmazban, még akkor is, ha TransparencyWritesDepth globálisan kényszerítettek. Az anyag átláthatósága érdekében a jelölő befogadóan viselkedik, ami azt jelenti, hogy ha TransparencyWritesDepth felülbírálással, globálisan kényszerített vagy az anyag jelzőivel engedélyezve van, a mélységi írás engedélyezve lesz az anyaggal renderelt objektumokhoz.

  • UseCutPlaneFilterMask: Használjon egyéni szűrőbitmaszkot a vágósík kiválasztásának szabályozásához. Ez a jelölő határozza meg, hogy az egyes szűrőmaszkokat a szülőtől kell-e használni vagy örökölni. Maga a szűrőbitmaszk a CutPlaneFilterMask tulajdonságon keresztül van beállítva. A szűrés működésével kapcsolatos részletes információkért tekintse meg a Szelektív vágássíkok bekezdést. Lásd a következő példát, ahol csak a gumiabroncs és a felni van vágva, míg a többi jelenet nem érinti. Selective cut planes

Tipp.

A teljes algráf láthatóságának és térbeli lekérdezéseinek kikapcsolása helyett a enabled játékobjektum állapota váltható. Ha egy hierarchia le van tiltva, akkor az előnyben részesíti bármelyiket HierarchicalStateOverrideComponent.

Hierarchikus felülbírálások

Az HierarchicalStateOverrideComponent objektumhierarchia több szintjén is csatolható. Mivel egy entitáson minden típusnak csak egy összetevője lehet, mindegyik HierarchicalStateOverrideComponent kezeli a rejtett, átlátszható, kiválasztott, színárnyalatos és ütközési állapotokat.

Ezért az egyes állapotok az alábbiak egyikére állíthatók be:

  • ForceOn - az állapot engedélyezve van a csomóponton és alatt található összes háló esetében
  • ForceOff - az állapot le van tiltva a csomóponton és alatt található összes háló esetében
  • InheritFromParent - a felülbírálási összetevő nem befolyásolja az állapotot

Az állapotokat közvetlenül vagy a függvényen keresztül is módosíthatja SetState :

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

Színárnyalat

A tint color felülbírálás kissé különleges, mivel be- és kikapcsolt/öröklő állapot és színárnyalat-tulajdonság is van. A színárnyalat színének alfa része határozza meg a színárnyalathatás súlyát: Ha 0,0 értékre van állítva, nem látható a színárnyalat színe, és ha 1,0-ra van állítva, az objektum színtiszta színnel jelenik meg. Az értékek közötti értékek esetében a végső színt a színárnyalat színével keveri a program. A színárnyalat színe keretenként módosítható a színanimáció eléréséhez.

A teljesítménnyel kapcsolatos megfontolások

Egy példány önmagában HierarchicalStateOverrideComponent nem ad túl sok futásidejű többletterhelést. Azonban mindig célszerű alacsonyan tartani az aktív összetevők számát. Ha például egy kiválasztott objektumot kiemelő kijelölési rendszert implementál, a kiemelés eltávolításakor ajánlott törölni az összetevőt. Az összetevők semleges funkciókkal való megtartása gyorsan összeadhat.

A transzparens renderelés több számítási feladatot helyez el a kiszolgáló GPU-ján, mint a szabványos renderelés. Ha a jelenetdiagram nagy része átlátszatlanná válik, és számos geometriai réteg látható, az teljesítménybeli szűk keresztmetszetté válhat. Ugyanez érvényes a kijelölési körvonalakkal rendelkező objektumokra és a rendszerhéj-renderelésre is.

API-dokumentáció

További lépések