Brincando com a criação de paisagens mundiais minecraft / lego no Unity 3D (paisagens de voxel geradas proceduralmente com cubos), estou descobrindo que as malhas criadas para essas paisagens ocupam MUITA memória. A malha atualmente consiste apenas de vértices para os lados visíveis de um cubo. O uso da memória para um terreno complexo pode demorar 6 ou 7 cem megas.
Essas malhas podem ser otimizadas, mas estou lutando para encontrar um algoritmo decente para fazer isso.
O algoritmo deve levar em consideração que você não deseja "mesclar" blocos de diferentes tipos de terreno. Eu acho que um começo realmente simples pode ser apenas processar todos os blocos ao longo de um eixo e fazer varreduras extras para os outros dois eixos.
Preciso manter a forma da malha, que não é a fusão de vértices, a ponto de o espaço vazio ou sólido ser alterado. O motivo é que pode haver criaturas / etc que ainda precisam navegar pela malha. Portanto, não posso simplesmente criar uma malha distorcida com detalhes realmente baixos.
Quaisquer pensamentos / sugestões / dicas sobre isso?
fonte
Respostas:
Minha pergunta é:
Por que você precisaria da própria malha para fazer o movimento da criatura?
Você não pode fazer o cálculo do caminho em uma matriz 3d de IDs?
Eu acho que o Minecraft usa uma matriz 3D com 4 bits de bloco PR. Também simula criaturas com um certo raio ao redor do jogador.
Você pode armazenar seus pedaços em uma estrutura oc-tree, onde cada pedaço é compactado.
Se você mantiver os dados compactados na RAM, poderá descomprimir os dados rapidamente, quando necessário.
fonte
Que tal usar um octree para armazenar o terreno?
Por exemplo, ar = nenhum nó, todos os outros tipos de terreno teriam um nó com o tipo de terreno.
Ao inserir / remover nós, você pode verificar se todos os oito filhos de cada nó no caminho da árvore modificado têm o mesmo tipo de terreno e mesclá-los, se necessário. Dessa forma, grandes blocos do mesmo material ocupariam apenas um nó.
fonte
Você está criando apenas os cubos para partes da geometria que o jogador pode ver? Esse seria o meu primeiro passo. Dependendo do tamanho do seu terreno, você não precisa ter o mundo inteiro carregado / desenhado / visível / o que seja.
fonte