Cela dépend de la méthode de subdivision spatiale que vous utilisez, bien que toutes les méthodes de subdivision (comme toute méthode de compression) finissent par disparaître où aucune compression supplémentaire ne peut avoir lieu, en raison des frais généraux de structure de données et d'autres facteurs logiques / mathématiques. Un exemple peut être trouvé en octets. Pour chaque nœud de l'octree, un pointeur doit être conservé vers son parent et / ou ses enfants (selon la façon dont vous gérez votre architecture de structure de données), pour permettre une traversée significative. Toute structure arborescente peut contenir n enfants. Plus le rapport 1: n est faible, plus vous gagnez d'espace et, par conséquent, plus les frais généraux dans l'arborescence sont importants, car vous devez avoir plus de nœuds ancêtres pour contenir le même nombre de voxels foliaires (dans votre cas, environ 510 trillions représentant la surface).
Étant donné que dans votre cas, les principaux problèmes sont les coûts de stockage et le rendu de la planète entière (ou de ses parties) à une distance raisonnable, il n'y a pas de structure de données que je recommanderais sur un octree. Le mipmapping est une nécessité: 12,8 millions de mètres de diamètre à la puissance supérieure la plus proche de 2 est 2 ^ 24 = 16,8 millions. 24 niveaux d'octree à parcourir équivaudraient à une quantité gargantuesque de branchements - très coûteux pour les GPU et les CPU. Mais à condition de bien faire les choses, vous n'aurez besoin de parcourir que quelques niveaux à la fois. Compte tenu de la quantité d'espace requise, cependant, les alternatives sont rares (voir ci-dessous).
Les capacités de mipmapping des octrees sont ce qui en fait un outil incroyablement puissant pour les gros volumes tels que ceux que vous décrivez. Contrairement à toutes les autres méthodes de subdivision connues (à l'exception des arbres KD), l'octree maintient la subdivision par niveau au minimum, ce qui signifie que les différences visuelles et physiques entre les niveaux de mipmap sont également minimes, ce qui signifie des deltas beaucoup plus fins dans la granularité lorsque vous montez et en bas de l'arbre.
Si, d'autre part, vous voulez générer un monde où la traversée de la grille hiérarchique est réduite au minimum, alors vous devrez échanger de l'espace pour augmenter la vitesse.
En parlant du rapport idéal 1: n, il n'y a pas de structure plus fine que l'arbre kd à cet égard. Lorsque l'octree se divise en 2 pour chaque axe, ce qui donne 2 ^ 3 = 8 cellules enfants individuelles, l'arbre kd se divise exactement une fois par niveau de subdivision. Le problème avec cela est que vous devez choisir un hyperplan pour vous séparer, et cet hyperplan pourrait être choisi autour de l'un des 3 axes. Bien qu'il soit optimal en termes d'espace, il rend les traversées 3D (comme pendant les raymarches, une opération fondamentale lors de l'utilisation d'octrees pour la physique ou le rendu) beaucoup plus difficiles que dans un octree, car une structure de type portail dynamique doit être conservée pour enregistrer interfaces entre les différents nœuds d'arbre kd.
RLE est une autre approche de la compression, mais est à bien des égards plus difficile à appliquer à un problème comme celui-ci (où la base des opérations est sphérique), car la compression RLE est unidimensionnelle et vous devez choisir l'axe dans lequel elle opère. planète, on pourrait choisir l'axe polaire, mais tout choix mono-axe introduirait certains problèmes de traversées pour le rendu et la physique lorsqu'ils agissent sous certains angles non optimaux. Bien sûr, vous pouvez également exécuter RLE sur 3 axes simultanément, triplant le coût de stockage, ou sur 6 axes (-x, + x, -y, + y, -z, + z) comme optimisation supplémentaire.
Alors pour répondre à votre question (ou pas!)
Je ne vais pas entrer directement dans la réponse à quel type de matériel, mais je pense que le regarder dans une perspective octree commence à vous donner une idée de ce qui est en fait possible sur quel type de matériel. Je vous encourage à emprunter cette voie, si vous voulez vraiment savoir, il serait peut-être plus facile de mettre en œuvre un simple octree clairsemé(voir l'article de Laine dans les références) et placez-y une coquille sphérique de voxels de surface, et voyez à quoi ressemble l'utilisation de l'espace qui en résulte. Intensifie à partir de là. Voyez jusqu'où vous pouvez aller avant que la mémoire de votre système ne commence à disparaître. Cela ne vous oblige pas à écrire un rendu à moins que vous ne souhaitiez la visualisation. Gardez également à l'esprit que cela est mieux fait sur le processeur - les GPU n'ont généralement pas la capacité de mémoire pour faire face à des problèmes de cette ampleur. C'est l'une des raisons pour lesquelles Intel envisage de s'orienter vers des processeurs massivement parallèles: les avantages du GPGPU, qui est meilleur dans ce genre de choses, peuvent être appliqués à un espace mémoire beaucoup plus vaste sans goulots d'étranglement du bus système. Il y en a probablement d'autres ici, ou sur mathématique.stackexchange.com,
En termes d'exigence de distance de vue infinie, bien sûr, mais la question se résume toujours à "combien de détails à quelle distance". Le rendu de détails infinis nécessiterait des ressources infinies. C'est là que le mipmapping variable par scène entre en jeu. Gardez également à l'esprit que toutes les structures de données incarnent un compromis entre la vitesse et l'espace ou vice versa. Cela signifie un rendu moins / plus lent, si vous voulez un monde plus grand pour le même effort d'ingénierie.