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

Blog, Plot, Qt, Qt3D

Content

Скорость 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
Donate

Hello, Dear Users of EVILEG!!!

If the site helped you, then support the development of the site financially, please.

You can do it by following ways:

Thank you, Evgenii Legotckoi

v
April 9, 2020, 5:41 a.m.
vitalisimys

Qt - Test 001. Signals and slots

  • Result:21points,
  • Rating points-10
v
April 9, 2020, 5:36 a.m.
vitalisimys

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:40points,
  • Rating points-8
v
April 9, 2020, 5:32 a.m.
vitalisimys

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

  • Result:53points,
  • Rating points-4
Last comments
April 8, 2020, 9:12 a.m.
ogustbiller

Круто! Немного начинает проясняться что к чему. Спасибо.
K
April 7, 2020, 8:55 a.m.
KULINAR847

А вот уже и на python... #!/usr/bin/env python# -'''- coding: utf-8 -'''-import sysfrom PySide2.QtWidgets import *from PySide2.QtQuick import *from PySide2.QtCore import *from PySide2.…
April 3, 2020, 8:06 a.m.
Konstantin Grudnitskiy

Я надеюсь вы уже разобрались в чем дело, но если вдруг нет, то проблема состоит в том, что вы пытаетесь запустить программу из интерпретатора питона. Файл main.py это уже готова…
April 3, 2020, 6:18 a.m.
Konstantin Grudnitskiy

>>> text = 'hello world'>>> ' '.join(word for word in text.split()[:-1])'hello'>>> def remove_last_word(text):... return text and ' '.join(word for word in text.s…
March 27, 2020, 2:40 p.m.
Evgenij Legotskoj

Добрый день. В конце пятой статьи скачать можете.
Now discuss on the forum
DK
April 9, 2020, 3:31 a.m.
Dzhon Kofi

Привет. Делаю реализацию перемещения строк на QTableView с моделью QSqlTableModel. Буду в этой теме спрашивать нужное. Пока такой вопрос при создании модели: как мне узнать rowCount? int…
April 8, 2020, 5:42 p.m.
elyana

Подскажите как правильно реализовать... Нужно создать массив в C++ с переменными типа сhar или же int. В Qml будет переменная, например text, которая будет изменять своё значение в зависим…
DK
April 8, 2020, 6:29 a.m.
Dzhon Kofi

:-D блин, без слов, пойду пройдусь))
s
April 8, 2020, 4:59 a.m.
slava_d2000

Всем привет. Прошу помощи.есть статическая сборка 5.14.2 (без SSL) компилируется чистый шаблон на QML и Widgets если войти на компьютер в терминальной сессии и запустить программ…
s
April 6, 2020, 8:06 a.m.
shuric

Добрый день. Объясните пожалуйста ... ... допиливать стилевое оформление в прокси классе ... где именно копать ? В каком виртуальном методе лучше допиливать (если можно н…
EVILEG
About
Services
© EVILEG 2015-2019
Recommend hosting TIMEWEB