Delen via


WPF 3D-prestaties maximaliseren

Wanneer u de Windows Presentation Foundation (WPF) gebruikt om 3D-besturingselementen te bouwen en 3D-scènes in uw toepassingen op te nemen, is het belangrijk om te overwegen prestaties te optimaliseren. Dit onderwerp bevat een lijst met 3D-klassen en eigenschappen die gevolgen hebben voor de prestaties van uw toepassing, samen met aanbevelingen voor het optimaliseren van prestaties wanneer u deze gebruikt.

In dit onderwerp wordt ervan uitgegaan dat u geavanceerde kennis hebt van de 3D-functies van Windows Presentation Foundation (WPF). De suggesties in dit document zijn van toepassing op 'rendering tier 2', die grofweg zijn gedefinieerd als hardware die ondersteuning biedt voor pixel-shader versie 2.0 en hoekpunt-shader versie 2.0. Zie Graphics Rendering-lagenvoor meer informatie.

Invloed op de prestaties: hoog

Eigenschap Aanbeveling
Brush Borstelsnelheid (snelste naar langzaam):

SolidColorBrush

LinearGradientBrush

ImageBrush

DrawingBrush (in cache)

VisualBrush (in cache)

RadialGradientBrush

DrawingBrush (niet in cache)

VisualBrush (niet in cache)
ClipToBoundsProperty Stel Viewport3D.ClipToBounds in op onwaar wanneer u Windows Presentation Foundation (WPF) niet expliciet hoeft te gebruiken om de inhoud van een Viewport3D naar de rechthoek van Viewport3D te knippen. Windows Presentation Foundation (WPF) antialiased knipsel kan erg traag zijn en ClipToBounds is standaard ingeschakeld (traag) op Viewport3D.
IsHitTestVisible Stel Viewport3D.IsHitTestVisible in op onwaar wanneer u Windows Presentation Foundation (WPF) niet nodig hebt om rekening te houden met de inhoud van een Viewport3D bij het testen van muistreffers. Het testen van 3D-inhoud wordt uitgevoerd in software en kan traag zijn met grote meshes. IsHitTestVisible is standaard ingeschakeld (traag) op Viewport3D.
GeometryModel3D Maak alleen verschillende modellen wanneer ze verschillende materialen of transformaties vereisen. Probeer anders veel GeometryModel3D exemplaren te samenvoegen met hetzelfde materiaal en transformeert ze in een paar grotere GeometryModel3D en MeshGeometry3D exemplaren.
MeshGeometry3D Mesh-animatie, waarbij de afzonderlijke hoekpunten van een mesh per frame worden gewijzigd, is niet altijd efficiënt in Windows Presentation Foundation (WPF). Als u de gevolgen voor de prestaties van wijzigingsmeldingen wilt minimaliseren wanneer elk hoekpunt wordt gewijzigd, ontkoppelt u de mesh van de visuele structuur voordat u per hoekpuntwijziging uitvoert. Zodra de mesh is gewijzigd, kunt u deze opnieuw koppelen aan de visuele boomstructuur. Probeer ook de grootte van meshes te minimaliseren die op deze manier worden geanimeerd.
3D Antialiasing Als u de renderingsnelheid wilt verhogen, schakelt u multisampling uit op een Viewport3D door de gekoppelde eigenschap in te stellen EdgeMode op Aliased. Standaard is 3D-antialiasing ingeschakeld in Windows met 4 steekproeven per pixel.
Tekst Livetekst in een 3D-scène (omdat het zich in een DrawingBrush of VisualBrushbevindt) kan traag zijn. Probeer in plaats daarvan afbeeldingen van de tekst te gebruiken (via RenderTargetBitmap) tenzij de tekst wordt gewijzigd.
TileBrush Als u een VisualBrush of een DrawingBrush in een 3D-scène moet gebruiken omdat de inhoud van de kwast niet statisch is, probeer de kwast op te slaan in de cache (de gekoppelde eigenschap CachingHint instellen op Cache). Stel de minimale en maximale invalideringsdrempels voor schaal (met de gekoppelde eigenschappen CacheInvalidationThresholdMinimum en CacheInvalidationThresholdMaximum) in, zodat de in de cache opgeslagen penselen niet te vaak ververst worden, terwijl u toch het gewenste kwaliteitsniveau behoudt. Standaard worden DrawingBrush en VisualBrush niet in de cache opgeslagen, wat betekent dat telkens wanneer iets met de kwast opnieuw moet worden gerenderd, de volledige inhoud van de kwast eerst opnieuw naar een tussenliggend oppervlak moet worden gerenderd.
BitmapEffect BitmapEffect dwingt alle getroffen inhoud om zonder hardwareversnelling weergegeven te worden. Gebruik BitmapEffectniet voor de beste prestaties.

Invloed op de prestaties: gemiddeld

Eigenschap Aanbeveling
MeshGeometry3D Wanneer een mesh wordt gedefinieerd als aangrenzende driehoeken met gedeelde hoekpunten en die hoekpunten dezelfde positie, normale en textuurcoördinaten hebben, definieer elk gedeeld hoekpunt slechts één keer en definieer vervolgens uw driehoeken per index met TriangleIndices.
ImageBrush Probeer patroongrootten te minimaliseren wanneer u expliciet controle hebt over de grootte (wanneer u een RenderTargetBitmap en/of een ImageBrushgebruikt). Houd er rekening mee dat patronen met een lagere resolutie de visuele kwaliteit kunnen verminderen, dus probeer de juiste balans te vinden tussen kwaliteit en prestaties.
Ondoorzichtigheid Wanneer u translucente 3D-inhoud (zoals weerspiegelingen) weergeeft, gebruikt u de dekkingseigenschappen voor borstels of materialen (via Opacity of Color) in plaats van een afzonderlijke translucente Viewport3D te maken door Viewport3D.Opacity in te stellen op een waarde kleiner dan 1.
Viewport3D Minimaliseer het aantal Viewport3D objecten dat u in een scène gebruikt. Plaats veel 3D-modellen in dezelfde Viewport3D in plaats van afzonderlijke Viewport3D-exemplaren te maken voor elk model.
Freezable Meestal is het handig om MeshGeometry3D, GeometryModel3D, borstels en materialen opnieuw te gebruiken. Alle zijn multiparentable omdat ze zijn afgeleid van Freezable.
Freezable Roep de methode Freeze aan op Freezables wanneer hun eigenschappen ongewijzigd blijven in uw toepassing. Bevriezen kan de werkset van het geheugen verlagen en de snelheid verhogen.
Brush Gebruik ImageBrush in plaats van VisualBrush of DrawingBrush wanneer de inhoud van het kwast niet verandert. 2D-inhoud kan worden geconverteerd naar een Image via RenderTargetBitmap en vervolgens in een ImageBrushworden gebruikt.
BackMaterial Gebruik BackMaterial alleen als u daadwerkelijk de achterkant van uw GeometryModel3Dmoet zien.
Light Lichte snelheid (snelste naar langzaam):

AmbientLight

DirectionalLight

PointLight

SpotLight
MeshGeometry3D Probeer mesh-grootten onder deze limieten te houden:

Positions: 20.001 Point3D exemplaren

TriangleIndices: 60,003 Int32 exemplaren
Material Materiaalsnelheid (snelst naar langzaam):

EmissiveMaterial

DiffuseMaterial

SpecularMaterial
Brush Windows Presentation Foundation (WPF) 3D kiest niet voor onzichtbare borstels (zwarte omgevingsborstels, duidelijke borstels, enzovoort) op een consistente manier. U kunt deze weglaten uit uw scène.
MaterialGroup Elke Material in een MaterialGroup leidt tot een extra rendering pass, waardoor het gebruik van veel materialen, zelfs eenvoudige, de vulvereisten voor uw GPU aanzienlijk kunnen verhogen. Minimaliseer het aantal materialen in uw MaterialGroup.

Invloed op de prestaties: laag

Eigenschap Aanbeveling
Transform3DGroup Wanneer u geen animatie of gegevensbinding nodig hebt, gebruikt u in plaats van een transformatiegroep met meerdere transformaties één MatrixTransform3Dte gebruiken, zodat deze het product is van alle transformaties die anders onafhankelijk in de transformatiegroep zouden bestaan.
Light Minimaliseer het aantal lichten in uw scène. Te veel lichten in een scène dwingen Windows Presentation Foundation (WPF) om terug te vallen op softwarerendering. De limieten zijn ongeveer 110 DirectionalLight objecten, 70 PointLight objecten of 40 SpotLight objecten.
ModelVisual3D Scheid bewegende objecten van statische objecten door ze in afzonderlijke ModelVisual3D-exemplaren te plaatsen. ModelVisual3D is zwaarder dan GeometryModel3D omdat het getransformeerde grenzen in de cache opslaat. GeometryModel3D is geoptimaliseerd voor een model; ModelVisual3D is geoptimaliseerd als een scèneknooppunt. Gebruik ModelVisual3D om gedeelde exemplaren van GeometryModel3D in de scène te plaatsen.
Light Minimaliseer het aantal keren dat u het aantal lichten in de scène wijzigt. Elke wijziging van het aantal licht dwingt een shader-regeneratie en -hercompilatie af, tenzij die configuratie eerder bestond (en dus de shader in de cache had geplaatst).
Licht Zwarte lichten zijn niet zichtbaar, maar ze zullen worden toegevoegd aan de rendertijd; overweeg ze weg te laten.
MeshGeometry3D Om de bouwtijd van grote verzamelingen in Windows Presentation Foundation (WPF), zoals de Positions, Normals, TextureCoordinatesen TriangleIndicesvan een MeshGeometry3D, te minimaliseren, moet u de verzamelingen vooraf van de juiste grootte voorzien voordat u waarden toevoegt. Geef indien mogelijk de constructors van de verzamelingen vooraf ingevulde gegevensstructuren door, zoals matrices of lijsten.

Zie ook