最简单的流水线可见性处理如下:
对每个物体转换到世界坐标,然后进行视椎体剔除,其次是背面消隐,最总通过空间剪裁和光栅化期间的图像空间裁剪得到最终的要绘制的图像。
在场景很简单,物体很少的情况,上述方法是可行的。但考虑到现代游戏的场景复杂程度,如果还采用上面的流水线来提出多边形,就显得力不从心了,因为这意味着在每次移动摄像机的时候都要对场景中的所有的物体进行视椎体的剔除及背面消隐,而这根本是不肯能的。
因此,就迫切一种方法,能快速的对大部分场景进行剔除操作。进一步说就是,能根据当前视点位置快速得到当前可见的多边形集合。
而这就需要对空间进行有效的划分,即对物体要有一个有效的管理。
常见空间划分算法有:
BSP、BHV、OCTREE等
常见的可见性算法有:
PVS、OC、portal等
下面先对最重要的BSP算法进行简单的分析:
BSP树的原理:使用分割面将空间划分成凸形子空间构成的二叉树。
BSP树的应用:
<1>大规模剔除物体。
<2>碰撞检测。
<3>可以根据视点的位置很快的确定当前正确的渲染顺序(从后到前或从前到后)。(注:现在的游戏99%都不采用该方法进行渲染)
根据BSP树的原理,很容易联想到,如果把多边形自身作为分割面,则有可能在拥有很多房间或关卡的室内场景游戏中发挥作用。
具体来说就是以多边形链表作为输入提供给空间划分系统来创建BSP树。
步骤: