使用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应用程序的详细博客文章中所述,低端群集示例已得到很好的优化

lowendcluster

 

为了使应用程序尽可能轻量级,只将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集群示例故意沉重,具有较大且未完全优化的纹理,高分辨率等。

kria3dclusterdemo

在高端示例中,所有仪表和其他元素都是实时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):

studio_fps

高端示例:使用新的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上的低端示例:

studio_cpu

高端示例:使用新的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上的低端示例:

studio_ram

高端示例:与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在商业和开源许可下均可使用。

你喜欢吗?分享它
分享到LinkedInGoogle+的在脸书上分享在Twitter上发推文

发表于Biz Circuit&Dev Loop设计图形性能Qt 3D Studio

11条评论

凉!
我们可以期待Qt3d也能利用这些变化吗?目前Qt3d的表现还不错。对于有许多物体的大场景,渲染器远不及像Godot这样的其他3D引擎的性能。

干杯

答复
 

@Eli:遗憾的是,由于结构上的差异,无法利用Qt 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等帧的高效处理,性能损失最小。

答复
 

@TTGil:是的,Qt 3D正在接受改进和新功能。例如,即将发布的Qt 5.13将支持glTF 2.0场景导入到Qt 3D。

答复
 
Christian Feldbacher

您好TTGil,
您可以在这里找到由Felgo提供的Qt解决方案:https://felgo.com/cross-platform-development/qt-ar-why-and-how-to-add-augmented-reality-to- 
您-移动应用

干杯,克里斯

答复
 
纽约

我不知道为什么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/所示

答复
 
M3GG1D0

我认为Qt3D将从这些改进中受益。然后我研究了博客和评论,并意识到事实并非如此。Qt3D API很好,有很多潜力。

https://blog.qt.io/blog/2019/06/18/significant-performance-improvements-qt-3d-studio-2-4/

posted @ 2019-06-19 21:30  findumars  Views(3473)  Comments(0Edit  收藏  举报