为什么当我加载一个4900个节点到场景时,性能会下降?如果有一个125可以,200仍然可以,但是如果有更多的渲染帧速率会降低dramaticaly?根节点包含孩子,其中包含(模型(在3ds)+纹理+一些科学计算),并且都创建在从0到4899的环境中。我尝试在所有孩子的地方使用osgUtil :: Optimizer,但仍然没有改进。试图把所有的节点放在一个geode中,但它也没有帮助。我如何在性能和节点数量之间取得平衡?OpenSceneGraph渲染了很多节点
回答
4900个节点似乎是一个非常多的节点!
您应该开始阅读关于LOD
和PagedLOD
。 PageLOD
将提高性能。我们的想法是这样的(想象一下第一个图像是很多更远):
既然你很远很远,你不想要很多的细节。但是当你放大时,你想看到这些细节。您必须指定每个LOD
级别的模型以及您想要如何激活它们。这是棘手的部分。
此外,请检查您是否可以共享节点。例如,而不是有4个不同的车轮,你只需创建一个车轮。然后,添加4 PositionAttitudeTransform/MatrixTransform并将轮子节点添加到它们中的每一个。 StateAttributes
也是如此,尽可能分享!
最后,如果您有很多重复几何,请参阅几何实例。
非常感谢!看起来性能得到了巨大的提升,但是当我将所有节点添加到场景摄像机的行为变得很奇怪。例如,在我在场景中添加大量节点之前,如果我获得摄像机边界球半径的半径,它等于12.5f左右,但是当场景中的所有节点都会达到18000.0f。其次,有什么方法可以将视角设置得更远一点(缩小一点)。 – 2015-04-05 15:40:25
对于相机,看看[这里](http://stackoverflow.com/questions/21180092/openscenegraph-set-the-camera-at-an-initial-position);被接受的答案在相机上有非常有用的评论。 关于您的其他问题:相机半径变化时的不良行为是什么?我不太明白:) – 2015-04-06 08:05:29
我会尽力解释它。我有一个轨迹球操纵器,当场景是空的时候,摄像机的移动是可以的,我可以用鼠标的中间按钮来移动它,但是当我添加节点到场景时,点击中间的按钮会使所有的东西都从摄像机中消失。只有当我注意到相机半径发生疯狂的18k值时才会发生这种情况。我可以提出一个建议,即轨迹球机械手的运动与相机的半径有一定的关系,但无法得到实际所在的位置。其他东西,如右按钮和左按钮正常工作。 – 2015-04-07 08:18:48
- 1. jsTree - 渲染优化|很长的渲染与2000个节点
- 2. JTree多节点渲染器问题
- 3. dojo.dnd.move节点渲染问题
- 4. MVCSitemap节点不渲染
- 5. 渲染HTMLImageElement DOM节点Preact
- 6. 渲染网络顶部的节点
- 7. GraphStream渲染节点和边缘缓慢
- 8. 概括渲染未知节点的树
- 9. 复选框节点渲染器
- 10. 两端渲染的节点框架
- 11. 节点JS Express锅炉板和渲染
- 12. CheckBox节点渲染器和编辑器
- 13. 节点乳胶图像渲染
- 14. JTree节点渲染器和节点编辑器中的多个组件
- 15. ModelSim波浪渲染很慢
- 16. 了Canvas.Top不渲染
- 17. 了解React渲染
- 18. 使用多种不同字体在JTree中渲染节点
- 19. OpenGL分层渲染只渲染零点
- 20. 用VBO渲染多边形似乎失去了一些顶点
- 21. 阿贾克斯渲染的战斧t:tree2只渲染第一个节点和子节点不扩展
- 22. libGDX渲染TextureRegion渲染得太多
- 23. '渲染到纹理'和多遍渲染
- 24. 在Mac上字体渲染很好,在Windows上搞砸了
- 25. XNA 4.0点顶点渲染
- 26. 尼渲染节目{{产量}}
- 27. 了解渲染封锁CSS
- 28. 多渲染目标
- 29. 渲染多页PDF
- 30. React |多个渲染
真的,为了提出最好的建议,我们必须知道它们是什么类型的节点以及它们代表什么。不同的策略(实例化等)被用于不同的情况。 – XenonofArcticus 2015-04-06 16:49:12