OpenSceneGraph 渲染大量节点
OpenSceneGraph render a lot of nodes
为什么当我将 4900 个节点加载到场景时性能会下降?如果有 125 没问题,200 还可以,但是如果有更多渲染帧率会急剧下降吗?根节点包含包含(模型(在 3ds 中)+ 纹理 + 一些科学计算)的子节点,并且所有子节点都在从 0 到 4899 的循环中创建。我尝试在所有子节点到位后在根节点上使用 osgUtil::Optimizer 但仍然没有改进。试图将所有节点放在一个 geode 中,但它也没有帮助。如何在性能和节点数量之间取得平衡?
4900个节点,节点多得要死!
您应该开始阅读有关 LOD
和 PagedLOD
的内容。
PageLOD
将提高性能。思路是这样的(假设第一张图片远很多):
因为路途遥远,不想知道太多细节。但是当你放大时,你想看到那些细节。您必须指定每个 LOD
级别的模型以及您希望如何激活它们。这是棘手的部分。
另外,检查是否可以共享节点。例如,您无需创建 4 个不同的轮子,而只需创建一个轮子。然后,添加 4 PositionAttitudeTransform/MatrixTransform 并为每个节点添加轮子节点。
StateAttributes
也是如此,尽可能分享!
最后,如果你有很多重复的geom,看看geometry instancing。
为什么当我将 4900 个节点加载到场景时性能会下降?如果有 125 没问题,200 还可以,但是如果有更多渲染帧率会急剧下降吗?根节点包含包含(模型(在 3ds 中)+ 纹理 + 一些科学计算)的子节点,并且所有子节点都在从 0 到 4899 的循环中创建。我尝试在所有子节点到位后在根节点上使用 osgUtil::Optimizer 但仍然没有改进。试图将所有节点放在一个 geode 中,但它也没有帮助。如何在性能和节点数量之间取得平衡?
4900个节点,节点多得要死!
您应该开始阅读有关 LOD
和 PagedLOD
的内容。
PageLOD
将提高性能。思路是这样的(假设第一张图片远很多):
因为路途遥远,不想知道太多细节。但是当你放大时,你想看到那些细节。您必须指定每个 LOD
级别的模型以及您希望如何激活它们。这是棘手的部分。
另外,检查是否可以共享节点。例如,您无需创建 4 个不同的轮子,而只需创建一个轮子。然后,添加 4 PositionAttitudeTransform/MatrixTransform 并为每个节点添加轮子节点。
StateAttributes
也是如此,尽可能分享!
最后,如果你有很多重复的geom,看看geometry instancing。