Show / Hide Table of Contents

Достижение максимальной производительности WPF 3D

При использовании Windows Presentation Foundation (WPF) для создания трехмерных элементов управления и включения трехмерных сцен в приложениях, важно рассмотреть вопрос оптимизации производительности. Здесь представлен список 3D классов и свойств, которые влияют на производительность приложения, а также рекомендации по оптимизации производительности при их использовании.

В этом разделе предполагается, что хорошо знакомы с Windows Presentation Foundation (WPF) трехмерные функции. В этом документе приводятся советы для «уровень отрисовки 2» — примерно определяется как оборудование, поддерживающее версия построителя текстуры 2.0 и вершинный построитель текстуры версии 2.0. Дополнительные сведения см. в разделе уровни отрисовки графики.

Влияние на производительность: High

Свойство Рекомендация
Brush Скорость кисти (от самой быстрой к самой медленной):

SolidColorBrush

LinearGradientBrush

ImageBrush

DrawingBrush (с кэшированием)

VisualBrush (с кэшированием)

RadialGradientBrush

DrawingBrush (без кэширования).

VisualBrush (без кэширования).
ClipToBoundsProperty Задайте Viewport3D.ClipToBounds значение false, если вы не обязательно должны иметь Windows Presentation Foundation (WPF) явно усечение содержимого Viewport3D прямоугольник Viewport3D. Windows Presentation Foundation (WPF) Сглаженный обрезки может выполняться очень медленно, и ClipToBounds (медленно) включен по умолчанию на Viewport3D.
IsHitTestVisible Задайте Viewport3D.IsHitTestVisible значение false, если нет необходимости Windows Presentation Foundation (WPF) рассмотреть содержимое Viewport3D при выполнении проверки нажатия мыши. Проверка нажатия трехмерного содержимого выполняется программным образом и может быть достаточно больших сеточных. IsHitTestVisible (медленно) включен по умолчанию на Viewport3D.
GeometryModel3D Создавайте различные модели только в том случае, когда им нужен различные материалы или преобразования. В противном случае попробуйте объединить несколько GeometryModel3D экземпляры с одним и тем же материалы и преобразования в несколько больших GeometryModel3D и MeshGeometry3D экземпляров.
MeshGeometry3D Сетка анимации — Изменение отдельных вершин сетки на основе покадрового — не всегда эффективно в Windows Presentation Foundation (WPF). Чтобы свести к минимуму влияние на производительность уведомления об изменениях, при изменении каждой вершины, отсоедините сетку из визуального дерева до выполнения каждой вершины. После сетки был изменен, снова присоедините ее к визуальному дереву. Кроме того попробуйте минимизировать размер сетки, таким образом, будет анимирован.
3D сглаживание Чтобы увеличить скорость отрисовки, отключите мультисэмплинга на Viewport3D , установив присоединенное свойство EdgeMode для Aliased. По умолчанию, 3D сглаживание отключено на Microsoft Windows XP и включены на Windows Vista с 4 образцами на пиксель.
Текста Live текст в трехмерной сцене (live, так как он DrawingBrush или VisualBrush) может выполняться медленно. Попробуйте вместо этого использовать изображения текста (с помощью RenderTargetBitmap) Если не приведет к изменению текста.
TileBrush Если необходимо использовать VisualBrush или DrawingBrush в трехмерной сцене, так как содержимое кисти не является статическим, попробуйте, кэшировать кисть (установив это присоединенное свойство CachingHint для Cache). Пороги недействительности минимальный и максимальный масштаб (с помощью вложенных свойств CacheInvalidationThresholdMinimum и CacheInvalidationThresholdMaximum), чтобы кэшируемых кистей не будет повторно создать слишком часто, сохраняя при этом нужный уровень качества. По умолчанию DrawingBrush и VisualBrush не кэшируются, это означает, что каждый раз, когда что-то закрашивается с кисть, которая должна быть повторно подготовленных к просмотру, все содержимое кисти сначала должен быть заново отрисовать промежуточных область.
BitmapEffect BitmapEffect заставляет все измененное содержимое будет отображаться без аппаратного ускорения. Для наилучшей производительности, не используйте BitmapEffect.

Влияние на производительность: Средняя

Свойство Рекомендация
MeshGeometry3D Когда сетки определяется как соседними треугольники с общими вершинами, и эти вершины имеют те же позиции, обычный и координаты текстуры, определите каждую общую вершину только один раз, а затем определите треугольники по индексу с TriangleIndices.
ImageBrush Попробуйте уменьшить размеры текстуры при наличии явного управления размер (при использовании RenderTargetBitmap и/или ImageBrush). Обратите внимание, что текстуры более низкого разрешения могут снизить качество изображения, поэтому следует найти правильный баланс между качеством и производительностью.
Непрозрачность При отрисовке прозрачные трехмерного содержимого (например отражений), используйте свойства непрозрачности кисти или материалов (с помощью Opacity или Color) вместо создания отдельного прозрачные Viewport3D , задав Viewport3D.Opacity значение меньше 1.
Viewport3D Свести к минимуму количество Viewport3D объектов, вы используете в сцене. Поместите несколько 3D моделей в тот же Viewport3D, а не создавать отдельные экземпляры Viewport3D для каждой модели.
Freezable Обычно это полезно для повторного использования MeshGeometry3D, GeometryModel3D, кистей и материалов. Все являются multiparentable, так как они являются производными от Freezable.
Freezable Вызовите Freeze метод на объектах Freezable, если их свойства останется без изменений в приложении. Замораживание можно уменьшить рабочего набора, а также повысить скорость.
Brush Используйте ImageBrush вместо VisualBrush или DrawingBrush при содержимое кисти не изменится. 2D-содержимого могут преобразовываться в Image через RenderTargetBitmap , а затем использовать в ImageBrush.
BackMaterial Не используйте BackMaterial бесполезно, если фактически см. в разделе с обратной стороны вашей GeometryModel3D.
Light Скорость света (самая быстрая к самой медленной):

AmbientLight

DirectionalLight

PointLight

SpotLight
MeshGeometry3D Попробуйте сохранять размер сетки в эти ограничения:

Positions: 20 001 Point3D экземпляров

TriangleIndices: 60,003 Int32 экземпляров
Material Скорость материала (самая быстрая к самой медленной):

EmissiveMaterial

DiffuseMaterial

SpecularMaterial
Brush Windows Presentation Foundation (WPF) Объемные эффекты не отказывается от невидимых кистей (черных кистей окружения, кистей очистки и т.д.) согласованным образом. Рассмотрите возможность отказаться от сцены этих средств.
MaterialGroup Каждый Material в MaterialGroup вызывает передачу другого отрисовки, таким образом, включая множество материалов, даже простое материалам, может существенно увеличить нагрузку заливки на установленный GPU. Свести к минимуму количество материалов в вашей MaterialGroup.

Влияние на производительность: Low

Свойство Рекомендация
Transform3DGroup При анимации не требуется или привязки данных, вместо использования преобразования группы, содержащей несколько преобразований, использовать единую MatrixTransform3D, настроив на будет произведением всех преобразований, которые в противном случае будет существовать независимо друг от друга в группе преобразования.
Light Свести к минимуму количество освещения в сцене. Слишком большое количество источников света в сцене заставит Windows Presentation Foundation (WPF) на переключение на программную отрисовку. Эти ограничения действуют примерно 110 DirectionalLight объектов, 70 PointLight объектов или 40 SpotLight объектов.
ModelVisual3D Разделите перемещения объектов из статических объектов, помещая их в отдельных ModelVisual3D экземпляров. ModelVisual3D «тяжелее» GeometryModel3D так, как он кэширует преобразованные границы. GeometryModel3D оптимизирован для модели. ModelVisual3D оптимизирован для узел сцены. Используйте ModelVisual3D для размещения общих экземпляров объекта GeometryModel3D в сцене.
Light Свести к минимуму количество раз, изменять число источников света на сцене. Каждое изменение числа источников света заставляет повторного создания шейдера и повторной компиляции, если ранее существовал конфигурации (и тем самым ее построитель уже кэширован).
Светлый Черные источники света не будут отображаться, но будут увеличивать время построения. Рассмотрите возможность отказаться от них.
MeshGeometry3D Чтобы свести к минимуму время создания больших коллекций в Windows Presentation Foundation (WPF), например MeshGeometry3D Positions, Normals, TextureCoordinates, и TriangleIndices, предварительно размер коллекции, перед заполнением значение. Если это возможно передайте коллекции конструкторов предварительно заполненных такие структуры данных, массивов или списков.

См. также

  • Обзор трехмерной графики
In This Article
  • Влияние на производительность: High
  • Влияние на производительность: Средняя
  • Влияние на производительность: Low
  • См. также
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX