游戏开发论坛

 找回密码
 立即注册
搜索
查看: 13614|回复: 42

疑惑ing....关于室外场景管理

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-3-29 22:45:00 | 显示全部楼层 |阅读模式
室外场景这一块
我刚做完 quadtree lod terrain ,lod 评价策略还很单一,仅靠距离,导致地表呼吸现象很明显,还没完善,只是效率方面还算过的去,1025*1025 顶点距离10, 摄像头90度角,拍摄距离1500能达到120fps,用的普通sm2.0的显卡

目前正在制定下一个攻关目标,就是场景管理。

我想场景管理应该包括场景中的对象的剔除控制,有了quadtree,我想这并非难事,还有碰撞检测打算采用AABB粗略而又高效的检测应该也不是难题,这些是我下一个制定的目标

可我突然又想到一个问题,游戏中不可能只有一个地形,如果只有一个那样太恐怖了,LOD也力不从心吧

还是应该设置关卡,地形和地形之间的关卡是如何平滑过渡的?我想这和室内的portal不一样吧,尽管我还没去研究室内这一块(又是个头痛的东西)



还又一个问题,我也搞不定,我目前还用过时的固定管线,室外地形大贴图是否一次事前生成了再贴上去,还是根据高度做差值计算过渡的方法生成大地图?一般一张1025*1025顶点之间距离如果设置为5需要准备多大的贴图?
这方面我没经验。



也许我的想法有些很不完善,由于是业余的没人交流,还希望前辈、专家、达人不吝赐教! [em6]

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2007-3-30 00:20:00 | 显示全部楼层

Re:疑惑ing....关于室外场景管理

120fps...
     效率怎么能过的去啊,你在加完碰撞和剔除,即使什么元素都没放上去都只有100fps了。光杆地图应该无论多大都保持在200fps以上才有可能加入其他元素的。你的LOD又用的什么方法?索引缓冲是怎么安排的?能说清楚点吗?我认为LOD技术一定要符合大缓冲的需求,即一个索引或顶点缓冲要非常的大,这样才能符合现代显卡的要求。所以索引排列一定要用条带渲染,如果实在不行用三角形列表渲染也可以,但千万不能用扇面,因为对于新一代显卡的原理来说,扇面渲染对CPU的杀伤力太强,导致GPU极度空闲。总而言之,以最少的DrawIndexedPrimitive()调用次数渲染最多的多边形,这才是王道!即使你用的是固定管线,本着这个原则都能让你的fps提高很多。
至于贴图问题,放个大贴图你想都别想了。全部都是很小很小的图,比如说128*128,64*64的。放3~4张到显存上去,让他们相互按不同的比例进行象素混合,地图UV坐标设置好重复这些贴图来覆盖整个地图。至于如何决定几张图的象素混合比例,一般用的方法是按顶点高度,然后在几个顶点之间的象素插值。还有种是贴一个比较大的图,象1024*1024的,然后在上面涂上彩色,按三基色的比例来做三张贴图的混合比例。冒似还有其他办法,比如说用数据贴图,这个就不能用固定管线了。

15

主题

363

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-3-30 10:05:00 | 显示全部楼层

Re:疑惑ing....关于室外场景管理

// quote :可我突然又想到一个问题,游戏中不可能只有一个地形,如果只有一个那样太恐怖了,LOD也力不从心吧

这个我觉得可以分块处理,比如:1025 X 1025作为一个大版块,版块与版块间无缝拼接。那么,一个摄像机同时“可能”看到的板块数量只有9个(当前版块以及其周边的8个版块)。那么,每次需要调入到内存和显存中的,最多只有9个版块,再加上若干Cache,就可以做无限大场景了。现在大多数都是采用这个技术的。
然后,我还是想说一下自己的想法:1025 X 1025太大了,不会是对每个Tile进行判断吧?
这个大版块应该继续细分到33 X 33或者17 X 17,这样才能充分发挥显卡的效率。另外,小块可以按照小块进行LOD和视锥裁减,否则你四叉树该如何作呢?33 X 33是FarCry的做法,貌似WOW也是这样的。



//////////////////
还又一个问题,我也搞不定,我目前还用过时的固定管线,室外地形大贴图是否一次事前生成了再贴上去,还是根据高度做差值计算过渡的方法生成大地图?一般一张1025*1025顶点之间距离如果设置为5需要准备多大的贴图?
这方面我没经验。
//////////////////
一次事前生成再帖是可行的,但是需要更多的资源作为代价,不过空间本来就是用来置换时间的 ^_^。
基本的思路是不错的,就是无论版块多大,整个版块均仅使用唯一一组纹理(这个纹理可能很大,Farcry提供了256、512、1024、2048、4096几种规格的纹理),再对每个33X33使用一个细节纹理。总而言之:减少纹理切换的次数。大纹理到底该多大?这方面我也没经验,不过可以试试啊~~另一种是逢Tile刷纹理,这在小场景中可以使用,大场景……资源是省了,纹理切换的代价是不容小视的——除非整个场景同时存在的纹理类型非常有限。


最后想说一句:室内场景其实很简单的,我一开始也觉得复杂,可是动手做得时候,一个星期就把最基本的东西搞定了(最基本的分割和基本Portal)。主要是,室内场景的编辑器难做。


俺不是高手,随便说两句,俺要是说错了,下面的同行请多包含,见笑,见笑 ^_^

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-3-30 10:11:00 | 显示全部楼层

Re:疑惑ing....关于室外场景管理

非常感谢xikema的回答

我用的是三角形列表的方式,顶点缓冲不变(只是感觉很占内存),视锥体裁减四叉树,用递归的方法来每次更新索引缓冲(当然只写需要显示的索引进去),同时根据距离来合并方格节点索引,以及判断当前节点和周围节点是否lod级别不同来做补洞处理。我用的还不是独立显卡,用的很烂的集成显卡,学校里有的机器32位索引都不支持,真郁闷,好不容易找到能上32位索引才支持大地图
才120fps左右,不过还没在独立显卡的机器上测试过。不过我想提升的空间应该很大,性能的瓶颈我发现影响最大的还不再三角形数量上,而是在递归次数上,递归算法可以有很多可改进的余地。

关于贴图方面我还是有个问题,固定管线渲染的时候只能选择一个贴图(或多张贴图混成的一张贴图),最终还是一张生成出来的大贴图啊,
比方说:
总不可能碰到高度为:
0-50的三角形时候做插值贴沙 setTexture 一次 DrawIndexedPrimitive 一次
40-220的三角形做插值贴草   setTexture 一次 DrawIndexedPrimitive 一次
200-255的时候做插值贴石头...setTexture 一次 DrawIndexedPrimitive 一次

这样的做法肯定是不可取的,所以我想是不是必须“动态生成一张大贴图一次贴到地形上”?

现在的问题是“贴一次”还是“贴多次”?怎么贴?

最好能给点代码的片断,并给我一些提示。

我很业余,如果有什么不对,没关系,尽管鄙视我!


15

主题

363

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-3-30 10:12:00 | 显示全部楼层

Re:疑惑ing....关于室外场景管理

另外:120FPS是有点低,什么显卡?多少内存?
不过你是不是1025X1025全都画了?是不是还没做裁减?另外是逐Tile画?还是整个一次提交?
四叉裁减加上,分个33x33小块,然后应该就会好多。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-3-30 10:15:00 | 显示全部楼层

Re:疑惑ing....关于室外场景管理

noslopforever
的提示非常有创意,我先消化消化....

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-3-30 10:17:00 | 显示全部楼层

Re:疑惑ing....关于室外场景管理

我把代码整理一份,回头我发上来,再请帮我看看。

15

主题

363

帖子

390

积分

中级会员

Rank: 3Rank: 3

积分
390
发表于 2007-3-30 10:20:00 | 显示全部楼层

Re:疑惑ing....关于室外场景管理

那种高度域生成纹理看似是逐高度域贴图,其实不是,都是在渲染前将纹理生成好的,渲染时其实就一张纹理。
原则其实就是那个,减少纹理切换次数,一次提交尽量多的顶点,同时,使用裁减将不必要渲染的顶点干掉。


回到主题上来,场景管理我目前看到的最好的一篇文章,Dreams大大写的,可以去他的Blog看 ^_^ :
http://www.cnblogs.com/dreams/archive/2007/03/25/687304.aspx

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-3-30 10:25:00 | 显示全部楼层

Re:疑惑ing....关于室外场景管理

看了noslopforever的提示很有新意。

不过我很愚笨,不是很明白Tile的概念,我看了你的博客,不过还是不太懂。

能详细说说大地图怎么划分小tile呢?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-3-30 10:26:00 | 显示全部楼层

Re:疑惑ing....关于室外场景管理

再次感谢
noslopforever给我的提示
我看我的问题就在tile上了,还是不懂这个概念
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-17 17:38

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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