Jugando con la creación de paisajes mundiales de minecraftish / lego en Unity 3D (paisajes voxel generados por procedimientos con cubos), descubro que las mallas creadas para estos paisajes ocupan MUCHA memoria. La malla actualmente solo consiste en vértices para los lados visibles de un cubo. El uso de la memoria para un terreno complejo puede tomar 6 o 700 megas.
Estas mallas podrían optimizarse, pero estoy luchando por encontrar un algoritmo decente para hacer esto.
El algoritmo debe tener en cuenta que no desea "fusionar" bloques que son de diferentes tipos de terreno. Supongo que un comienzo realmente simple podría ser simplemente procesar todos los bloques a lo largo de un eje y hacer barridos adicionales para los otros dos ejes.
Necesito mantener la forma de la malla, que no es la fusión de vértices hasta el punto en que se cambia el espacio vacío o sólido. La razón es que puede haber criaturas / etc. que todavía necesiten navegar alrededor de la malla. Por lo tanto, no puedo crear una malla distorsionada con detalles realmente bajos.
¿Alguna idea / sugerencia / consejo sobre esto?
fuente
Respuestas:
Mi pregunta es:
¿Por qué necesitarías la malla para hacer el movimiento de la criatura?
¿No puedes hacer el cálculo de ruta en una matriz 3d de id?
Creo que Minecraft usa una matriz 3D con 4 bits de bloque pr. También solo simula a las criaturas un cierto radio alrededor del jugador.
Puede almacenar sus fragmentos en una estructura de árbol oc, donde se comprime cada fragmento.
Si mantiene los datos comprimidos en la RAM, puede descomprimirlos con bastante rapidez cuando sea necesario.
fuente
¿Qué tal usar un octree para almacenar el terreno?
Por ejemplo, aire = sin nodo, todos los demás tipos de terreno tendrían un nodo con el tipo de terreno.
Al insertar / eliminar nodos, puede verificar si los ocho hijos de cada nodo en la ruta del árbol modificado tienen el mismo tipo de terain y fusionarlos si es necesario. De esa forma, los bloques grandes del mismo material solo ocuparían un nodo.
fuente
¿Solo estás creando los cubos para partes de la geometría que el jugador puede ver? Ese sería mi primer paso. Dependiendo del tamaño de su terreno, no tiene que tener todo el mundo cargado / dibujando / visible / lo que sea.
fuente