As I understand it, potentially visible sets (PVS) are used to determine 2 things; 1. which objects are inside the camera's view volume 2. which objects are not occluded (hidden) from the camera's point of view.

I understand that things like octtrees & BSP trees have been used for PVS calculation in the past, but how are PVSs calculated in today's AAA titles?

  • \$\begingroup\$ Not worthy of an answer cause I wont go into detail but: Oct-Trees are generally outdoor environments, BSP and Cells & Portals are interior environments.. You are looking for Scene Graph culling techniques.. please do not get confused a zoned loading solution for streaming data :) \$\endgroup\$
    – James
    Commented Jan 13, 2011 at 17:12

1 Answer 1


If you ask 5 game developers you may well get 5 different solutions or overlapping answers. The system to go for depends a lot on the type of game and the environment you exist in. There's also the divide between offline and real-time solutions. There's also no reason why octree and BSP tree solutions aren't also still used in certain scenarios.

Personally, for what I've worked on (racing games) we've used a pre-calculated static visibility system where offline we divide the world up into a grid, then we move the camera around inside the grid cell checking to see what it can see at a fairly coarse level. What we end up with is for every cell we have a bit list which says which models definately are not visible to the camera from that location. Once in game, we can very quickly get a subset of the world from which we can frustum cull to work out what we actually need to render in front of the camera.

Another title here uses a combination of that and portals, where you effectively have a door through which you can determine if you can see whats on the other side. If you can't see the door, you don't need to worry what's on the other side.

A real-time system that I've seen used (but have no personal experience of) is dPVS, which performs occlusion testing in real-time (they've got a paper linked from their website on how it works).

It all depends on what you need, different systems also allow you trade a bit of extra memory for speed.

  • 4
    \$\begingroup\$ I'd add that it's always a cost/benefit question. Do as little work as necessary. If you can get away with just frustum culling, great! If you need bleeding edge stuff, and need it now, talk with the umbra people.. \$\endgroup\$ Commented Jan 13, 2011 at 14:02
  • \$\begingroup\$ @Jari Komppa - That sounds a lot more like how the last sentence sounded in my mind as I wrote it. Definately only worth doing things when there's a specific measurable benefit. Different systems can also vary quite a lot on the specific implementation of them too (especially depending on the platform you target). \$\endgroup\$ Commented Jan 13, 2011 at 14:06

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .