Hiyerarşik durumu geçersiz kılma
Çoğu durumda, bir modelin parçalarının görünümünü dinamik olarak değiştirmek gerekir; örneğin alt grafikleri gizleme veya parçaları saydam işlemeye geçirme. Sahne grafiğinin tamamı üzerinde yineleme yapılması ve her düğümde malzeme kopyalama ve atamayı yönetmesi gerektiğinden, ilgili her bölümün malzemelerini değiştirmek pratik değildir.
Bu kullanım örneğini mümkün olan en az ek yükle gerçekleştirmek için kullanın HierarchicalStateOverrideComponent
. Bu bileşen, sahne grafiğinin rastgele dallarında hiyerarşik durum güncelleştirmeleri uygular. Başka bir deyişle, bir durum sahne grafiğindeki herhangi bir düzeyde tanımlanabilir ve yeni bir durum tarafından geçersiz kılınana veya yaprak nesneye uygulanana kadar hiyerarşiyi aşağı doğru kaydırır.
Örnek olarak, bir arabanın modelini düşünün ve iç motor kısmı dışında tüm otomobili şeffaf olacak şekilde değiştirmek istiyorsunuz. Bu kullanım örneği, bileşenin yalnızca iki örneğini içerir:
- İlk bileşen modelin kök düğümüne atanır ve tüm araba için saydam işlemeyi açar.
- İkinci bileşen, altyapının kök düğümüne atanır ve gözden geçir modunu açıkça kapatarak durumu yeniden geçersiz kılar.
Not
Nokta bulutları tam bir sahne grafiğini kullanıma sunmaz (bkz . ağ türü farklılıkları), bu nedenle bir nokta bulut modelinin kök varlığına hiyerarşik geçersiz kılma atamak durumu tam nokta buluta uygular. Ayrıca, ilgili bölümde belirtildiği gibi bazı durum geçersiz kılma özellikleri nokta bulutları için desteklenmez.
Özellikler
Geçersiz kılınabilecek sabit durum kümesi şunlardır:
Hidden
: Sahne grafiğindeki ilgili tireler gizlenir veya gösterilir.Tint color
: İşlenen bir nesne, ayrı renk tonu rengi ve renk tonu ağırlığıyla renk tonuyla renklendirilebilir. Aşağıdaki resimde bir tekerleğin jantının renk tonu gösterilmektedir.See-through
: Geometri, örneğin bir nesnenin iç kısımlarını ortaya çıkarmak için yarı saydam olarak işlenir. Aşağıdaki görüntüde, kırmızı fren kalibresi dışında aracın tamamının gözden geçirilme modunda işlendiği gösterilmektedir:Önemli
Geçiş efekti yalnızca TileBasedComposition işleme modu kullanıldığında çalışır.
Not
Nokta bulutları için gözden geçir efekti yoksayılır.
Shell
: Geometri saydam, doygun olmayan bir kabuk olarak işlenir. Bu mod, bir sahnenin önemli olmayan bölümlerinin soluk olmasına ve şekil ve göreli konumlama hissini korumaya devam etmesine olanak tanır. Kabuk işlemenin görünümünü değiştirmek için ShellRenderingSettings durumunu kullanın. Mavi yaylar dışında tamamen kabuk işlemeli olan araba modeli için aşağıdaki görüntüye bakın:Önemli
Kabuk efekti yalnızca TileBasedComposition işleme modu kullanıldığında çalışır.
Not
Kabuk efekti nokta bulutları için yoksayılır.
Selected
: Geometri bir seçim ana hattıyla işlenir.Not
Nokta bulutları için seçim ana hat işlemesi yoksayılır.
DisableCollision
: Geometri uzamsal sorgulardan muaftır. BayrakHidden
, çarpışma durumu bayrağını etkilemez, bu nedenle bu iki bayrak genellikle birlikte ayarlanır.TransparencyWritesDepth
: Bileşenin varlığının sahne ağacında derinlik yazısınıSee-through
ve malzeme saydamlıklarını etkinleştirir. Saydamlıklar, bu bayrağı kullanarak,See-through
genel olarak zorlanmış olsaTransparencyWritesDepth
bile bir alt ağaçta derinlik yazma özelliğini etkinleştirebilir veya devre dışı bırakabilir. Malzeme saydamlığı için bayrak kapsayıcı bir şekilde davranır; başka bir deyişle, geçersiz kılma, genel olarak zorlamalı veya malzemenin bayrakları aracılığıyla etkinleştirilirseTransparencyWritesDepth
, bu malzemeyle işlenen nesneler için derinlik yazma etkinleştirilir.UseCutPlaneFilterMask
: Kesme düzlemi seçimini denetlemek için tek bir filtre bit maskesi kullanın. Bu bayrak, tek tek filtre maskesinin kullanılması mı yoksa üst öğesinden devralınması mı gerektiğini belirler. Filtre bit maskesinin kendisi özelliği aracılığıylaCutPlaneFilterMask
ayarlanır. Filtrelemenin nasıl çalıştığı hakkında ayrıntılı bilgi için Seçmeli kesme düzlemleri paragrafına bakın. Sahnenin geri kalanı etkilenmeden kalırken yalnızca lastiğin ve jantın kesildiği aşağıdaki örniğe bakın.UseOverrideMaterial
: Etkinleştirilirse, içindeOverrideMaterial
depolanan malzeme geometriyi bu malzemeyle işlemek için kullanılır. Büyük model parçalarının işlenmesini, ayrı ayrı parça malzemelerini değiştirmeden ayrılmış bir malzemeye geçirmenin verimli bir yoludur. Renk malzemeleri PBR malzemelerini geçersiz kılabilir ve bunun tersi de geçerlidir. Ancak, modelin zorunlu köşe akışları sağladığı garanti edilmelidir; örneğin, geçersiz kılınan malzeme bir PBR malzemesi olması durumunda köşe normaldir. Ayrıca, saydamlığı etkinleştiren geçersiz kılmalar yalnızca TileBasedComposition işleme modunda güvenilir bir şekilde çalışır.Not
Geçersiz kılma malzemesi nokta bulutları için yoksayılır.
İpucu
Tam alt grafik için görünürlüğü ve uzamsal sorguları kapatmaya alternatif olarak, enabled
oyun nesnesinin durumu değiştirilebilir. Hiyerarşi devre dışı bırakılırsa, bunun herhangi bir HierarchicalStateOverrideComponent
yerine tercihi vardır.
Hiyerarşik geçersiz kılmalar
bir HierarchicalStateOverrideComponent
nesne hiyerarşisinin birden çok düzeyine eklenebilir. Bir varlıkta her türün yalnızca bir bileşeni olabileceğinden, her HierarchicalStateOverrideComponent
biri gizli, geçişli, seçili, renk tonu ve çarpışma durumlarını yönetir.
Bu nedenle her durum aşağıdakilerden birine ayarlanabilir:
ForceOn
- durum, bu düğümün üzerindeki ve altındaki tüm meshler için etkinleştirilirForceOff
- bu düğümdeki ve altındaki tüm tireler için durum devre dışı bırakıldıInheritFromParent
- durum bu geçersiz kılma bileşeninden etkilenmez
Durumları doğrudan veya işlev aracılığıyla SetState
değiştirebilirsiniz:
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);
Renk tonu rengi
Geçersiz tint color
kılma, hem açma/kapatma/devralma durumu hem de renk tonu renk özelliği olması için biraz özeldir. Renk tonu renginin alfa kısmı renk tonu efektinin kalınlığını tanımlar: 0,0 olarak ayarlanırsa, renk tonu rengi görünmez ve 1,0 olarak ayarlanırsa nesne saf renk tonu rengiyle işlenir. Aradaki değerler için, son renk ton rengiyle karıştırılır. Renk tonu rengi, renk animasyonu elde etmek için kare başına temelinde değiştirilebilir.
Performans değerlendirmeleri
Kendi örneği HierarchicalStateOverrideComponent
çok fazla çalışma zamanı yükü eklemez. Ancak, etkin bileşen sayısını düşük tutmak her zaman iyi bir uygulamadır. Örneğin, seçilen nesneyi vurgulayan bir seçim sistemi uygulanırken, vurgu kaldırıldığında bileşenin silinmesi önerilir. Bileşenleri nötr özelliklerle çevreleyin, hızlı bir şekilde eklenebilir.
Saydam işleme, sunucunun GPU'larına standart işlemeden daha fazla iş yükü getirir. Sahne grafiğinin büyük bölümleri, geometrinin birçok katmanının görünür olduğu bir şekilde gözden geçirilirse performans sorununa neden olabilir. Aynı durum, seçim ana hatları olan nesneler ve kabuk işleme için de geçerlidir.
API belgeleri
Sonraki adımlar
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin