Улучшение производительности с Qt 3D Studio 2.4

Blog, Plot, Qt, Qt3D

Скорость 3D-рендеринга важна для 3D-движка в дополнение к эффективному использованию системных ресурсов. Предстоящий новый выпуск Qt 3D Studio 2.4 значительно повышает производительность рендеринга , а также обеспечивает дополнительную экономию ресурсов ЦП (CPU) и ОЗУ (RAM). В нашем примере высококачественного встроенного 3D-приложения скорость рендеринга увеличена на колоссальные 565%, а использование ОЗУ и загрузка ЦП снизились на 20% и 51% соответственно.

Производительность является ключевым фактором для Qt и особенно важна для возможности запуска сложных 3D-приложений на встроенных устройствах. Мы постоянно повышали эффективность использования ресурсов с более ранними выпусками Qt 3D Studio, а с выходом Qt 3D Studio 2.4 сделали большой шаг вперед в производительности рендеринга. Точное увеличение производительности во многом зависит от приложения и используемого оборудования, поэтому мы взяли два примера приложений и встроенное оборудование для более детального изучения. Примеры приложений, используемых в этом посте, представляют собой автомобильные инструментальные кластеры, но подобное улучшение можно увидеть в любом приложении, использующем среду выполнения Qt 3D Studio.

Пример начального уровня с Renesas R-Car D3

В качестве встроенного устройства измерения начального уровня используется Renesas R-Car D3, который имеет графический процессор (GPU) начального класса Imagination PowerVR GE8300 и один ARM Cortex A53 CPU core. Операционная система Linux.

В качестве примера приложения используется младший кластер, доступный по адресу https://git.qt.io/public-demos/qt3dstudio/tree/master/LowEndCluster . Пример низкоуровневого кластера хорошо оптимизирован.

Чтобы сделать приложение максимально легким, в режиме реального времени создается трехмерный пользовательский интерфейс ADAS view (advanced driver-assistance systems). Другие части приборного щитка создаются с помощью Qt Quick. Это позволяет иметь трехмерный пользовательский интерфейс в реальном времени даже на оборудовании начального класса, таком как Renesas R-Car D3.

Пример высокого уровня с NVIDIA Tegra X2

Высококачественным встроенным устройством, используемым в измерениях, является плата разработки NVIDIA Jetson TX2, оснащенная Tegra X2 SoC, которая имеет 256-ядерный графический процессор (GPU) NVIDIA Pascal ™ и двухъядерный 64-битный NVIDIA Denver 2, а также четырехъядерный процессор ARM Cortex-A57 MPCore CPU. Операционная система Linux.

В качестве примера приложения используется кластер Kria, доступный по адресу https://git.qt.io/public-demos/qt3dstudio/tree/master/kria-cluster-3d-demo . Пример кластера Kria сделан намеренно тяжелым с большими и не полностью оптимизированными текстурами, высоким разрешением и т. д.

В примере высокого класса все датчики и другие элементы выполнены в 3D-режиме реального времени, отображаемом во время выполнения Qt 3D Studio. Деталей Qt Quick очень мало, и они переносятся в трехмерный пользовательский интерфейс с помощью совместного использования текстур через потоки QML.

Улучшение производительности рендеринга

Самым большим улучшением в новой версии Qt 3D Studio 2.4 является производительность рендеринга - использование одного и того же приложения для рендеринга большего числа кадров в секунду (Frames Per Second (FPS) на одном и том же оборудовании. Как всегда с Qt, мы стремимся поддерживать стабильные 60 FPS, но на встроенных устройствах просто недостаточно производительности. Когда есть такие элементы, как управление нагревом и различные иные сценарии использования, то это обычно оплачивается запуском на самом краю графических возможностей SoC. В случае приложения, такого как «приборный щиток», производительность должна быть плавной при любых условиях эксплуатации, в том числе при максимальной нагрузке на систему. Для достижения целей измерения на примере высокого класса мы отключили vsync, что позволяет системе рисовать столько кадров, сколько может. В типичном реальном приложении всегда есть набор vsync, поэтому все, что мы можем превысить 60 FPS, означает экономию ресурсов обработки.

На графиках ниже показаны измеренные кадры в секунду с примером высокого уровня на NVIDIA TX2 (vsync выключен) и с примером низкого уровня на Renesas R-Car D3 (vsync включен):

Пример высокого уровня: с новой Qt 3D Studio 2.4 мы видим колоссальное улучшение производительности рендеринга на 565%. С Qt 3D Studio 2.3 приложение работало только со скоростью 20 FPS, но новая Qt 3D Studio 2.4 позволяет приложению запускать 133 FPS. Это измеряется отключением vsync, просто чтобы измерить возможности нового времени выполнения. На практике достаточно использовать 60 FPS, и можно использовать дополнительную емкость процессора, чтобы иметь больший экран (или другой экран) или более сложное приложение, или просто не использовать максимальную емкость SoC для экономии энергии.

Пример низкого уровня: улучшение составляет 46%, поскольку максимальный FPS ограничен до 60 FPS с помощью Qt Quick. С Qt 3D Studio 2.3 приложение достигало 41 FPS, а с новым временем выполнения 2.4 оно легко достигает 60 FPS. Как и в случае с более мощным высокопроизводительным оборудованием, избыточная емкость SoC может использоваться для запуска более сложного трехмерного пользовательского интерфейса или просто не использоваться.

Улучшение загрузки процессора

Общая загрузка ЦПУ (CPU) приложения представляет собой сумму нескольких вещей, одна из которых - нагрузка, вызванная 3D-движком. Во встроенных приложениях важно, чтобы использование 3D в приложении не вызывало чрезмерной нагрузки на процессор. Если приложение превысит допустимые возможности процессора, оно не сможет выполнить рендеринг с целевым FPS, и на экране могут появиться заикания.

На приведенных ниже графиках показана измеренная нагрузка на процессор с примером высокого уровня на NVIDIA TX2 и примером низкого уровня на Renesas R-Car D3:

Пример высокого уровня: с новой Qt 3D Studio 2.4 мы видим значительное увеличение нагрузки на процессор на 51% по сравнению с Qt 3D Studio 2.3, в то же время FPS увеличивается с 20 FPS до 133 FPS. Общая нагрузка с Runtime 2.3 составляет 167% (из общего числа 400%), а с Runtime 2.4 нагрузка падает до 81%. Обратите внимание, что увеличенная скорость рендеринга также влияет на загрузку процессора. Если vsync включен и FPS ограничен до 60 FPS, загрузка процессора составляет 74%.

Пример низкого уровня: мы видим лишь незначительное увеличение нагрузки на процессор на 5%, в основном из-за того, что приложение использует Qt Quick, но это с FPS, идущим от 41 FPS до 60 FPS одновременно. Следует также отметить, что процессор R-Car D3 не очень мощный, поэтому увеличение FPS всего приложения влияет на общую загрузку процессора.

Улучшение использования памяти

Ресурсы для любой графики и особенно 3D обычно занимают большую часть оперативной памяти (Random Access Memory, RAM). Существуют способы оптимизации, а также стоит избегать ненужного уровня детализации и использовать сжатие текстур. В этом посте мы не используем какие-либо конкретные методы оптимизации. Измерения выполняются с помощью одного и того же приложения, никаких других изменений, кроме использования разных версий Qt 3D Studio и их времени выполнения.

На графиках ниже показано измеренное использование ОЗУ (RAM) с примером высокого уровня на NVIDIA TX2 и с примером низкого уровня на Renesas R-Car D3:

Пример высокого уровня: в новой Qt 3D Studio 2.4 мы видим сокращение на 48 МБ по сравнению с Qt 3D Studio 2.3. Это на 20% снижает общее использование памяти приложением.

Пример низкого уровня: в более простом примере сокращение использования ОЗУ составляет 9 МБ при использовании нового времени выполнения версии 2.4. В процентном отношении это на 15% снижает общее использование памяти приложением.

Как это было достигнуто?

Улучшения действительно большие, особенно для встраиваемых систем, поэтому можно задаться вопросом, что изменилось в новой версии? Мы использовали ту же архитектуру времени выполнения, что и в выпусках Qt 3D Studio 1.x, вместо того, чтобы работать поверх Qt 3D. Основная логика 3D-движка остается такой же, как и раньше, но он работает прямо поверх OpenGL вместо использования Qt 3D. Это обеспечивает значительно улучшенную производительность, особенно на встроенных устройствах, а также на более мощных настольных системах. Запустив 3D-движок Studio прямо поверх OpenGL, мы избегаем накладных расходов при рендеринге и упрощаем архитектуру. Более простая архитектура обеспечивает меньшую внутреннюю сигнализацию, меньшее количество объектов в памяти и меньшую потребность в синхронизации между несколькими потоками рендеринга. Все это позволило нам провести дальнейшую оптимизацию по сравнению с Qt 3D Studio 1.x и, конечно же, представить новые функции, разработанные в выпусках Qt 3D Studio 2.x, поверх среды выполнения на основе OpenGL.

Изменение в среде выполнения 3D не требует каких-либо изменений для большинства проектов. Просто измените оператор импорта (import QtStudio3D.OpenGL 2.4 вместо import QtStudio3D 2.3) , а затем достаточно будет перекомпилировать с новым Qt 3D Studio 2.4. Поскольку API и части 3D-движка, относящиеся к приложению, точно такие же, как и раньше (все те же материалы, шейдеры и так далее) и, соответственно, работают так же. В редких случаях, когда необходимы некоторые изменения, например, для некоторых нестандартных материалов, они довольно малы.

Получить Qt 3D Studio 2.4

Если вы еще не опробовали предварительные выпуски Qt 3D Studio 2.4, вы должны обязательно попробовать. В настоящее время имеется третий бета-релиз, и вскоре будет представлен окончательный релиз, который планируется выпустить до конца июня. Qt 3D Studio доступна как по коммерческой лицензии, так и по лицензии с открытым исходным кодом.

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.
Support the author Donate

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Looking for a Job?
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

DSh
Sept. 21, 2019, 2:55 p.m.
Dmitrij Shilkov

C++ - Test 001. The first program and data types

  • Result:46points,
  • Rating points-6
s
Sept. 18, 2019, 5:19 p.m.
sanyalitv

C++ - Test 002. Constants

  • Result:33points,
  • Rating points-10
s
Sept. 18, 2019, 5:12 p.m.
sanyalitv

C++ - Test 001. The first program and data types

  • Result:80points,
  • Rating points4
Last comments
M
Sept. 20, 2019, 11:25 a.m.
Mark

вызываю метод get у m_downloader в другом методе и приложение начинает вылетать. В чем ошибка?
M
Sept. 19, 2019, 5:45 a.m.
Mark

А вот как выгрузить файл на сервер по http протоколу? Допустим на regRu. И как получить путь файла, которой отображается в файловом менеджере regRu, чтобы загрузить его.
Sept. 17, 2019, 6:07 a.m.
Misha Lebedev

Кстати интересные темы нашёл тут https://emacsway.github.io/ru/django-framework/#django-models Может что полезного тоже Евгений найдёте
Sept. 17, 2019, 4:50 a.m.
Misha Lebedev

Доброго времени суток. Спасибо за хороший ответ, У меня ситуация така что в галлереи будет несколько миллионов фотографий с фильтрами и тегами , и я опасаюсь за производительност . Это ос…
Sept. 17, 2019, 3:23 a.m.
Evgenij Legotskoj

Добрый день. Да, я тоже читал ту статью в своё время и согласен с тем, что внешние ключи гораздо лучше, чем GenericForeignKey. Выборки в ряде случае работают быстрее. Но лично мне про…
Now discuss on the forum
M
Sept. 22, 2019, 1:54 a.m.
Mark

Пока реализовал так: на сервере лежат сами файлы и файл с именами всех файлов и их версий, который админ обновляет при довавлении файла. Клиентское по парсит этот файл и таким образом понимает к…
MS
Sept. 21, 2019, 12:51 p.m.
Mihail Sermjazhko

Так работает import QtQuick 2.7import QtQuick.Window 2.2import QtQuick.Controls 2.0Window { id: demo width: 800 height: 600 visible: true color: "#ff303030" prope…
MS
Sept. 21, 2019, 11:46 a.m.
Mihail Sermjazhko

Говорят через делегат должно работать: ListView{ id:l anchors.fill: parent model: ["data 1","data 2","data 3"] currentIndex : 2 delegate: Text { Rectangle{ …
C
Sept. 21, 2019, 9:08 a.m.
Cobra91151

Здравствуйте! Я хочу подключатся к сетям WiFi Enterprise через свою программу. Настроил Radius Server, поключение к сети через Windows работает. Но при подключении через программу пишет: о…
Sept. 20, 2019, 4:56 a.m.
Pavel K.

Привет , подскажите кто-нибудь , как сделать драг н дроп , не нарушая при этом логику работы зума? import QtQuick 2.6 import QtGraphicalEffects 1.0 Page { id:win property string fi…
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB