Достижение максимальной производительности WPF 3D
При использовании Windows Presentation Foundation (WPF) для создания трехмерных элементов управления и включения трехмерных сцен в приложениях, важно рассмотреть вопрос оптимизации производительности. Здесь представлен список 3D классов и свойств, которые влияют на производительность приложения, а также рекомендации по оптимизации производительности при их использовании.
В этом разделе предполагается, что хорошо знакомы с Windows Presentation Foundation (WPF) трехмерные функции. В этом документе приводятся советы для «уровень отрисовки 2» — примерно определяется как оборудование, поддерживающее версия построителя текстуры 2.0 и вершинный построитель текстуры версии 2.0. Дополнительные сведения см. в разделе уровни отрисовки графики.
Влияние на производительность: High
Свойство | Рекомендация |
---|---|
Brush | Скорость кисти (от самой быстрой к самой медленной): Solid Linear Image Drawing Visual Radial Drawing Visual |
Clip |
Задайте Viewport3D.ClipToBounds значение false, если вы не обязательно должны иметь Windows Presentation Foundation (WPF) явно усечение содержимого Viewport3D прямоугольник Viewport3D. Windows Presentation Foundation (WPF) Сглаженный обрезки может выполняться очень медленно, и ClipToBounds (медленно) включен по умолчанию на Viewport3D. |
Is |
Задайте Viewport3D.IsHitTestVisible значение false, если нет необходимости Windows Presentation Foundation (WPF) рассмотреть содержимое Viewport3D при выполнении проверки нажатия мыши. Проверка нажатия трехмерного содержимого выполняется программным образом и может быть достаточно больших сеточных. Is |
Geometry |
Создавайте различные модели только в том случае, когда им нужен различные материалы или преобразования. В противном случае попробуйте объединить несколько Geometry |
Mesh |
Сетка анимации — Изменение отдельных вершин сетки на основе покадрового — не всегда эффективно в Windows Presentation Foundation (WPF). Чтобы свести к минимуму влияние на производительность уведомления об изменениях, при изменении каждой вершины, отсоедините сетку из визуального дерева до выполнения каждой вершины. После сетки был изменен, снова присоедините ее к визуальному дереву. Кроме того попробуйте минимизировать размер сетки, таким образом, будет анимирован. |
3D сглаживание | Чтобы увеличить скорость отрисовки, отключите мультисэмплинга на Viewport3D , установив присоединенное свойство EdgeAliased . По умолчанию, 3D сглаживание отключено на Microsoft Windows XP и включены на Windows Vista с 4 образцами на пиксель. |
Текста | Live текст в трехмерной сцене (live, так как он Drawing |
Tile |
Если необходимо использовать VisualCache ). Пороги недействительности минимальный и максимальный масштаб (с помощью вложенных свойств Cache |
Bitmap |
Bitmap |
Влияние на производительность: Средняя
Свойство | Рекомендация |
---|---|
Mesh |
Когда сетки определяется как соседними треугольники с общими вершинами, и эти вершины имеют те же позиции, обычный и координаты текстуры, определите каждую общую вершину только один раз, а затем определите треугольники по индексу с Triangle |
Image |
Попробуйте уменьшить размеры текстуры при наличии явного управления размер (при использовании Render |
Непрозрачность | При отрисовке прозрачные трехмерного содержимого (например отражений), используйте свойства непрозрачности кисти или материалов (с помощью Opacity или Color) вместо создания отдельного прозрачные Viewport3D , задав Viewport3D.Opacity значение меньше 1. |
Viewport3D | Свести к минимуму количество Viewport3D объектов, вы используете в сцене. Поместите несколько 3D моделей в тот же Viewport3D, а не создавать отдельные экземпляры Viewport3D для каждой модели. |
Freezable | Обычно это полезно для повторного использования MeshFreezable . |
Freezable | Вызовите Freeze метод на объектах Freezable, если их свойства останется без изменений в приложении. Замораживание можно уменьшить рабочего набора, а также повысить скорость. |
Brush | Используйте Image |
Back |
Не используйте Back |
Light | Скорость света (самая быстрая к самой медленной): Ambient Directional Point Spot |
Mesh |
Попробуйте сохранять размер сетки в эти ограничения: Positions: 20 001 Point3D экземпляров Triangle |
Material | Скорость материала (самая быстрая к самой медленной): Emissive Diffuse Specular |
Brush | Windows Presentation Foundation (WPF) Объемные эффекты не отказывается от невидимых кистей (черных кистей окружения, кистей очистки и т.д.) согласованным образом. Рассмотрите возможность отказаться от сцены этих средств. |
Material |
Каждый Material в Material |
Влияние на производительность: Low
Свойство | Рекомендация |
---|---|
Transform3DGroup | При анимации не требуется или привязки данных, вместо использования преобразования группы, содержащей несколько преобразований, использовать единую Matrix |
Light | Свести к минимуму количество освещения в сцене. Слишком большое количество источников света в сцене заставит Windows Presentation Foundation (WPF) на переключение на программную отрисовку. Эти ограничения действуют примерно 110 Directional |
Model |
Разделите перемещения объектов из статических объектов, помещая их в отдельных Model |
Light | Свести к минимуму количество раз, изменять число источников света на сцене. Каждое изменение числа источников света заставляет повторного создания шейдера и повторной компиляции, если ранее существовал конфигурации (и тем самым ее построитель уже кэширован). |
Светлый | Черные источники света не будут отображаться, но будут увеличивать время построения. Рассмотрите возможность отказаться от них. |
Mesh |
Чтобы свести к минимуму время создания больших коллекций в Windows Presentation Foundation (WPF), например MeshGeometry3D Positions, Normals, Texture |