【QML】QML性能优化 | 3D场景优化


使用QML来做3D应用开发,优化3D场景和优化设计对3D应用程序将有着显著性能影响。本文描述几种优化3D场景的规则和方法。本文多数内容和观点参考于官方文档,并结合自己的实际使用整理完成。

一、四种3D场景设计方式

3D场景有多种不同的创建组合方式。例如:高级场景、低级场景、混合场景和Vertex颜色场景。与其他版本的场景相比,高级场景中包含了更多的对象。低级、混合和Vertex场景包含的对象相对更少,因为它们已经通过将几何形状和烘烤材料结合到纹理中进行了优化。下图显示了Navigator视图中每个场景中的组件,用于对比说明场景之间的结构差异:

(1-1)低级场景


如上图所示,低级场景总共包含12个对象。每个模型(例如橱柜、灯、盘子和水槽)都是独立的网格。

(1-2)高级场景


如上图所示,高场景总共包含27个对象。这个场景在其他方面与低级场景相似,但含有更多的细节和动画组件(如可以打开的橱柜门和烤箱的门闩)

(1-2)混合场景

混合场景是将所有的网格组合成一个单独对象,所有材料都被烘焙成单一的纹理。

(1-3)Vertex颜色场景

该场景将所有的网格组合成一个单独的对象,网格的颜色由.mesh文件的顶点数据描述,其中包括材质,没有纹理。

在本小节中,出现的高级场景、低级场景、混合场景和Vertex颜色场景四种场景,本质上是一种组织3D场景的方法。在高级场景中,包含的3D对象就非常多,为什么需要包含这么多的3D对象呢,多数情况下,就是为了将小对象分离出来做动画效果动画控制。如果一个场景中没有动画需求,则完全可采用混合场景和Vertex颜色场景的方法来设计3D场景,还提升了应用渲染性能。

二、3D场景优化规则

为了优化3D场景的图形渲染性能,首先应考虑是否需要给3D对象、灯光、相机或场景中的组件添加动画,如果不需要就尽可能简化场景结构,例如:可以将几何图形和烘烤材料结合到纹理中。理想情况下,将3D图像预渲染为2D图像是很好的选择。检查场景是否存在相同网格的多个实例,如果存在,则只导入一个网格实例,然后在场景中复制它,并为每个副本使用相同的材质。

(2-1)Scene Graph

在Qt Design Studio中,由Navigator中的树形视图表示场景图。同时,我们还可以在Code视图中查看节点的层次结构。通过最小化场景图,可以减少运行场景时所需的工作。因为具有复杂功能的深层层级嵌套将增加性能成本,为了优化场景图,应尽可能避免不必要的组和复杂的层次结构。

(2-2)资源文件优化

尽可能减少资源文件的使用和加载,可以提高渲染性能(在实际3D应用开发过程中,由于多种因素,设计过程中资源文件往往都非常多,一般的做法是:一边开发一边优化资源文件)。

在设计3D素材模型时,应尽量使用最少的三角形或顶点来达到预期的建模效果。因为在3D场景渲染时,较少的图形数量可以降低内存需求量并有助于快速渲染。

(2-3)CPU性能优化

显示3D对象需要CPU或者GPU的大量处理工作。处理每个3D组件都会消耗资源,因此减少可见对象的数量可以减少CPU的工作量。优化建议如下:

(1)合并位置相邻且共享纹理的对象。

注意:合并不共享纹理的对象不会在运行场景时提高CPU性能。

(2)将不同的纹理组合成一个纹理图集,以此方法来减少材料的使用。

(3)避免多次渲染对象。

(2-4)优化模型的几何形状

(1)减少模型中三角形的使用数量。

(2)减少用加倍顶点创建的UV映射接缝和硬边的数量。

三、总结

下表总结了优化3D场景相关的最佳实践:

序号3D行为最佳实践建议
1从3D场景中获得最佳性能如果不需要动画,可以将3D场景预渲染成2D图像。
2场景中物体的动画合并所有静态对象,只导出每个动画组件中的一个。
3相机动画虽然在这种情况下使用2D图像是不可取的,但应该将所有的几何图形、烘焙光照和材质合并到一个单一的材质中
4光照动画优化方法与“相机动画”一样
5在网格分离的3D场景中获得最佳性能对于同一个网格的每个实例使用相同的材质
6在运行时禁用网格渲染保持特定的网格分离,合并其他组件。
7使用低内存的烘焙纹理将网格颜色烘焙成顶点颜色

现代软件,3D开发属于较高级的开发了(做游戏的除外啦,哈哈),Qt Quick提供的3D开发基础组件的功能也非常强大,高版本的Qt对3D性能做了较多优化,且3D开发作为Quick的未来发展方向之一,也得到了官方的大量优化和维护。

下列为官方提供的一个车载中控终端软件demo,在软件中融入了3D元素,形象直观且炫酷。

Qt3D场景-车载终端-演示效果

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值