现在的位置: 首页 > 综合 > 正文

Log 游戏中的各种剔除算法(草稿)

2013年12月06日 ⁄ 综合 ⁄ 共 745字 ⁄ 字号 评论关闭

 在引擎中最影响渲染效率的是场景管理,剔除算法又是其中的最主要的内容。这里简单总结一下各种流行的遮挡剔除的算法,只是为了我的游戏引擎而做的一点功课。
1。bsp。Binary space partition。优势在于这种算法的数据结构十分简单(二叉树),而且在效率方面非常好,因为强调了离线计算(即场景保存为bsp的数据格式,在渲染前就加载生成bsp树)。比较麻烦的是它的实现非常的复杂,而且用dx来实现会比gl更麻烦一点,因为bsp的划分平面可能是三角形,矩形,或者其它的多边形,用dx实现的时候往往要把这些平面分割成多个三角形。。。。另外的局限是,用bsp适合于大量的静态物体的场景,否则要在每一祯内计算生成bsp树,失去了离线计算的优势。用作物理的bsp和这里的bsp是有区别的,有些人说的这种算法可以同时用于渲染和作物理中的碰撞检测,达到了计算上一种简化。这种说法是错的。当然指的是具体的实现了(物力上的bsp基本上还是用的包围体,只是用bsp树优化了判断的次数)
2。pvs。Potentially visible set。对于复杂的室内场景,pvs可以进一步的对bsp或者八叉树进行优化,以剔除更多的面,避免大量重绘。这种方法同样比较适合静态场景。
3。portal。比较适合于室内场景。剔除的粒度小于pvs,在视点和入口之后生成一个剪裁体。没有pvs效率好,因为总是要进行实时计算。
4。bhv。Bounding hierarchical volumes。这才是既可以用于渲染剔除,又可以用作物理计算的算法。
    在游戏中一般要混合这些算法,以达到最佳的效率。
    我暂时决定采用bsp作室内的渲染,用基于地平线剔除的方法(game programming gens 4)和lod的算法来作室外的场景。

抱歉!评论已关闭.