查看: 1512|回复: 9

osg中FBX的效率问题

[复制链接]

该用户从未签到

发表于 2011-3-12 11:13:54 | 显示全部楼层 |阅读模式
本帖最后由 zjfzjf 于 2011-3-12 17:08 编辑

建立900个positiontransform节点,然后附加动画模型子节点,帧率不到一帧,八核cpu占用率40%
positiontransform* xform[2000];
osg::node *model = osgDB::readNodefile("character.fbx");
for(int i=0; i<30;++i)
{
  for(int j=0;j<30;++j)
  {
      xform =  new positionTransform;
     //设置位置缩放等
      xform ->addChid(model);
      root->addChild(xform);
  }
}
如下图所示, 截图中间白色的是900个运动着的人模。
请教大家几个问题:
1、加载单个人模时,模型时而看见时而隐藏,为什么和视角有关系呢。
2、加载人模之前20多帧,加载后却一帧不到,update花费时间很多是什么原因呢
3、怎样处理才能提高效率呢
未命名.JPG

该用户从未签到

发表于 2011-3-14 08:49:12 | 显示全部楼层
我不太明白您的问题的意思,不过我确信您的做法是疯狂的。任何人物模型的复杂度都不会太低,顶点数一定不少。您直接创建了900个加入到场景里,并且没有任何分块分层措施的话……

该用户从未签到

 楼主| 发表于 2011-3-15 15:08:25 | 显示全部楼层
真是让array见笑了,但是项目要求模拟这么多的人,而且还是在比较小的视野范围内,举个例子就像检阅式那样,请教一下Array怎样处理这种情况,先前用cal3d同样的代码写法是可以支持1000--2000人的。

该用户从未签到

发表于 2011-3-15 23:26:51 | 显示全部楼层
回复 3# zjfzjf


    我觉得array的意思是你应该考虑遮挡,让osg的剔除特性帮你提高绘制的性能。

该用户从未签到

发表于 2011-3-16 08:37:04 | 显示全部楼层
我的意思是应该考虑LOD和空间索引的措施。Cal3D本身的机制可能对这些都进行了优化处理

该用户从未签到

 楼主| 发表于 2011-3-16 21:47:10 | 显示全部楼层
感谢楼上的回复,请教array能具体讲一下空间索引的方法吗

该用户从未签到

发表于 2011-3-17 08:54:10 | 显示全部楼层
那就深了……四叉树,八叉树,BSP,KD树,R树………………

该用户从未签到

 楼主| 发表于 2011-3-17 09:58:25 | 显示全部楼层
就四叉树来说我可以理解大块地形可以用此方法进行,可是,900个人模距离人眼很近,怎么用四叉树管理呢,
还有ogra 有instance的概念,osg的instance是不是不同于ogre呢

该用户从未签到

发表于 2011-3-17 13:22:57 | 显示全部楼层
instanced可以理解成OSG中共享子节点的概念,您当然可以这样做来减轻CPU端的负担,以及减少显示列表的分配,不过对于绘制不会有明显的帮助

另一种instanced是glDrawInstanced的意思,在这里我想它没有用武之地
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表