Ham*_*ton 7 2d occlusion spatial quadtree culling
在我的2D游戏中,我有静态和动态对象.可以有多个摄像头.我的问题:确定与当前相机的视图矩形相交的对象.
目前,我只是遍历所有现有对象(不关心动态或静态)并使用相机视图对其进行AABB检查.这对于非常动态的对象来说似乎是可以接受的,但对于静态对象来说却是不可接受的,在静态对象中可能存在数以万计的静态对象(静态级别几
我已经研究了可以解决我的问题的多个数据结构:
这是我考虑的第一件事,但问题是它会迫使我的场景具有固定的大小.(可接受静态,但不适用于动态对象)
看起来不错,但重新平衡它的开销似乎对许多动态对象来说太大了.
这里的主要问题是,如果你大量使用相机缩小,必须查询大量不存在的空间散列桶,导致性能低下.
总的来说,我对这个问题的良好解决方案的标准是:
动态大小:解决方案不得导致场景大小受限,或者需要大量重新计算才能调整大小
良好的查询性能(适用于相机)
对非常动态对象的良好支持:处理不断变化位置的对象所需的计算应该是好的:
一次我游戏中动态对象的最大合理数量可能是5000.考虑它们每一帧都改变它们的位置.考虑到频繁的插入和删除,是否有一个数据结构可以更快,而不是每帧比较物体的AABB和相机?
不要试图寻找灵丹妙药。只需将场景分为动态和静态部分,并为它们使用不同的算法。
四叉树显然适合具有固定边界的静态几何。
空间哈希对于大小相似的对象集
(例如粒子系统)来说是理想的选择。
AFAIK 动态 AABB 树很少用于遮挡剔除,它们的主要目的是碰撞检测的广泛阶段。
正如您所注意到的,如果动态对象的数量不是很大,则暴力剔除对于动态对象来说是正常的。
静态关卡几何体分散在整个场景中
如果您的场景高度稀疏,您可以将其划分为岛,即创建具有“良好密度”的场景部分列表。