Broad phase implementation that partitions objects into a 2d grid, and then performs a sort and sweep on the final axis.
This broad phase typically has very good collision performance and scales well with multithreading, but its query times can sometimes be worse than tree-based systems since it must scan cells. Keeping rays as short as possible helps avoid unnecessary cell checks. The performance can degrade noticeably in some situations involving significant off-axis motion.