Per viewport map loading.

Very buggy and messy. But it works.