WPF 3B Performansını En Üst Düzeye Çıkarma

Windows Presentation Foundation (WPF) kullanarak 3B denetimler derleme ve uygulamalarınıza 3B sahneler dahil etme gibi performans iyileştirmelerini göz önünde bulundurabilirsiniz. Bu konu başlığında, uygulamanıza performans etkileri olan 3D sınıfların ve özelliklerin listesinin yanı sıra bunları kullanırken performansı iyileştirmeye yönelik öneriler de verilmektedir.

Bu konu başlığında, Windows Presentation Foundation (WPF) 3B özellikleri hakkında gelişmiş bir anlayış olduğu varsayıldı. Bu belgede yer alan öneriler, kabaca piksel gölgelendiricisi sürüm 2.0 ve köşe gölgelendiricisi sürüm 2.0'i destekleyen donanım olarak tanımlanan "işleme katmanı 2" için geçerlidir. Diğer ayrıntılar için bkz. Grafik İşleme Katmanları.

Performans Etkisi: Yüksek

Özellik Öneri
Brush Fırça hızı (en hızlıdan en yavaşa):

SolidColorBrush

LinearGradientBrush

ImageBrush

DrawingBrush (önbelleğe alınmış)

VisualBrush (önbelleğe alınmış)

RadialGradientBrush

DrawingBrush (ulaşılmamış)

VisualBrush (ulaşılmamış)
ClipToBoundsProperty Bir Viewport3D.ClipToBounds örneğinin (WPF) içeriğini Viewport3D'nin dikdörtgeni için açıkça kırpmanız gerekmaması Windows Presentation Foundation false Viewport3D olarak ayarlayın. Windows Presentation Foundation (WPF) yanlı kırpma çok yavaş olabilir ve üzerinde varsayılan olarak ClipToBounds etkindir Viewport3D (yavaş).
IsHitTestVisible Fareyle Viewport3D.IsHitTestVisible tıklama testi yaparken içeriğini göz önünde Windows Presentation Foundation (WPF) gerektirerek false olarak Viewport3D ayarlayın. 3D içeriklere isabet testi yazılımda yapılır ve büyük meshes ile yavaş olabilir. IsHitTestVisible , üzerinde varsayılan olarak etkindir Viewport3D (yavaş).
GeometryModel3D Yalnızca farklı Malzemeler veya Dönüşümler gerekli olduğunda farklı modeller oluşturun. Aksi takdirde, birden çok örneği aynı Malzemeler ve Dönüşümler ile birkaç büyük ve GeometryModel3D örneğine GeometryModel3D dönüştürmeyi MeshGeometry3D deneyin.
MeshGeometry3D Mesh animasyonu (bir örgün köşelerini çerçeve başına temelinde değiştirme) her zaman tek tek Windows Presentation Foundation (WPF) değildir. Her köşe değiştirildiğinde değişiklik bildirimlerinin performans etkisini en aza indirmek için köşe başına değişiklik gerçekleştirmeden önce görsel ağaçtan ağı ayırabilirsiniz. Örgü değiştirildiktan sonra görsel ağacına yeniden takarak. Ayrıca, bu şekilde animasyonlu olacak meshes boyutunu en aza indirmeyi deneyin.
3D Antialiasing İşleme hızını artırmak için, ekli özelliğini olarak ayarerek Viewport3D çoklu örneklemeyi devre dışı olduğu gibi devre dışı EdgeMode olduğu Aliased gibi. Varsayılan olarak, piksel başına 4 örnekle 3D Windows etkinleştirilmiştir.
Metin 3D sahnenin canlı metni (veya içinde olduğundan DrawingBrushVisualBrush canlı) yavaş olabilir. Metin değişmedikçe bunun yerine RenderTargetBitmap (aracılığıyla) metnin görüntülerini kullanmayı deneyin.
TileBrush Fırça içeriği statik olduğundan 3D sahnesinde veya kullanmalısanız fırçayı önbelleğe almayı deneyin VisualBrushDrawingBrush (ekli özelliği olarak CachingHintCache ayarlayın). Önbelleğe alınan fırçaların çok sık yeniden üretilemeyişini ve yine de istediğiniz kalite düzeyini korumasını sağlamak için minimum ve maksimum ölçek geçersiz kılınma eşiklerini (ekli özellikler ve CacheInvalidationThresholdMinimumCacheInvalidationThresholdMaximum ile) ayarlayın. Varsayılan olarak ve önbelleğe alınmaz. Başka bir ifadeyle fırçayla çizilen bir şeyin yeniden işlenecek olması gerekirken fırça içeriğinin tamamının önce ara bir yüzeyde yeniden DrawingBrushVisualBrush işlenecek olması gerekir.
BitmapEffect BitmapEffect , etkilenen tüm içeriğin donanım hızlandırma olmadan işlenmesini sağlar. En iyi performans için BitmapEffect kullanmayın.

Performans Etkisi: Orta

Özellik Öneri
MeshGeometry3D Bir örgü, paylaşılan köşelere sahip üçgenler olarak tanımlandığı zaman ve bu köşeler aynı konuma, normale ve doku koordinatlarına sahipse, paylaşılan her köşeyi yalnızca bir kez tanımlayın ve ardından ile dizine göre üçgenlerinizi TriangleIndices tanımlayın.
ImageBrush Boyut üzerinde açık denetime sahipken (ve/veya kullanırken) doku boyutlarını en aza RenderTargetBitmap indirmeyi ImageBrush deneyin. Daha düşük çözünürlüklü dokuların görsel kalitesini düşürebilir, bu nedenle kalite ile performans arasında doğru dengeyi bulmaya çalışabilirsiniz.
Opak -lık Saydam 3B içeriği (yansımalar gibi) işlerken, 1'den küçük bir değere ayar olarak ayrı bir saydamlık oluşturmak yerine fırçalar veya malzemelerde opaklık özelliklerini kullanın (veya OpacityColorViewport3DViewport3D.Opacity aracılığıyla).
Viewport3D Bir sahnede Viewport3D kullanmakta olduğu nesne sayısını en aza indirme. Her model için ayrı Viewport3D örnekleri oluşturmak yerine birçok 3D modeli aynı Viewport3D'ye koyabilirsiniz.
Freezable Genellikle , , Fırçalar ve Malzemeleri MeshGeometry3DGeometryModel3D yeniden kullanmak faydalıdır. Hepsi, 'den türetildiklerinden çok Freezable ayrılabilir.
Freezable Özellikleri Freeze uygulamanıza değişmeden kalacak olduğunda Freezables üzerinde yöntemini çağırma. Donma, çalışma kümelerini azaltabilir ve hızı artırabilir.
Brush ImageBrushFırçanın VisualBrush içeriği DrawingBrush değişmeyecek olduğunda veya yerine kullanın. 2D içeriği aracılığıyla bir'e Image dönüştürmek ve sonra bir içinde RenderTargetBitmapImageBrush kullanılabilir.
BackMaterial gerçekten kendi BackMaterial yüzlerinin arka yüzlerini görmek zorunda olmadığınız sürece GeometryModel3D kullanma.
Light Düşük hız (en hızlıdan en yavaşa):

AmbientLight

DirectionalLight

PointLight

SpotLight
MeshGeometry3D Örgü boyutlarını şu sınırların altında tutmaya çalışabilirsiniz:

Positions: 20.001 Point3D örnek

TriangleIndices: 60.003 Int32 örnek
Material Malzeme hızı (en hızlıdan en yavaşa):

EmissiveMaterial

DiffuseMaterial

SpecularMaterial
Brush Windows Presentation Foundation (WPF) 3B, görünmez fırçaları (siyah ortam fırçaları, açık fırçalar vb.) geri kabul etmemektedir tutarlı bir şekilde. Bunları sahnenden göz önünde bulundurarak göz önünde bulundurarak.
MaterialGroup Bir içinde her biri başka bir işleme geçişini sağlar; bu nedenle birçok malzeme, hatta basit malzemeler dahil olmak üzere GPU'lar için doldurma MaterialMaterialGroup taleplerini önemli ölçüde artırabilir. içinde malzeme sayısını en aza MaterialGroup indirme.

Performans Etkisi: Düşük

Özellik Öneri
Transform3DGroup Animasyona veya veri bağlamaya ihtiyacınız yoksa, birden çok dönüştürme içeren bir dönüştürme grubu kullanmak yerine tek bir kullanın. Bunu, aksi takdirde dönüştürme grubunda bağımsız olarak var olacak tüm dönüştürmelerin ürünü olarak MatrixTransform3D ayarlarsınız.
Light Sahnenizin ışık sayısını en aza indirme. Bir sahnede çok fazla ışık Windows Presentation Foundation (WPF) yazılım işlemeye geri dönmeye zorlar. Sınırlar kabaca 110 DirectionalLight nesne, 70 PointLight nesne veya 40 SpotLight nesnedir.
ModelVisual3D Nesneleri statik nesnelerden ayrı örneklere koyarak ModelVisual3D ayırma. ModelVisual3D, dönüştürülmüş sınırları önbelleğe GeometryModel3D alan modelden "daha ağırdır". GeometryModel3D, model olacak şekilde optimize edilmiştir; ModelVisual3D, sahne düğümü olacak şekilde optimize edilmiştir. ModelVisual3D kullanarak GeometryModel3D'nin paylaşılan örneklerini sahneye alın.
Light Sahnenin ışık sayısını değiştirme sayısını en aza indirme. Her ışık sayısı değişikliği, yapılandırma daha önce mevcut değilse (ve dolayısıyla gölgelendiricisi önbelleğe alınmamışsa) gölgelendirici yeniden oluşturma ve yeniden derlemeyi zorlar.
Açık Siyah ışık görünür olmayacaktır, ancak işleme süresine ek olarak yenilerini ekler; bunları göz önünde bulundurarak göz önünde bulundurarak bunları yok sayma.
MeshGeometry3D MeshGeometry3D'nin , , ve gibi Windows Presentation Foundation (WPF) içinde büyük koleksiyonların derleme süresini en aza indirmek için koleksiyonları değer popülasyondan önce PositionsNormals önceden TextureCoordinatesTriangleIndices boyuta küçülttü. Mümkünse, koleksiyonların oluşturucularını diziler veya Listeler gibi önceden doldurulan veri yapılarını iletir.

Ayrıca bkz.