2015-04-03 64 views
1

为什么当我加载一个4900个节点到场景时,性能会下降?如果有一个125可以,200仍然可以,但是如果有更多的渲染帧速率会降低dramaticaly?根节点包含孩子,其中包含(模型(在3ds)+纹理+一些科学计算),并且都创建在从0到4899的环境中。我尝试在所有孩子的地方使用osgUtil :: Optimizer,但仍然没有改进。试图把所有的节点放在一个geode中,但它也没有帮助。我如何在性能和节点数量之间取得平衡?OpenSceneGraph渲染了很多节点

+0

真的,为了提出最好的建议,我们必须知道它们是什么类型的节点以及它们代表什么。不同的策略(实例化等)被用于不同的情况。 – XenonofArcticus 2015-04-06 16:49:12

回答

1

4900个节点似乎是一个非常多的节点!

您应该开始阅读关于LODPagedLODPageLOD将提高性能。我们的想法是这样的(想象一下第一个图像是很多更远):

Low detail

High detail

既然你很远很远,你不想要很多的细节。但是当你放大时,你想看到这些细节。您必须指定每个LOD级别的模型以及您想要如何激活它们。这是棘手的部分。

此外,请检查您是否可以共享节点。例如,而不是有4个不同的车轮,你只需创建一个车轮。然后,添加4 PositionAttitudeTransform/MatrixTransform并将轮子节点添加到它们中的每一个。 StateAttributes也是如此,尽可能分享!

最后,如果您有很多重复几何,请参阅几何实例

+0

非常感谢!看起来性能得到了巨大的提升,但是当我将所有节点添加到场景摄像机的行为变得很奇怪。例如,在我在场景中添加大量节点之前,如果我获得摄像机边界球半径的半径,它等于12.5f左右,但是当场景中的所有节点都会达到18000.0f。其次,有什么方法可以将视角设置得更远一点(缩小一点)。 – 2015-04-05 15:40:25

+0

对于相机,看看[这里](http://stackoverflow.com/questions/21180092/openscenegraph-set-the-camera-at-an-initial-position);被接受的答案在相机上有非常有用的评论。 关于您的其他问题:相机半径变化时的不良行为是什么?我不太明白:) – 2015-04-06 08:05:29

+0

我会尽力解释它。我有一个轨迹球操纵器,当场景是空的时候,摄像机的移动是可以的,我可以用鼠标的中间按钮来移动它,但是当我添加节点到场景时,点击中间的按钮会使所有的东西都从摄像机中消失。只有当我注意到相机半径发生疯狂的18k值时才会发生这种情况。我可以提出一个建议,即轨迹球机械手的运动与相机的半径有一定的关系,但无法得到实际所在的位置。其他东西,如右按钮和左按钮正常工作。 – 2015-04-07 08:18:48