Улучшение производительности с 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 доступна как по коммерческой лицензии, так и по лицензии с открытым исходным кодом.

Virtual hosting with 10 percent discount
Virtual hosting with 10 percent discount
EVILEG offers reliable hosting with a 10% discount for virtual hosting and 5% for VPS
Support the author Donate

Comments

Only authorized users can post comments.
Please, Log in or Sign up
AS
July 22, 2019, 4:32 p.m.
Aleksandr Spiridonov

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

  • Result:46points,
  • Rating points-6
AS
July 22, 2019, 4:21 p.m.
Aleksandr Spiridonov

Qt - Test 001. Signals and slots

  • Result:73points,
  • Rating points1
July 22, 2019, 10 a.m.
Pavel K.

C++ - Test 006. Enumerations

  • Result:50points,
  • Rating points-4
Last comments
July 21, 2019, 6:03 a.m.
Evgenij Legotskoj

да, наверное, 32-х разрядную поддержку уже давно поа было выкинуть. К слову, у вас много проектов под Android? Часто много где вижу вопросы о том, пишет ли кто-то вообще на Qt под мобильные сист…
July 20, 2019, 2:41 p.m.
Andrej Jankovich

Очень полезная информация, увы уже выкинул поддержку 32 битных бедняг.
July 20, 2019, 9:31 a.m.
Mihailll

Вот так qDebug()<<"position:"<<event->scenePos();
July 20, 2019, 8:49 a.m.
Mihailll

Добрый день. Как можно узнать координату на графической сцене при отпускании клавиши мыши?
Now discuss on the forum
July 22, 2019, 10:50 a.m.
Pavel K.

Благодарю.Буду пробовать.
July 22, 2019, 10:10 a.m.
Pavel K.

Скорее всего в коде не правильно потоки используются. на форуме пишут кое что интересное - https://stackoverflow.com/questions/18112027/qt-5-1-qml-property-through-threads
July 22, 2019, 3:58 a.m.
Evgenij Legotskoj

Добрый день! Нужен совет сообщества по разработке функционала проверки орфографии. Одна из идей - добавить проверку орфографии при наборе текста статей. Полагаю, что наиболее аде…
July 22, 2019, 3:01 a.m.
Evgenij Legotskoj

Возможно, если при сохранении файла установить права доступа на файл. Что-то такое должно быть у QFile
Looking for a Job?
5,000.00 руб. - 15,000.00 руб.
Дизайнер
Moskovskiy, Moscow, Russia
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

EVILEG
About
Services
Join us
© EVILEG 2015-2019
Recommend hosting TIMEWEB