Duas idéias que tenho em mente:
1) A cena é renderizada em um buffer invisível, usando modelos de baixa resolução e baixa contagem de polígonos (ou mesmo usando apenas volumes limitados, como cubos ou esferas). O buffer é então verificado para saber o que é visível ou não. Antes de renderizar a cena de baixa resolução, poderia ser aplicada alguma seleção de frustum, para remover o máximo de objetos possível.
2) Uma ferramenta é executada no mapa estático e executará um traçado de raio complexo (e, portanto, lento) para saber, para algumas posições 3D no mapa, o que é visível e o que não é. Toda essa informação é então armazenada de maneira eficiente, que pode ser usada posteriormente pelo usuário em tempo de execução (por exemplo: uma octree). Esta solução funcionaria apenas para malhas estáticas (por exemplo: construção) que não movessem objetos.