游戏开发论坛

 找回密码
 立即注册
搜索
查看: 18985|回复: 32

资料整理了一番:关于无限LOD地形的构想(原创)

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-5-26 02:15:00 | 显示全部楼层 |阅读模式
                                                                                               关于无限LOD地形的构想                                       


前叙                                                               
----
从没好好写过一篇文章,现在也来好好写写

首先:具备了单个地形块Lod四叉裁减的能力就可以考虑做无限大地图和地形块的动态内存管理能力了       
但是首要条件是现搞定单个地形块的四叉裁减,这个很基本也很是前提条件                                                                               
无限地图的实现构想如下:


多个Tile的四叉剪裁
------------------
角色在移动的过程中,自身包括周围的一共9个Tile都是在可视范围内的,9个tile以外视锥看不到
视锥只和相交的Tile去做四叉剪裁,最多能看到四个Tile的内容,再分别进行可见Tile的剪裁
剪裁以后可见的Block送入到管线里面去渲染,四叉剪裁范围比较固定最多四个257x257的Tile,
范围很小,剪裁效率很高

正题部分 — 关于无限地图的构想
------------------------------
首先是客户端
地图可以是无限大的,把整个游戏的外景地图叫做世界地图吧
世界地图不论有多大,都可以拆分成块成一个个的Tile

Tile无缝拼接
------------
世界地图只做一张大的高度图,alpha混合纹理,光照图,并由美工去按tile的大小去分割这些图
这样分割出来的图自然是无缝衔接的,每个Tile也有了自己配套的高度图,混合纹理,光照了
而且整个世界源图是一张,美工也很容易处理和修改,最大的好处是解决接缝问题和动态加载问题

动态内存管理的基本思想:游戏的人物一般长时间一般再某个局部区域内活动,
游戏中只加载那些经常访问的Tile,不经常访问的Tile不加载

具体实现 -队列
---------------
把参加剪裁的地形放入到队列中去,最新参加裁减的放到head,队列中已存在的就直接排到head,
不存在就新建tile,然后排到head,过去剪裁的排后直到end出队列并释放

队列放入最近访问到的Tile首指针,长度可根据需要去定义,不能过小,或过大
过大内存好用太大,过小导致加载释放频繁,我想设置成36足够了

有一种情况很特别:就是人物从地图的一头一直跑向另一头,一定会不停的加载和释放
这是无法避免的,所以,要对加载和剪裁进行测试并优化
需要保证间隔时间内不断创建和释放的257的地形而"不卡"
也就是保证客户端带的起就行,一个257x257的Tile加载并裁减时间很短暂,其实问题不大
这个方法不一定很好,也可以采用dxsdk example contextStream技术(我还不会,也只了解- -!)
或是动态辅助GC线程的管理,有很多种策略,方法不是唯一的,只要适合自己就行。

服务器端无限地图
------------------
目前只有个模糊的构想:
因为还没开始做服务器端的东西,我想客户端搞定后,把IOCP的服务器加上来
我想登录服务器应该有用户的Session,这个Session关联与角色相关的一切信息,
包括所见的tile,并做游戏规则的检测,任务流程等等,
服务器端而不需要保存block的信息,只有所有的tile信息,和tile里面的场景包围盒信息
不需要包含细致的东西,这样不仅可以大大节约内存,而且执行效率也高,
服务器只做规则引擎,而不做渲染,还记得传奇纯外挂给我们留下了深刻的印象,只运行外挂就可以练级,
里面也有人物的地图,而且移动的地图就好像是个卫星定位图一样,根本没有细节部分,人物就是一个点
我想服务器的地图做成那样一个2D的东西就足够了,甚至需不需要做都无所谓,也就是网络监控友好点吧。

好了,就写这么多了,有些部分也还只是个构想未实现,一定有很多不健全的地方,我现在要去一一实现。
在做的过程中一定能有更好的思路。

本人业余人士,只是水平有限, 单枪匹马, 只是激情无限,有什么不对或更好的建议还望指正!

                                                                  

                                          作者:李侃 - TonyKee
                                                        Blog: 还没做(- -!)
                                                        Email:tony_kee@126.com  QQ:5283892
sf_20075262156.jpg

36

主题

109

帖子

109

积分

注册会员

Rank: 2

积分
109
发表于 2007-5-26 09:15:00 | 显示全部楼层

Re:资料整理了一番:关于无限LOD地形的构想(原创)

不错!支持兄台。

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2007-5-26 13:12:00 | 显示全部楼层

Re: 资料整理了一番:关于无限LOD地形的构想(原创)

固定管线的混合纹理地形
sf_2007526131137.jpg

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2007-5-26 13:18:00 | 显示全部楼层

Re:资料整理了一番:关于无限LOD地形的构想(原创)

有个很大的问题,用纹理混合比不用纹理混合,FPS差了近一倍,效率和内存哪个更重要?

如果我不使用程序混合纹理,直接让美工把纹理混合好了贴上去,这样内存中存储的纹理数量增加了,但效率却提升了,大家以为这两种方式哪个更好?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-26 13:25:00 | 显示全部楼层

Re:资料整理了一番:关于无限LOD地形的构想(原创)

我的另一篇帖子里面发过纹理混出来的效果,其实始纹理贴图都不大,用到alpha混合,近处的用细节纹理,远处的用粗纹理,我也用的固定管线,都能混出比较理想的效果,其实对FPS并没什么大的影响

10

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
发表于 2007-5-26 13:25:00 | 显示全部楼层

Re:资料整理了一番:关于无限LOD地形的构想(原创)

嘿嘿 搞地形秀啊,我也贴几张,
前段时候也一直在搞这个,现在懒了 不想弄了, 有兴趣可以和我 交流,
过段时间把代码放到这里
http://user.qzone.qq.com/380000937




119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-26 13:39:00 | 显示全部楼层

Re:资料整理了一番:关于无限LOD地形的构想(原创)

你做的地图编辑器看起来不错。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-26 13:46:00 | 显示全部楼层

Re:资料整理了一番:关于无限LOD地形的构想(原创)

注意本贴的主题是:
无限大地图拼接,和实现动态加载方案。这方面的资料其实很少。
单纯的Lod四叉分割是无法实现无限地图的。

希望大家多多交流交流这方面的经验。我正在做这一块

10

主题

84

帖子

84

积分

注册会员

Rank: 2

积分
84
发表于 2007-5-26 13:58:00 | 显示全部楼层

Re:资料整理了一番:关于无限LOD地形的构想(原创)

无限地形很多人都开源过了 而且效果非常好 可以看看 azure
开源的无限地形

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-26 14:14:00 | 显示全部楼层

Re:资料整理了一番:关于无限LOD地形的构想(原创)

代码没有思想重要,更需要的是思想。
我更想看文章。
你能发两篇此类文章的链接吗?我想看看。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 06:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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