У меня есть простая сцена с 64 элементами ModelUIElement3D, каждый element3d Модель представляет собой группу моделей с 8 простыми геометриями, каждая геометрия содержит 3 материала, рассеянный, зеркальный и излучающий.
Все материалы используют сплошные кисти, так каксамые быстрые.
Геометрия, зеркальный материал и рассеянный материал замораживаются для повышения производительности.
Единственное, что не замораживается, это излучающие материалы, которые я буду периодически обновлять кистью с твердыми кистями..
Когда я запускаю приложение и меняю кисть только для одного эмиссионного материала из 1536 материалов на экране (64 * 8 * 3), производительность очень сильно падает, а FPS падает с 60до 15 кадров в секунду.
Даже у меня есть сплошные кисти в словаре, поэтому они кэшируются и создаются один раз.
Это изменение в кисти заставляет материал «мигать» (на самом деле этобыстрое исчезновение / исчезновение) на экране.Смена щетки в излучающем материале происходит каждые 20 мс.
Я вижу, что смена щетки для одного материала или 500 материалов не влияет на производительность.
Я комментирую строку, где я обновляю кисть, и получаю постоянные 60FPS, когда я раскомментирую строку, FPS понижается до +/- 15FPS, пробовал 3 разных машины, 4 ядра / 2 ядра, очень хорошографические карты или средние, почти не имеют значения, всегда между 15-25 FPS.
Я использую «Инструмент профилирования производительности для Windows Presentation Foundation» для измерения производительности, а HW IRT на кадр не делает.не идти выше 1 в любой момент.Когда я устанавливаю флажок «Обновление грязной области», я вижу, что вся сцена визуализируется каждые 20 мс, просто меняя кисть для одного небольшого материала.
Я читал, что WPF viewport3d не поддерживает грязную область, поэтому яЯ предполагаю, что вся сцена визуализируется с минимальными изменениями.
Если это так, могу ли я что-то сделать, чтобы улучшить это?Так как мне нужно создать статическую сцену с несколькими тысячами элементов UIE и 10 тысячами материалов, но изменения будут настолько минимальными, что я ожидал хорошей производительности.
Если сцена WHOLE воспроизводится каждый раз без возможности что-либо сделать, тогда бесполезно думать о WPF для создания динамического контента, и мне нужно перейти к другому, более сложному подходу, как DirectX.
Пожалуйста, подскажите любой намек, как сделать эту работу, потому что я не могу поверить, что это невозможно с WPF, и это какая-то ошибка с моей стороны.
В основном мне нужна большая сцена с минимальными изменениями, эти изменения происходятчасто в диапазоне от 5 до 20 мс и все еще получают 60FPS, так как есть немного материала треугольников, которые действительно меняются.
Спасибо,
Густаво.