Швидкість 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, а також чотирьох A5 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 до 133 FPS. Загальне навантаження з Runtime 2.3 становить 167% (із загальної кількості 400%), і з Runtime 2.4 навантаження падає до 81%. Зауважте, що збільшена швидкість рендерингу також впливає на завантаження процесора. Якщо vsync увімкнено та FPS обмежено до 60 FPS, завантаження процесора становить 74%.
Приклад низького рівня: ми бачимо лише незначне збільшення навантаження на процесор на 5%, в основному через те, що програма використовує Qt Quick, але це з FPS, що йде від 41 до 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 доступна як за комерційною ліцензією, так і ліцензією з відкритим вихідним кодом.