zoukankan      html  css  js  c++  java
  • 初学BSP,上一些测试数据

        碰撞检测是3D引擎的重要组成部分,3D游戏中子弹、法术飞行中的碰撞检测,子弹和法术的命中效果,人物移动和场景的阻挡关系都需要高效率的碰撞检测系统来完成。在碰撞检测系统的实现中效率是至关重要的。试想如果你被告知某个碰撞检测函数每帧最多只能调用30次,那么你在使用时就会小心翼翼、束手束脚,反之如果被告知某个碰撞检测函数几乎没有开销,可以自由使用,那我们写起游戏逻辑来就轻松多了,可以实现更多更丰富的交互效果。

        BSP树就是一种针对静态场景进行高效碰撞检测的数据结构。一直想对BSP树进行深入的研究,苦于没有详细的资料。最近在浏览博客的时候看到丁欧南朋友写的《The Annotated ATI SDK BSP Tree Source》系列文章,发现其中的代码简单易读、清晰明了,于是研究之。修改了其中的bug,并增加了运动中的球体和AABB包围盒与BSP树的碰撞检测函数。
        附《The Annotated ATI SDK BSP Tree Source》链接:
        http://blog.csdn.net/Silent_Spring/archive/2006/08/09/1042888.aspx

        由于BSP树原理比较复杂,这里不做具体讨论,仅列出一些测试数据供大家参考。另外由于BSP树自身的一些限制,在现在的游戏中使用逐渐减少,不少游戏使用八叉树或KD树管理碰撞检测,或者直接使用成熟的物理引擎进行碰撞检测。希望在这方面有经验的朋友也可以提供一些具体数据以和BSP树进行比较,供大家在选择方案时决策。

        下面测试数据使用的场景模型取自“魔兽世界”

        1.生成BSP树后三角形数目提高了3-5倍,理论化的数据应该是原多边形数目n的log(n)倍

        2.在P4 3G的机器上做模型与线段的相交测试,所得数值为每秒可进行的检测数目,数据如下:
                                                 逐三角形遍历测试          用BSP树测试
           模型面数
           1000                              5000次                              200000次
           5000                              1000次                              200000次
        可以看出,不使用BSP树,每秒可进行的检测数目和模型面数成反比,使用BSP树可进行的检测数目和模型面数关系不大,使用BSP树后的效率比不使用平均高40-200倍

        3.在P4 3G的机器上做BSP树与运动球体的相交测试,所得数值为每秒可进行的检测数目,数据如下:
                                           每秒可测试次数  
          模型面数
          1000                         30000次    
          5000                         30000次 

        4.在P4 3G的机器上做BSP树与运动AABB包围盒的相交测试,所得数值为每秒可进行的检测数目,数据如下:
                                           每秒可测试次数  
          模型面数
          1000                         20000次    
          5000                         20000次 

        以上数据为粗略平均数据,仅供参考

        在QUAKE系列和UNREAL系列游戏中使用的BSP树为Solid Leaf BSP,就是叶子节点严格符合正面为空间,被面为实体的规则。这样的BSP树需要特殊的场景建模工具来生成,用3DMax生成的普通模型很难达到这个要求,所以上面的测试数据都是针对非Solid Leaf BSP树的普通BSP树。比起普通BSP树,Solid Leaf BSP树有更高的检测效率。Solid Leaf BSP树可以不在节点保存三角形信息,仅保存平面信息,而普通BSP树就必须在节点保存三角形信息,在碰撞检测的某些时候需要拿出这些三角形信息做开销较大的运算。


    球体和场景匹配


    AABB包围盒和场景匹配

  • 相关阅读:
    SPOJ375(树链剖分)
    最短路相关模板、总结
    Linux入门基础#2:Linux文件系统基本结构
    poj 2229 Sumsets (DP)
    Power BI for Office 365(七) Power BI站点
    HDU1045 Fire Net
    Android 系统搜索框(有浏览记录)
    Struts2 Action接收表单参数
    要注意的点
    复习昨天的,继续过Hard题目
  • 原文地址:https://www.cnblogs.com/cproom/p/578749.html
Copyright © 2011-2022 走看看