zoukankan      html  css  js  c++  java
  • 地形有必要做LOD吗?

    最近做了个Geomipmap的LOD地形,加上实现LOD用的逻辑时间,渲染帧数FPS跟静态地形真的没啥差别。。甚至fps还更低。。。。

    转载自:http://www.sineysoft.com/blog/post/Terrain_lod.html

    今天在qq上和网友聊天交流,发现大家普遍比较关注lod,特别是动态减面的lod,对于刚开始接触3D图形的同学普遍认为LOD很牛,很有必要,对于动态减面得LOD算法更是趋之若骛,其实不然,特别是针对地形(Terrain)的LOD必要性不是很大.

     
    对于LOD的好处,我想大家都了解,就是减少提交到显卡得primitives,以减少没桢同屏渲染的三角形数量,借以提高fps,其实影响渲染fps的要素很多,其中最为关键的就是RS(Render State)的切换和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套件可以使用.

    评论:

    ROAM算法过于古老了,不适合现在的显卡硬件加速体系,只适合古老的cpu计算...现在已经没有用纯软件加速来进行3D地形渲染了吧?
    其实siney大大所说的静态LOD,类似于楼上所说的Geomipmap,类似于贴图的mipmap原理。总之是个空间换时间的道理。

    不过对于siney的动态LOD很费,和farcry2没有使用地形LOD,我不敢苟同。
    按照farcry2的地形精度,如果没有做LOD的话,我不认为它能够在现在的顶级配置机器下流畅运行。除了视觉剔除,应当还有其他的渲染优化方法。LOD是逃不开的。

     

    1. 现代的LOD计算方法是可以完全拿到显卡里面作的,以后越来越多的显卡可以具备该功能。
    2. 您所说的重构vertex不是问题,成熟的游戏,不会每贞都重新计算LOD并更新vertex,因为主角移动的速度是有限的,不会从一个地方突然切换到另外一个地方,也就意味着LOD层次不必要每次都跳变,所以一般是10秒钟时间重新计算一次LOD的vertexbuffer,这样的开销是极小的。

     

    siney Says: 

    没错,现代lod可以在显卡做,意味着需要gs的显卡,但这并不是free的,而且我们需要了解影响渲染效率的瓶颈,做lod固然可以提高效率,但是不做也有很多方法可以抵消效率损失。

     

  • 相关阅读:
    javascript学习一
    对软件工程课程的认识
    人月神话读后感
    项目开发总结报告(GB8567——88)
    MFC双缓冲绘图
    QT连接MySQL
    [QT学习]拷贝文件
    Arduino入门笔记【1】
    《人月神话》读后感以及软件工程总结
    十天冲刺任务(第二次冲刺)
  • 原文地址:https://www.cnblogs.com/kex1n/p/2513469.html
Copyright © 2011-2022 走看看