创建优化的3D场景
在Qt设计Studio中,您可以通过各种方式创建3D场景。您选择的策略应始终取决于场景的目标平台。场景内容的创作方式可能会对UI的运行时性能产生重大影响。下文所述的“最佳3D场景”展示了四种创建场景的不同方法。此外,请参阅优化3D场景图形性能的指南以及基于用例的3D场景最佳实践。
最佳3D场景示例
最佳3D场景示例包含四个版本的相同厨房场景,这些场景是通过不同的策略创建的:高、低、组合和顶点颜色。与场景的其他版本相比,高场景包含的对象数量显著更多。低、组合和顶点场景包含较少的对象,因为它们已通过例如将几何体和烘焙材料组合到纹理中进行优化。以下图像显示了每个场景在导航器中的组件,以说明场景之间的结构差异。
高场景
高场景(1)包含总共27个对象。场景在否则方面与低场景相似,但包含更多细节和动画组件,例如可以打开的橱柜门和烤箱上的把手。
低场景
低场景(2)包含总共12个对象。每个模型,例如橱柜、台灯、盘子和水槽,都是独立的网格。
组合场景
组合场景(3)将所有网格组合成一个单独的对象。所有材料都烘焙到一个单独的纹理中。
顶点颜色场景
顶点着色场景(4)将所有网格合并成一个对象,而网格的颜色是由.mesh文件中的顶点数据提供的,其中包括一个材料和没有纹理。
优化您的3D场景
为了优化您3D场景的图形性能,您应该首先考虑您是否需要动画化3D对象、灯光、摄像机或场景中的其他组件。如果不是,可以通过例如合并几何图形和将材料烘焙成纹理来简化场景结构。理想情况下,预先渲染您的3D图像到2D图像。您不应该通过渲染静态3D对象来浪费资源。还应该检查您的场景是否有相同网格的多个实例。如果有,只需导入网格的一个实例,在场景中重复它,并使用相同的材料为每个副本。
请参阅以下有关场景图、资产复杂度、CPU特定优化和模型几何的相关指南。
场景图
场景图是描述将要渲染的场景的节点层次结构。
在Qt Design Studio中,场景图通过导航器中的树形视图表示。您还可以在代码视图中查看节点的层次结构。通过最小化场景图的大小,可以最小化运行场景时所需的工作量。在优化方面,当可能时,应避免不必要的组和复杂的层次结构。具有复杂父项的深层层次结构会增加性能成本。
资产复杂度
您的UI或场景的性能有时可能会在渲染时间上受到瓶颈。通过简化您的资产来避免这种情况。
对于3D模型,您应尽量使用最少的三角形单元或顶点来实现所需的结果。还请注意,较小的图像需要更少的内存且渲染更快。
优化CPU性能
渲染对象需要CPU进行大量处理工作。处理每个组件会消耗资源,因此减少可见对象的数量可以减少从CPU需要的工作量。
为了减少可见对象的数量
- 合并位置接近且共享纹理的对象。
注意: 合并不共享纹理的对象在运行场景时不会增加CPU性能。
- 通过将单独的纹理组合成一个单一生成的纹理图集(如在厨房场景示例中的合并场景)来使用更少的材料。
- 最小化导致对象被渲染多次的因素的数量,例如反射和阴影。
优化模型几何
为了优化模型的几何形状
- 尽量减少模型中使用的三角形单元数量。
- 最小化UV映射接缝和由重复顶点创建的硬边数量。
基于用例的3D场景最佳实践
以下表格总结了有关优化3D场景的最佳实践的用例形式。
如何... | 解决方案 |
---|---|
从3D场景中获得最佳性能。 | 如果您不需要动画,则预先将3D场景渲染为2D图像。 |
为场景中的某些对象添加动画(例如,打开门)。 | 合并所有静态对象,并且仅导出每个动画组件的一个(例如,每种门类型)。 |
使用动画摄像机获得最佳性能。 | 在这种情况下,使用2D图像不是选项,因此您应结合所有几何图形,并将光照和材料烘焙成单个材料。 |
使用动画光源获得最佳性能。 | 在这种情况下,使用2D图像不是选项,因此您应结合所有几何图形,并将所有材料烘焙成单个材料。 |
在所有网格分离的3D场景中获得最佳性能。 | 为相同网格的每个实例使用相同的材质。 |
在运行时禁用其中一个网格的渲染。 | 保持特定网格分离,但合并其余组件。 |
使用低内存烘焙纹理。 | 将网格颜色烘焙到顶点颜色中(参见示例项目中的顶点颜色场景)。 |
在特定的Qt许可证下可用。
了解更多。