空间划分及可见性算法【一】

本文介绍了在复杂游戏场景中,传统的流水线可见性处理方法效率低下,提出了空间划分和可见性算法的重要性。重点讲解了BSP(Binary Space Partitioning)树的基本原理和应用,包括物体剔除、碰撞检测和渲染顺序确定。BSP树通过离线创建并保存在磁盘中,适用于半静态场景,但对旋转物体的处理存在局限性。最后提到了BSP在剔除操作中的优势,并预告了后续将讨论背面消隐和视景体剔除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最简单的流水线可见性处理如下:

对每个物体转换到世界坐标,然后进行视椎体剔除,其次是背面消隐,最总通过空间剪裁和光栅化期间的图像空间裁剪得到最终的要绘制的图像。

在场景很简单,物体很少的情况,上述方法是可行的。但考虑到现代游戏的场景复杂程度,如果还采用上面的流水线来提出多边形,就显得力不从心了,因为这意味着在每次移动摄像机的时候都要对场景中的所有的物体进行视椎体的剔除及背面消隐,而这根本是不肯能的。

因此,就迫切一种方法,能快速的对大部分场景进行剔除操作。进一步说就是,能根据当前视点位置快速得到当前可见的多边形集合。

而这就需要对空间进行有效的划分,即对物体要有一个有效的管理。

 

常见空间划分算法有:

BSP、BHV、OCTREE等

 

常见的可见性算法有:

PVS、OC、portal等

 

下面先对最重要的BSP算法进行简单的分析:

 

BSP树的原理:使用分割面将空间划分成凸形子空间构成的二叉树。

BSP树的应用:

<1>大规模剔除物体。

<2>碰撞检测。

<3>可以根据视点的位置很快的确定当前正确的渲染顺序(从后到前或从前到后)。(注:现在的游戏99%都不采用该方法进行渲染)

 

根据BSP树的原理,很容易联想到,如果把多边形自身作为分割面,则有可能在拥有很多房间或关卡的室内场景游戏中发挥作用。

具体来说就是以多边形链表作为输入提供给空间划分系统来创建BSP树。

步骤:

<1>选择第一个多边形作为分割面。如果链表中只剩一个多边形或没有多边形则算法结束;

<2>判断下一个多边形在分割面的前面还是后面,分别添加到front和back链表中;

<3>递归处理front和back链表;

 

显示和访问BSP

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值