地形有必要做LOD吗?
发布:siney | 发布时间: 2007 11 05今天在qq上和网友聊天交流,发现大家普遍比较关注lod,特别是动态减面的lod,对于刚开始接触3D图形的同学普遍认为LOD很牛,很有必要,对于动态减面得LOD算法更是趋之若骛,其实不然,特别是针对地形(Terrain)的LOD必要性不是很大.
对于LOD的好处,我想大家都了解,就是减少提交到显卡得primitives,以减少没桢同屏渲染的三角形数量,借以提高fps,其实影响渲染fps的要素很多,其中最为关键的就是RS的切换和Draw Call的调用(D3D9中),而不是三角形的数量,而地形数据因为其特殊性,渲染地形一般不需要切换RS,Draw Call的也相对较少,并且一般地形的顶点数据都在一个Vertex Buffer内,所以渲染地形的开销很小,在我们的游戏中,渲染地形不会带来任何fps的损失(6系列显卡,低端Mx440大概5fps左右),在这种情况如果再考虑动态减面重构Vertex Buffer则得不偿失了,对于地形的LOD最多建议是静态修改Index Buffer,即提供多级Index Buffer的方法达到减面的效果,魔兽(WOW)就是这样干的,所以我个人极力不提倡使用动态减面的算法修改地形,不管是设计复杂度,还是时间开销和最后带来的好处都是得不偿失的.
我最近研究Farcry2引擎,发现他同屏渲染80-100万面每桢,其中地形占用70-90万面,可见地形的三角形数量确实庞大,但有趣的是,即使不渲染地形,桢率也就5fps(7系列显卡)左右的提高,而且Farcry2的地形是没有做LOD的,不过其模型倒是做了LOD.
最后给我我的结论,关于LOD:
模型lod(静态)有必要,动态很费,地形lod没有必要(有静态也无所谓),因为地形在现代显卡里渲染很快,基本没有rs的切换.
与其考虑地形LOD,不如考虑地形得遮挡剔除,这方面的意义远比LOD大,我们敬仰的WOW也是这样干得.
关于地形遮挡剔除的算法,可以参考我之前的博客,有详细的算法讲解,市面也有很多成熟得3rd套件可以使用.
发布:siney | 分类:游戏开发 | 评论:8 | 引用:0 | 浏览:
| TrackBack引用地址
- 相关文章:
- 1.关于物理加速的讨论
- 哥们好,网上看了你的博客,看得过瘾,认识一下。对您《Ageia PhysX使用感受》非常感兴趣。我是做maya虚拟现实的,想请教几个问题。
有一块Ageia PhysX,那么我不只是想用来玩游戏,还想用来在MAYA中发挥作用。可是网上貌似没有相关的Ageia专门发布针对maya或max或xsi的插件。
还有一个问题,这个AGEIA PhysX SDK tool指的是我卡的驱动吗?还是插件?
反正就是想在maya里实现实时物理加速啦~!就是这么回事。还是请您来帮我解答吧!!谢谢~!!
我的QQ174703984 请加我,总算在茫茫网海中找到一个知音。。 - 2007-11-09 16:41:48 回复该留言
- 3.hlst
- ROAM算法过于古老了,不适合现在的显卡硬件加速体系,只适合古老的cpu计算...现在已经没有用纯软件加速来进行3D地形渲染了吧?
其实siney大大所说的静态LOD,类似于楼上所说的Geomipmap,类似于贴图的mipmap原理。总之是个空间换时间的道理。
不过对于siney的动态LOD很费,和farcry2没有使用地形LOD,我不敢苟同。
按照farcry2的地形精度,如果没有做LOD的话,我不认为它能够在现在的顶级配置机器下流畅运行。除了视觉剔除,应当还有其他的渲染优化方法。LOD是逃不开的。 - 2008-05-15 14:35:52 回复该留言
- 4.levin
- 1. 现代的LOD计算方法是可以完全拿到显卡里面作的,以后越来越多的显卡可以具备该功能。
2. 您所说的重构vertex不是问题,成熟的游戏,不会每贞都重新计算LOD并更新vertex,因为主角移动的速度是有限的,不会从一个地方突然切换到另外一个地方,也就意味着LOD层次不必要每次都跳变,所以一般是10秒钟时间重新计算一次LOD的vertexbuffer,这样的开销是极小的。 - 2008-08-28 04:19:25 回复该留言
- 5.siney
- 没错,现代lod可以在显卡做,意味着需要gs的显卡,但这并不是free的,而且我们需要了解影响渲染效率的瓶颈,做lod固然可以提高效率,但是不做也有很多方法可以抵消效率损失。
当然这篇文章目前考虑的硬件没有到dx10。
由 siney 于 2008-09-01 11:11:23 最后编辑 - 2008-08-28 17:26:36 回复该留言
- 6.levin
- 是有很多地方可以抵消损失,但是我不打算讨论这个问题,我只想说如何正确的使用lod的问题,错误使用,没准会导致效率更低,还不如不用。即便没有dx10的显卡支持,也有很多成熟的使用方式,比如每贞计算改为5-10秒/或者人物行走超过一定距离计算一次,在我的试验中,5-10秒计算并重建vertex buffer的方法的消耗,几乎看不出来因为重建导致的消耗,比没有lod的整个场景的静态vertex buffer效率提高了若干倍。siney 于 2008-09-05 13:10:17 回复就不要说重建vb,即使你用静态的lod,也不见得会提高渲染效率,关键在于渲染效率在现代显卡上,根本就不取决于vertice的多少,为了你一次渲染1w个面,和1k个面根本没有差别,效率的损失是rs的切换,fx等。
对你提出比没有lod的整个场景的静态vertex buffer效率提高了若干倍,这个说法,我表示怀疑,不知道你的场景是不是就是一个简单的多边形? - 2008-09-05 08:47:39 回复该留言
- 7.eio
- 动态LOD肯定是没戏……
如果贴图重复、远裁平面近的情况下 不要静态LOD也可以接受
但如果贴图不重复、或者地形比较精细的情况下(比如GIS中) 分tile做clipmap是必须的
因为在稍大的地形中 贴图未压缩数据十几G、三角形几千万是很正常的事情 没有LOD…… - 2008-10-23 15:38:07 回复该留言
- 8.eio
- 合适的优化之后 动态LOD也可以勉强使用
这种方法基本只适用在一种情况:地形可由用户大范围高频度的任意改变的场景 比如百战天虫之类的玩意…… - 2008-10-23 15:43:37 回复该留言
发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。






