Occlusion queries are very efficient. You don't even have to run a fragment program. I don't know what you are referring to when you call them "inefficient", or what you mean when you say they need to be "optimized".
Render a bounding box bigger than the occluded object. This will give a little leeway to cope with the delayed frames after the query is drawn but before the results are available.
I also don't see how occlusion culling is specific to the FPS genre.
Render a bounding box bigger than the occluded object. This will give a little leeway to cope with the delayed frames after the query is drawn but before the results are available.
I also don't see how occlusion culling is specific to the FPS genre.