创建优化的3D场景

在Qt设计Studio中,您可以通过各种方式创建3D场景。您选择的策略应始终取决于场景的目标平台。场景内容的创作方式可能会对UI的运行时性能产生重大影响。下文所述的“最佳3D场景”展示了四种创建场景的不同方法。此外,请参阅优化3D场景图形性能的指南以及基于用例的3D场景最佳实践

最佳3D场景示例

最佳3D场景示例包含四个版本的相同厨房场景,这些场景是通过不同的策略创建的:高、低、组合和顶点颜色。与场景的其他版本相比,高场景包含的对象数量显著更多。低、组合和顶点场景包含较少的对象,因为它们已通过例如将几何体和烘焙材料组合到纹理中进行优化。以下图像显示了每个场景在导航器中的组件,以说明场景之间的结构差异。

"Navigators for the four scenes in the Optimal 3D Scene."

高场景

"The High Scene in the Optimal 3D Scene"

高场景(1)包含总共27个对象。场景在否则方面与低场景相似,但包含更多细节和动画组件,例如可以打开的橱柜门和烤箱上的把手。

低场景

"The Low Scene in the Optimal 3D Scene"

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

组合场景

"The Combined Scene in the Optimal 3D Scene"

组合场景(3)将所有网格组合成一个单独的对象。所有材料都烘焙到一个单独的纹理中。

顶点颜色场景

"The Vertex Color Scene in the Optimal 3D Scene"

顶点着色场景(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许可证下可用。
了解更多。