使用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做 ...
随机推荐
- 9.Spring Cloud Config统一管理微服务配置
Spring Cloud Config统一管理微服务配置 9.1. 为什么要统一管理微服务配置 9.2. Spring Cloud Config简介 Spring Cloud Config为分布式系统 ...
- Leetcode题目169.求众数(简单)
题目描述: 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] ...
- fastadmin 全手动添加规则
全手动的话 你需要在规则管理里面添加规则 然后角色组就可以设置权限了如果是自动的话 应该就都生成了权限设置 1.增删改查的规则也要添加哦 2.角色组勾选相应的规则 https://ask.fastad ...
- SpringCloud(2)----SpringCloud理解篇
一.微服务概述 1.什么是微服务 目前的微服务并没有一个统一的标准,一般是以业务来划分将传统的一站式应用,拆分成一个个的服务,彻底去耦合,一个微服务就是单功能业务,只做一件事. 与微服务相对的叫巨石 ...
- 前端三大框架(Angular Vue React)
前端,HTML(超文本标记语言),CSS(层叠样式表)和JavaScript(脚本语言) HTML,通常说的h5,其实按标准来说,HTML4的后续版本不带编号了,并保证向前的兼容性 CSS的版本3,增 ...
- [转]Nginx配置信息详解
序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也 ...
- react-native关闭所有黄色警告
写RN经常会遇到黄色警告,很无奈,很多很多的黄色警告都是由组件自己导致的,建议在index.js 内的 AppRegistry.registerComponent('shareFile', () =& ...
- 一百零六:CMS系统之修改邮箱功能完成
这里采用把验证码放到memcached中,所以封装一个memcached的操作 import memcache cache = memcache.Client(['127.0.0.1:11211'], ...
- Http_urllib2
打印http消息在控制台httpHandler=urllib2.HTTPHandler(debuglevel=1)httpsHandler = urllib2.HTTPSHandler(debugle ...
- docker启动cavisor监控
docker启动cavisor监控 docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys: ...