Pourquoi la taille des morceaux est-elle souvent une puissance de deux?


15

Il existe de nombreux clones Minecraft et je travaille sur ma propre implémentation. Un principe du rendu du terrain consiste à paver le monde entier en morceaux de taille fixe pour réduire l'effort des changements localisés.

Dans Minecraft, la taille des morceaux est de 16 x 16 x 256 pour l'instant. Et dans les clones, j'ai également toujours vu des tailles de morceaux d'une puissance du nombre 2.

Y a-t-il une raison à cela, peut-être liée aux performances ou à la mémoire? Je sais que les puissances de 2 jouent un rôle spécial dans les ordinateurs binaires, mais qu'est-ce que cela a à voir avec la taille des morceaux?


1
C'est bien que vous puissiez continuer à le diviser par deux et récupérer des nombres pairs. (Pas une réponse complète, mais quelque chose d'utile sur l'utilisation d'un nombre comme 2^n)
ashes999

Réponses:


27

Cela dépendrait du jeu et de la structure d'indexation utilisée pour les morceaux. Cependant, à un niveau aussi élevé, il est peu probable que cela ait beaucoup à voir avec la mémoire ou une amélioration spécifique des performances. Il est plus que probable que c'est une décision arbitraire pour dimensionner des morceaux de manière prévisible. Il permet quelques astuces de comptage et d'indexation utilisant le décalage de bits qui ne seraient pas possibles avec des nombres qui ne sont pas une puissance de deux.

Par exemple, compter en puissances de deux est aussi simple que de décaler un peu en binaire:

Dec =  Bin
1   =  000001
2   =  000010
4   =  000100
8   =  001000
16  =  010000
32  =  100000

L'endroit où ces raccourcis seront utilisés dépendra du développeur et du problème qu'il essaie de résoudre.

Si vous décidez de la taille des morceaux et que cela n'a pas d'importance pour d'autres aspects, vous pouvez également utiliser quelque chose de familier et qui présente des avantages que vous avez l'habitude d'utiliser.


15

Premièrement, la multiplication par des puissances de deux est beaucoup moins chère que la multiplication par un nombre arbitraire, car vous pouvez le faire en décalant les bits . La plupart du temps, le compilateur peut le faire pour vous, donc chaque fois que vous écrivez "* 16" dans votre code, le compilateur effectue en fait un décalage de quatre, et vous n'avez pas à vous en préoccuper - vous devez juste donner le compilez l'opportunité en concevant ainsi vos structures de données.

Deuxièmement, étant donné que les lignes de cache, les bus de mémoire et les autres autoroutes de l'information de votre ordinateur ont également tendance à être conçus pour utiliser des puissances de deux, vous pouvez globalement obtenir de meilleures performances.

Troisièmement, nous, les vieux geeks, avons l'habitude de jouer avec des pouvoirs de deux, c'est donc une habitude.

(Quatrièmement, d'autres vieux geeks qui conçoivent votre matériel et vos compilateurs aiment aussi les pouvoirs de deux, donc cela ne changera pas de sitôt).


2
+1 "Troisièmement, nous, les vieux geeks, sommes juste habitués à jouer avec des pouvoirs de deux, c'est donc une habitude." C'est probablement la raison principale .
Laurent Couvidou

9

La vraie réponse est juste ceci: Sur un ordinateur binaire, les puissances de deux sont de bons nombres ronds.

Lorsqu'une personne normale doit choisir un nombre arbitraire dans un but, elle choisit généralement de bons nombres ronds dans le système numérique avec lequel elle est à l'aise, base 10. Donc, elle choisit 10, 100, 1000, etc. simples et faciles et ne nécessitent pas beaucoup de réflexion et la valeur précise n'était pas vraiment importante pour eux, ils visaient simplement une échelle de grandeur générale.

En tant que programmeurs, lorsque nous devons choisir un nombre arbitraire dans un certain but, nous choisissons généralement de bons nombres ronds dans le système de numérotation utilisé par les ordinateurs, base 2. Nous allons donc choisir 2, 4, 8, etc. Parce qu'ils sont simples et facile et ne nécessite pas beaucoup de réflexion et la valeur précise n'était pas vraiment importante pour nous, nous visions simplement une échelle de grandeur générale.

Ce n'est vraiment pas plus compliqué que ça. Ce ne sont que de beaux chiffres ronds.


6

Une raison non mentionnée dans d'autres réponses est que si nécessaire, les puissances de deux nombres peuvent toujours être divisées par deux sans problèmes d'arrondi. Ce n'est probablement pas une raison dans les clones Minecraft, mais dans certains autres cas, comme dans les textures avec des mipmaps .


2

Une autre raison potentielle serait qu'elle vous permettrait de coder des informations sur chaque morceau dans une texture 3D. Si votre matériel cible prend en charge les textures 3D, mais ne dispose pas d'une prise en charge de texture non robuste à deux (ce qui, j'admets, vous voudriez tirer assez bas), alors rendre vos tailles de blocs à deux n'est pas juste idéal - c'est essentiel.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.