En jouant avec la création de paysages du monde minecraftish / lego dans Unity 3D (paysages voxels générés de manière procédurale avec des cubes), je trouve que les maillages créés pour ces paysages prennent beaucoup de mémoire. Le maillage n'est actuellement composé que de sommets pour les côtés visibles d'un cube. L'utilisation de la mémoire pour un terrain complexe peut prendre 6 à 7 cents mégaoctets.
Ces maillages pourraient être optimisés, mais j'ai du mal à trouver un algorithme décent pour le faire.
L'algorithme doit tenir compte du fait que vous ne voulez pas «fusionner» des blocs de différents types de terrain. Je suppose qu'un début très simple pourrait être de simplement traiter tous les blocs le long d'un axe et d'effectuer des balayages supplémentaires pour les deux autres axes.
J'ai besoin de garder la forme du maillage, c'est-à-dire pas de fusion de sommets au point que l'espace vide ou solide est modifié. La raison en est qu'il peut y avoir des créatures / etc qui doivent encore naviguer dans le maillage. Donc, je ne peux pas simplement créer un détail très bas, un maillage déformé.
Des réflexions / suggestions / conseils à ce sujet?
la source
Réponses:
Ma question est:
Pourquoi auriez-vous besoin du maillage lui-même pour effectuer un mouvement de créature?
Vous ne pouvez pas faire le calcul de cheminement sur une matrice 3D d'identifiants?
Je pense que Minecraft utilise une matrice 3D avec un bloc pr 4 bits. Il simule également uniquement les créatures d'un certain rayon autour du joueur.
Vous pouvez stocker vos morceaux dans une structure d'arborescence oc, où chaque morceau est compressé.
Si vous conservez les données compressées dans la RAM, vous pouvez décompresser les données assez rapidement en cas de besoin.
la source
Que diriez-vous d'utiliser un octree pour stocker le terrain?
Par exemple, air = pas de nœud, tous les autres types de terrain auraient un nœud avec le type de terrain.
Lors de l'insertion / suppression de nœuds, vous pouvez vérifier si les huit enfants de chaque nœud sur le chemin d'arborescence modifié ont le même type terain et les fusionner si nécessaire. De cette façon, de gros blocs du même matériau ne prendraient qu'un seul nœud.
la source
Créez-vous uniquement des cubes pour des parties de la géométrie visibles par le joueur? Ce serait ma première étape. Selon la taille de votre terrain, vous n'avez pas besoin d'avoir l'intégralité du monde chargé / dessin / visible / quoi que ce soit.
la source