游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4283|回复: 9

OGRE中实体过多的问题?

[复制链接]

3

主题

7

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2006-11-29 15:39:00 | 显示全部楼层 |阅读模式
问题背景和要求:
整个场景由大约200~300个不同部件构成,每个部件由很多个(>400)个零件组成,现在想使用OGRE渲染整个场景,目前每个部件使用AutoCAD进行了建模,目前已将所有零件导成3ds格式在转换成mesh文件格式.用户要求在场景中需要能够访问到每个具体零件.
然而把所有的mesh和一个entity进行对应加载到ogre后太慢,经过测试,已目前硬件条件,ogre场景中能够存在的实体数如果大于800,其场景的渲染就慢的无法忍受.

我想场景中如果仅存在一个部件的所有零件实体以及其他部件实体,这样实体数就小于800了,也就是动态将mesh文件和实体对象进行关联,即一个实体对象对应多个mesh文件.不知道这样的程序该怎么写.

如果这样实现过于复杂,能否把部件做成mesh,mesh中包含所有零件的submesh,我目前的工具无法转换带有submesh的实体.
好像3dsmax Exporter 可以,但是在3dsmax中手工将这么多零件组装成一个mesh好像也不现实,有没有其他可行方法?

149

主题

4981

帖子

5033

积分

论坛元老

Rank: 8Rank: 8

积分
5033
QQ
发表于 2006-11-29 16:54:00 | 显示全部楼层

Re:OGRE中实体过多的问题?

e……如果你零件的种类很少,但是用这些零件组装成的东西很多,可以考虑让这些东西共享零件entity,也就是用SceneNode代表组装而成的东西……我也不懂,楼主看看这样行不行。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-11-30 11:05:00 | 显示全部楼层

Re:OGRE中实体过多的问题?

这跟 Entity 多少没有关系,主要问题是每祯提交给管线的 geometry 太多,导致状态切换太频繁,解决的办法就是将多个零件合并为一个 Mesh,这样就只有 200个 实体对象。OGRE 可以导出 Submesh,这要看美术导出的方式。OGRE 本身的导出插件不好用,可以在网上找找专用的 OGRE 导出插件,叫什么名字忘记了,到 OGRE 官方网站上查查吧。

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-11-30 12:55:00 | 显示全部楼层

Re:OGRE中实体过多的问题?

如果存在相同的实体的多个实例
可以考虑Instancing

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-11-30 14:44:00 | 显示全部楼层

Re:OGRE中实体过多的问题?

请问楼上:Instancing是什么意思?

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-11-30 16:59:00 | 显示全部楼层

Re:OGRE中实体过多的问题?

dxsdk有一个sample,LS可以去看看
另外,instancing有多种实现方式,在我的blog上有讲
oiramario.cnblogs.com

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2006-11-30 19:23:00 | 显示全部楼层

Re:OGRE中实体过多的问题?

大概说一下
        因为ShaderConst数量有限
                1. VS1.0中有96个
                2. VS2.0中有256个
                每个是一个float4,所以可供描述Instance的信息量有限

        根据不同需要,实现分为3种:
        1.  需要3个轴Rotation和Translate的物件,使用float4x4描述一个Instance
                     VS1.0一个Batch可以提交20个,VS2.0是60个
        2.  需要Translate和y轴Rotation,使用float4描述一个Instance,xyz是position,w是rotation
                     VS1.0一个Batch可以提交80个,VS2.0是240个
        3.  植物,使用float4描述一个Instance,xyz是position,w是sway
                     VS1.0一个Batch可以提交80个,VS2.0是240个
                     顺便,在计算mvp时,直接忽略掉view matrix,即是billboard ^_^

        我在计算时都减去了16,预留给其他的uniform。
        而Instance index我没有修改Vertex的格式,而是直接插在了Diffuse.r中,取的时候int index = int(diffuse.r * 256);就好了。

        当然,如果是SM3.0就不必这么辛苦了。


是不是这个?

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2006-11-30 20:25:00 | 显示全部楼层

Re:OGRE中实体过多的问题?

Instancing有四种不同的实现方式
上面提到的这种好像只是Vertex constants instancing
来这里看看吧
http://blog.csdn.net/soilwork/archive/2006/02/14/598335.aspx

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2006-12-2 19:00:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

182

主题

445

帖子

459

积分

中级会员

Rank: 3Rank: 3

积分
459
QQ
发表于 2009-5-19 15:06:00 | 显示全部楼层

Re: OGRE中实体过多的问题?

如果人物很多,每个人物的模型也可能不同。该如何处理?
是否是将人物中相同的部件用Instancing  ?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-20 07:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表