c++ – Fast Occlusion Discovery in 3D Point Cloud

I am trying to find occluded objects given a view point at x,y,z in the scene. For instance in the example below all the points constructing trees should be returned as occluded objects (because of the building).

Is there any better approach than tracing rays and querying occupancy of every voxel on those rays within the Octree? This approach doesn’t look efficient as the complexity significantly grows with number of voxels and distance from P(x,y,z) in the scene.