Aracılığıyla paylaş


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

3B denetimler oluşturmak ve uygulamalarınıza 3B sahneler eklemek için Windows Presentation Foundation'ı (WPF) kullanırken performans iyileştirmeyi göz önünde bulundurmanız önemlidir. Bu konu, uygulamanız için performans etkileri olan 3B sınıfların ve özelliklerin bir listesini ve bunları kullanırken performansı iyileştirmeye yönelik önerileri sağlar.

Bu konu, Windows Presentation Foundation (WPF) 3B özellikleri hakkında gelişmiş bir anlayışa sahip olduğunu varsayar. Bu belgedeki öneriler, kabaca piksel gölgelendiricisi sürüm 2.0 ve köşe gölgelendiricisi sürüm 2.0'ı destekleyen donanım olarak tanımlanan "işleme katmanı 2" için geçerlidir. Daha fazla ayrıntı 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 (uncached)

VisualBrush (uncached)
ClipToBoundsProperty Windows Presentation Foundation'ın (WPF) içeriğini Viewport3D'nin dikdörtgenine açıkça kırpması Viewport3D gerekmediğinden false olarak ayarlayınViewport3D.ClipToBounds. Windows Presentation Foundation (WPF) antialiased kırpması çok yavaş olabilir ve ClipToBounds üzerinde Viewport3Dvarsayılan olarak etkindir (yavaş).
IsHitTestVisible Fare isabet testi gerçekleştirirken bir Viewport3D öğesinin içeriğini göz önünde bulundurmak için Windows Presentation Foundation'a (WPF) ihtiyacınız olmadığında false olarak ayarlayınViewport3D.IsHitTestVisible. Hit test 3D içeriği yazılımda yapılır ve büyük tirelerle yavaş olabilir. IsHitTestVisible üzerinde varsayılan olarak Viewport3Detkindir (yavaş).
GeometryModel3D Yalnızca farklı Malzemeler veya Dönüşümler gerektirdiğinde farklı modeller oluşturun. Aksi takdirde, aynı Materials ve Transforms ile birçok GeometryModel3D örneği birkaç büyük GeometryModel3D ve MeshGeometry3D örneğe birleştirmeyi deneyin.
MeshGeometry3D Çerçeve başına bir ağın tek tek köşelerini değiştirmek olan mesh animasyonu, Windows Presentation Foundation'da (WPF) her zaman verimli 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 yapmadan önce ağı görsel ağaçtan ayırın. Mesh değiştirildikten sonra görsel ağaca yeniden ekleyin. Ayrıca, bu şekilde animasyonlu olacak kafeslerin boyutunu en aza indirmeyi deneyin.
3B Antialiasing İşleme hızını artırmak için, ekli özelliği EdgeModeAliasedolarak ayarlayarak bir Viewport3D üzerinde çoklu örneklemeyi devre dışı bırakın. Varsayılan olarak, Windows'ta 3B antialiasing piksel başına 4 örnekle etkinleştirilir.
Metin Bir 3B sahnedeki canlı metin (veya VisualBrushiçinde DrawingBrush olduğundan canlı) yavaş olabilir. Metin değişmedikçe bunun yerine (aracılığıyla RenderTargetBitmap) metin görüntülerini kullanmayı deneyin.
TileBrush Fırçanın içeriği statik olmadığından 3B görünümde veya DrawingBrush kullanmanız VisualBrush gerekiyorsa, fırçayı önbelleğe almayı deneyin (ekli özelliği CachingHint olarak Cacheayarlama). Önbelleğe alınan fırçaların çok sık yeniden üretilmemesi ve istediğiniz kalite düzeyinin korunması için en düşük ve en yüksek ölçek geçersizleştirme eşiklerini (ekli özellikler CacheInvalidationThresholdMinimum ve CacheInvalidationThresholdMaximum) ayarlayın. Varsayılan olarak DrawingBrush ve VisualBrush önbelleğe alınmaz, yani fırçayla boyanan bir şeyin her yeniden işlenmesi gerektiğinde, fırçanın tüm içeriğinin önce ara bir yüzeye yeniden işlenmesi gerekir.
BitmapEffect BitmapEffect etkilenen tüm içeriğin donanım hızlandırma olmadan işlenmesini zorlar. En iyi performans için kullanmayın BitmapEffect.

Performans Etkisi: Orta

Özellik Öneri
MeshGeometry3D Bir ağ, paylaşılan köşeleri olan abutting üçgenleri olarak tanımlandığında ve bu köşeler aynı konum, normal ve doku koordinatlarına sahipse, paylaşılan köşeleri yalnızca bir kez tanımlayın ve ardından ile dizine göre TriangleIndicesüçgenlerinizi tanımlayın.
ImageBrush Boyut üzerinde açık denetiminiz olduğunda doku boyutlarını en aza indirmeyi deneyin (ve/veya ImageBrushkullanırkenRenderTargetBitmap). Daha düşük çözünürlüklü dokuların görsel kalitesini düşürebileceğini unutmayın, bu nedenle kalite ile performans arasında doğru dengeyi bulmaya çalışın.
Opak -lık Yarı saydam 3B içeriği (yansımalar gibi) işlerken, 1'den küçük bir değere ayarlayarak Viewport3D.Opacity ayrı bir yarı saydam Viewport3D oluşturmak yerine fırçalarda veya malzemelerde (Opacityveya Coloraracılığıyla) opaklık özelliklerini kullanın.
Viewport3D Bir sahnede kullandığınız nesne sayısını Viewport3D en aza indirin. Her model için ayrı Viewport3D örnekleri oluşturmak yerine birçok 3B modeli aynı Viewport3D'ye yerleştirin.
Freezable Genellikle , , GeometryModel3DFırçalar ve Malzemeleri yeniden kullanmak MeshGeometry3Dfaydalıdır. 'den Freezabletüretildiğinden tümü çok öğelidir.
Freezable Freeze Özellikleri uygulamanızda değişmeden kaldığında Freezables'da yöntemini çağırın. Donma, çalışma kümesini azaltabilir ve hızı artırabilir.
Brush Fırçanın VisualBrush içeriği değişmezken veya DrawingBrush yerine kullanınImageBrush. 2B içerik aracılığıyla RenderTargetBitmap öğesine Image dönüştürülebilir ve ardından içinde ImageBrushkullanılabilir.
BackMaterial 'nizin GeometryModel3Darka yüzlerini gerçekten görmeniz gerekmediği sürece kullanmayınBackMaterial.
Light Işık hızı (en hızlıdan en yavaşa):

AmbientLight

DirectionalLight

PointLight

SpotLight
MeshGeometry3D Ağ boyutlarını şu sınırların altında tutmaya çalışın:

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) 3D, görünmez fırçaları (siyah ortam fırçaları, temiz fırçalar vb.) tutarlı bir şekilde geri çevirmez. Bunları sahnenizden atmayı göz önünde bulundurun.
MaterialGroup Bir içindeki her Material biri başka bir MaterialGroup işleme geçişini neden olur, bu nedenle birçok malzeme, hatta basit malzemeler dahil olmak üzere GPU'nuzdaki doldurma taleplerini önemli ölçüde artırabilir. içindeki MaterialGroupmalzeme sayısını en aza indirin.

Performans Etkisi: Düşük

Özellik Öneri
Transform3DGroup Animasyona veya veri bağlamaya ihtiyacınız olmadığında, birden çok dönüşüm içeren bir dönüşüm grubu kullanmak yerine tek MatrixTransform3Dbir kullanın ve bunu dönüştürme grubunda bağımsız olarak var olabilecek tüm dönüşümlerin ürünü olarak ayarlayın.
Light Sahnenizdeki ışık sayısını en aza indirin. Bir sahnede çok fazla ışık olması 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 Hareket eden nesneleri ayrı örneklere yerleştirerek statik nesnelerden ayırın ModelVisual3D . ModelVisual3D, dönüştürülen sınırları önbelleğe almasından GeometryModel3D "daha ağırdır". GeometryModel3D model olacak şekilde iyileştirilmiştir; ModelVisual3D, bir sahne düğümü olacak şekilde iyileştirilmiştir. GeometryModel3D'nin paylaşılan örneklerini sahne içine yerleştirmek için ModelVisual3D kullanın.
Light Sahnedeki ışık sayısını değiştirme sayısını en aza indirin. Her ışık sayısı değişikliği, yapılandırma daha önce mevcut değilse (ve bu nedenle gölgelendiricisi önbelleğe alınmadıysa) bir gölgelendirici yeniden oluşturmayı ve yeniden derlemeyi zorlar.
Açık Siyah ışıklar görünmez, ancak işleme süresi ekler; bunları atmayı göz önünde bulundurun.
MeshGeometry3D Windows Presentation Foundation'da (WPF) büyük koleksiyonların oluşturma süresini en aza indirmek için; örneğin, MeshGeometry3D'nin Positions, Normals, TextureCoordinatesve TriangleIndices, koleksiyonlarını değer popülasyondan önce önceden boyutlandırın. Mümkünse, koleksiyonların oluşturucularının diziler veya Listeler gibi önceden doldurulmuş veri yapılarını geçirin.

Ayrıca bkz.