使用Qt 3D Studio 2.4显着提升性能(渲染速度提高了565%)
发布于2019年6月18日星期二
11评论Qt 3D Studio 2.4显着改善性能
发表于Biz Circuit&Dev Loop,设计,图形,性能,Qt 3D Studio
除了有效使用系统资源之外,3D渲染的速度对于3D引擎也是必不可少的。即将推出的新Qt 3D Studio 2.4版本可显着提升渲染性能,并进一步节省CPU和RAM利用率。使用我们的示例高端嵌入式3D应用程序,渲染速度提高了565%,而RAM使用和CPU负载分别下降了20%和51%。
性能是Qt的关键驱动因素,对于能够在嵌入式设备上运行复杂的3D应用程序尤为重要。我们一直在通过早期版本的Qt 3D Studio 不断提高资源效率,即将推出的Qt 3D Studio 2.4在渲染性能方面迈出了重要一步。确切的性能提升在很大程度上取决于应用程序和使用的硬件,因此我们在本博文中详细介绍了两个示例应用程序和嵌入式硬件。本文中使用的示例应用程序是汽车仪表集群,但在使用Qt 3D Studio运行时的任何应用程序中都可以看到类似的改进。
瑞萨R-Car D3的入门级嵌入式示例
测量中使用的入门级嵌入式设备是 Renesas R-Car D3,它具有Imagination PowerVR GE8300入门级GPU(https://www.imgtec.com/powervr-gpu/ge8300/)和一个ARM Cortex A53 CPU核心。操作系统是Linux。
使用的示例应用程序是低端群集,可从https://git.qt.io/public-demos/qt3dstudio/tree/master/LowEndCluster获得。正如关于优化3D应用程序的详细博客文章中所述,低端群集示例已得到很好的优化。

为了使应用程序尽可能轻量级,只将ADAS视图创建为实时3D用户界面。使用Qt Quick创建组合仪表的其他部分。这使得即使在像Renesas R-Car D3这样的入门级硬件上也可以拥有实时3D用户界面。
采用NVIDIA Tegra X2的高端嵌入式示例
用于测量的高端嵌入式设备是配备Tegra X2 SoC的NVIDIA Jetson TX2开发板,该板具有256核NVIDIA Pascal™GPU和双核NVIDIA Denver 2 64位以及四核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流使用纹理共享进入3D用户界面。
渲染性能提升
新Qt 3D Studio 2.4版本的最大改进是渲染性能 - 使相同的应用程序在同一硬件上渲染更多帧每秒(FPS)。与Qt一样,我们的目标是稳定运行60 FPS,但在嵌入式设备上,纯粹的性能还不够。当存在热管理和处理不同使用场景等项目时,通常不会在SoC的图形功能的边缘运行。对于诸如组合仪表之类的应用,性能需要在所有操作条件下都是平滑的,包括在系统的最大负载下。出于高端示例的测量目的,我们禁用了vsync,允许系统绘制尽可能多的帧。在典型的实际应用程序中,始终存在vsync集,
下图显示了测量的每秒帧数,NVIDIA TX2上的高端示例(vsync off)和瑞萨R-Car D3上的低端示例(vsync on):

高端示例:使用新的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%,因为Qt Quick的最大FPS上限为60 FPS。使用Qt 3D Studio 2.3,应用程序实现了41 FPS,而使用新的2.4运行时,它可轻松达到60 FPS。就像更强大的高端硬件一样,SoC的多余容量可用于运行更复杂的3D用户界面,或者只是不使用。
CPU负载改善
应用程序的总CPU负载是多个事物的总和,其中之一是由3D引擎引起的负载。在嵌入式应用程序中,重要的是在应用程序中使用3D不会导致CPU过载。如果应用程序超出可用CPU,则无法在目标FPS处渲染,并且屏幕上可能出现口吃或其他伪影。
下图显示了在NVIDIA TX2上使用高端示例测量的CPU负载以及瑞萨R-Car D3上的低端示例:

高端示例:使用新的Qt 3D Studio 2.4,与Qt 3D Studio 2.3相比,我们看到CPU负载大幅提升51%,同时FPS从20 FPS提升至133 FPS。运行时2.3的总负载为167%(总计400%),运行时2.4的负载下降到81%。请注意,增加的渲染速度也会影响CPU负载。在vsync on和FPS上限为60 FPS时,CPU负载为74%。
低端示例:我们看到CPU负载仅有5%的适度改善,这主要是由于应用程序主要是Qt Quick。但这是因为FPS同时从41 FPS升至60 FPS。还应该注意的是,R-Car D3的CPU功能不是很强大,因此整个应用程序的FPS增加会对整体CPU负载产生影响。
内存使用改进
对于任何图形,特别是3D,它是通常占用大部分RAM的资产。有一些方法可以优化,最明显的是避免不必要的细节水平和利用纹理压缩。出于本博文的目的,我们不会使用任何特定的优化方法。测量使用完全相同的应用程序完成,除了使用不同版本的Qt 3D Studio运行时之外没有其他任何变化。
下图显示了使用NVIDIA TX2上的高端示例测量的RAM使用情况以及瑞萨R-Car D3上的低端示例:

高端示例:与Qt 3D Studio 2.3相比,新的Qt 3D Studio 2.4减少了48MB。这比应用程序的整体RAM使用量减少了20%。
低端示例: 在更简单的示例中,使用新的2.4运行时,RAM使用量减少了9MB。百分比这是应用程序的整体RAM使用量减少15%。
这是如何实现的?
这些改进确实很大,特别是在嵌入式设备上,所以有人可能想知道新版本中的改变是什么?我们所做的是使用与Qt 3D Studio 1.x版本相同的运行时架构,而不是在Qt 3D上运行。3D引擎的核心逻辑仍然与之前相同,但它直接在OpenGL上运行,而不是使用Qt 3D。这提供了显着改进的性能,尤其是在嵌入式设备上,而且在更强大的桌面系统上。通过直接在OpenGL上运行Studio的3D引擎,我们可以避免渲染开销并简化架构。更简单的体系结构转换为内部信令更少,内存中的对象更少,并且多个呈现线程之间的同步需求减少。所有这些使我们能够对Qt 3D Studio 1进行进一步的优化。
3D运行时的更改不需要对大多数项目进行任何更改。只需更改import语句(导入QtStudio3D.OpenGL 2.4而不是 导入QtStudio3D 2.3)然后用新的Qt 3D Studio 2.4重新编译就足够了。由于API和与应用程序相关的3D引擎部分与之前相同,所有相同的材质,着色器等都像以前一样工作。在极少数情况下需要进行一些更改,例如某些自定义材料,这些变化相当小。
获得Qt 3D Studio 2.4
如果您还没有尝试过Qt 3D Studio 2.4预发行版,那么您应该采取这种方式。它可以在预览节点下的在线安装程序中使用。目前我们已经发布了第三个Beta版,很快就会发布候选版本。最终版本的目标是在6月底之前发布。Qt 3D Studio在商业和开源许可下均可使用。




11条评论
礼
凉!
我们可以期待Qt3d也能利用这些变化吗?目前Qt3d的表现还不错。对于有许多物体的大场景,渲染器远不及像Godot这样的其他3D引擎的性能。
干杯
DEDIU IONUT
“我们所做的是使用与Qt 3D Studio 1.x版本相同的运行时架构,而不是在Qt 3D上运行。3D引擎的核心逻辑仍然与之前相同,但它直接在OpenGL上运行,而不是使用Qt 3D。“
这是否意味着Qt3D的结束?难道我们不能拥有一个清晰直观的声明性3d层,它在易用性和性能之间取得了适当的平衡吗?直接使用OpenGL就像在Qt C ++中编写程序时一样编程......在编程语言中类比:我并不主张通过Java获得的易用性或更糟糕的javascript(无骨架语言如此非结构化,如此敏捷,如此前卫,最好的框架称为BACKBONE :))))Qt3D不是IT,不是那种神奇的平衡吗?好难过…
@Dediu:不,这对Qt 3D没有影响。它继续是完全支持的模块,具有自己的编程API。只是Qt 3D Studio 2.4运行时不再使用Qt 3D,而是直接适应OpenGL。对Qt 3D的任何其他用户没有影响。
礼
嗨Tuukka Turunen感谢您回答我们的问题
Qt3d studio现在有一个独立的渲染后端完全与qt3d解耦而不是修复当前的设计,这有点奇怪。从我的角度来看,这只能意味着当前的qt3d架构存在一些缺陷。必须保持两个单独的渲染后端有点奇怪。
我希望我听起来不苛刻
干杯
TTGil
似乎Qt3D中的开发优先级有一段时间是颠倒的,其中添加了操纵角色动画等功能,而基本原理是错误的,并且在许多情况下无法使用。它最近变得更好(Qt 5.13有明显的质量改进)。我希望对Qt3D的投资继续。即使性能不等于使用原始OpenGL,在GL,Metal,Vulkan等上运行一个代码库的长期好处也值得追求。很想看到更多用于AR / MR的Qt3D示例,特别是围绕来自ARKit等帧的高效处理,性能损失最小。
纽约
我不知道为什么Nvidia引擎在2D渲染中没有更好的性能。许多客户正在使用2D集群。
这个(Qt 3D Studio 2.4)是NVIDIA引擎(或多或少)。2D界面应继续使用Qt Quick,如https://blog.qt.io/blog/2019/04/02/optimizing-real-time-3d-entry-level-hardware/所示
https://blog.qt.io/blog/2019/06/18/significant-performance-improvements-qt-3d-studio-2-4/
使用Qt 3D Studio 2.4显着提升性能(渲染速度提高了565%)的更多相关文章
- Qt 3D Studio 1.0 Resleased
Qt 这家伙又整出一个新东西了,Qt 3D Studio 1.0 新闻链接:https://blog.qt.io/blog/2017/11/30/qt-3d-studio-1-0-released/ ...
- Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader
Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader 之前写了两篇文章,介绍了我在边缘检測上面的研究.实际上.使用GPU对渲染图像进行边缘检測.前提是须要进行两遍渲染.前 ...
- Qt Visual Studio Add-in 导出的 .pri 怎么用?
今天咱们介绍一下 Qt Add-in 导出的 pri 文件怎么用. 一般需要导出这个文件, 主要应该是跨平台编译的需求, 所以这个文件里包含的东西会比较少, 咱们看下导出的文件是什么样子的: # ...
- C++问题-Qt Visual Studio Add-in
问题现象:用VS打开其他人的项目提示如下:Qt Visual Studio Add-in...中间全TMD的英文,我就省略...QT版本不对,需要修改QT版本. 问题原因:占时不明,因为我是开发Del ...
- Qt 3D研究(九):尝试第二边缘检测方法
Qt 3D研究(九):尝试第二边缘检测方法 三维应用程序,通过FBO.将3D图像渲染成纹理,然后对渲染成的纹理进行图像处理,终于显示在屏幕上的.是风格化后的图案.上一次我使用了一种普通的图像处理方法: ...
- Qt 3D教程(三)实现对模型材质參数的控制
Qt 3D教程(三)实现对模型材质參数的控制 蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/47131841.欢迎同行前来探讨. ...
- Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力)
系列文章 Visual Studio 2015速递(1)——C#6.0新特性怎么用 Visual Studio 2015速递(2)——提升效率和质量(VS2015核心竞争力) Visual Studi ...
- C4C Cloud Application Studio做ABSL开发的一些性能方面的最佳实践
Stefan Hagen在博文SAP Cloud Application Studio Performance Best Practices里介绍了在C4C里使用Cloud Application S ...
- qt 3d 绘图
首先不得不说,要感谢北京邮电大学的阿科.感谢他慷慨的分享和极具科学态度的记录,将自己搜集到的众多资料收集整理发布,拯救众多苦逼寻找方案的程序员于苦海之中.因为最近接手新的项目,涉及到使用opengl做 ...
随机推荐
- LeetCode 229. 求众数 II(Majority Element II )
题目描述 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2,3] 输出: ...
- python操作s3 -- boto2.x
以下是python操作s3常用方法: boto s3手册:http://boto.readthedocs.org/en/latest/ref/s3.html boto s3快速入门:http://bo ...
- Kafka Eagle 安装
Kafka Eagle 是一款开源的 Kafka 集群监控系统. 一.下载 https://download.kafka-eagle.org/ 二.安装 # 解压 .tar.gz -C /opt/ / ...
- mockjs从入门到精通视频教程
Mock.js 是一款模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试.提供了以下模拟功能: (1)根据数据模板生成模拟数据 (2)模拟 Ajax 请求,生成并返回模拟数据 (3 ...
- 【MyBatis】从一千万记录中批量删除八百万条,耗时4m7s
批量删除主要借助了MySql的limit函数,其次用了in删除. 代码如下: package com.hy.action; import java.io.Reader; import java.uti ...
- dts是如何来描述iommu与PCI(e)之间的关系?
1. 在一颗树的根下每个PCI(e)设备被它的请求id(AKA RID)独一无二的标识,一个请求ID由三部分组成,总线号,设备号和功能号,如: Bits [15:8] 是总线号 Bits [7:3]是 ...
- [转]Nginx配置信息详解
序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也 ...
- AS中集成bug管理系统
这里大家可以选择各种Bug管理工具,几乎包括了市面上常用的各种Bug跟踪管理工具. 由于如:点击JIRA,填入公司JIRA服务器的地址,填入Server.Username和密码即可,点击Test,弹出 ...
- "挡位"还是"档位",究竟谁错了
http://baijiahao.baidu.com/s?id=1581395663965196858&wfr=spider&for=pc 对于“挡”与“档”两个字,我一直并没有给以太 ...
- DevOps - 构建本地开发环境
1 - 构建个人本地开发环境 在个人计算机中搭建一个精简版的.与生产环境基本一致的本地开发环境,既不会占用团队公共环境的资源,也可以缩短等待时间,从整体上提高效率. 本地开发环境的适用场景: 从应用程 ...

