Se seu mundo já é construído a partir de blocos discretos, faz sentido usá-los como base para sua navegação.
Desbravadores são desbravadores fáceis e rápidos, um pouco mais difíceis. O caminho a seguir e responder às mudanças no mundo é a verdadeira maldade.
Há algumas perguntas que podem ajudá-lo a diminuir a solução em potencial: - que tipo de NPCs você está tentando simular? - quanto tempo você está procurando? - quão precisos caminhos você precisa?
Se você tem caminhos curtos e está bem com a qualidade "melhor que a direção", as grades locais [1] são uma boa escolha. Eles são super rápidos, você pode fazê-lo funcionar em 2D e 3D. Você pode obter dados da grade local diretamente dos dados do volume, para que o gráfico de navegação fique sincronizado com as alterações dinâmicas facilmente.
O problema com as redes locais é que, se você tiver mínimos locais em seu mundo maiores que sua rede local, o agente poderá ficar preso. É possível fazer truques como adicionar migalhas de pão em locais onde você detecta mínimos locais e tenta evitar esses locais ao pesquisar.
Se você precisar de caminhos longos, sugiro algum tipo de esquema hierárquico. O HPA * deve fornecer boas idéias sobre como criar nós esparsos na grade em um mundo. As grades locais podem resolver a localização do caminho entre os nós de alto nível. Ao fazer alterações no mundo, você também precisará alterar localmente os nós grossos. Você também pode usar os nós para detectar mudanças dinâmicas no mundo do jogo e replanejar o caminho.
Se você tem um mundo dinâmico, a busca de caminhos se torna estatística. Não há mais garantias se o agente encontrar o caminho. Acompanhar as mudanças no mundo é realmente difícil e replanejar quando algo dá errado é lento.
Eskil monta com essa idéia no Love MMO, e seu localizador de caminhos é apenas uma amostra aleatória com a função utilidade (assim como sua seleção de ações :)). Eu recomendaria fazer isso primeiro se ele se adequar ao seu estilo de jogo.
[1] http://digestingduck.blogspot.com/2010/03/local-navigation-grids.html