Почему размер куска часто является степенью двойки?


15

Есть много клонов Minecraft, и я работаю над собственной реализацией. Принцип рендеринга ландшафта состоит в том, чтобы разбить весь мир на куски фиксированного размера, чтобы уменьшить усилие локальных изменений.

В Minecraft размер порции составляет 16 х 16 х 256, насколько я сейчас. И в клонах я также всегда видел куски размером в степень числа 2.

Есть ли какая-то причина для этого, может быть, производительность или память? Я знаю, что полномочия 2 играют особую роль в бинарных компьютерах, но какое это имеет отношение к размеру чанка?


1
Приятно, что вы можете разделить его на два и получить четные числа. (Не полный ответ, но что-то полезное в использовании числа типа 2^n)
ashes999

Ответы:


27

Это будет зависеть от игры и структуры индексации, используемой для кусков. Хотя на таком высоком уровне маловероятно, что он имеет непосредственное отношение к памяти или конкретному повышению производительности. Скорее всего, это произвольное решение для определения размера кусков предсказуемым образом. Он учитывает некоторые приемы подсчета и индексации с использованием сдвига битов, которые были бы невозможны для чисел, не являющихся степенью двойки.

Например, подсчитать по степеням два так же просто, как сдвинуть бит в двоичном виде:

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

Где будут использоваться эти ярлыки, будет зависеть от разработчика и проблемы, которую они пытаются решить.

Если вы принимаете решение о размере чанков, и это не имеет значения в других аспектах, вы также можете использовать что-то знакомое и имеющее преимущества, которые вы привыкли использовать.


15

Во-первых, умножение на степени двух намного дешевле, чем умножение на произвольное число, поскольку вы можете сделать это с помощью сдвига битов . В большинстве случаев компилятор может сделать это за вас, поэтому всякий раз, когда вы пишете «* 16» в своем коде, компилятор фактически выполняет сдвиг на четыре, и вам не нужно об этом беспокоиться - вам просто нужно дать компилируйте эту возможность, проектируя ваши структуры данных таким образом.

Во-вторых, поскольку линии кеша, шины памяти и другие информационные магистрали в вашем компьютере, как правило, также рассчитаны на использование степеней двойки, таким образом вы можете получить более высокую производительность в целом.

В-третьих, мы, старые гики, просто привыкли играть с двумя силами, так что это привычка.

(В-четвертых, другим старым фанатам, которые проектируют ваше оборудование и ваши компиляторы, также нравятся степени двух, так что это не изменится в ближайшее время).


2
+1 «В-третьих, мы, старые гики, просто привыкли играть с двумя силами, так что это привычка». Это, наверное, главная причина.
Лоран Кувиду

9

Реальный ответ таков: на двоичном компьютере степени двух - это хорошие круглые числа.

Когда нормальному человеку нужно выбрать произвольное число для какой-либо цели, он обычно выбирает хорошие круглые числа в системе счисления, с которой ему удобно, основание 10. Таким образом, они выбирают 10, 100, 1000 и т. Д. Поскольку они простой и легкий, не требующий больших размышлений, и точное значение не имело для них большого значения, они просто нацеливались на общую шкалу величин.

Как программисты, когда нам нужно выбрать произвольное число для какой-то цели, мы обычно выбираем хорошие круглые числа в компьютерах системы счисления, основание 2. Поэтому мы выберем 2, 4, 8 и т. Д. Поскольку они просты и это просто и не требует больших размышлений, и точное значение не было для нас действительно важным, мы просто стремились к общему масштабу.

Это действительно не сложнее, чем это. Они просто хорошие круглые числа.


6

Одна из причин, не упомянутых в других ответах, заключается в том, что при необходимости степени двух чисел всегда можно уменьшить вдвое без проблем округления. Вероятно, это не причина для клонов Minecraft, но в некоторых других случаях, например, в текстурах с мипмапами .


2

Другая потенциальная причина может заключаться в том, что это позволит вам кодировать информацию о каждом чанке в трехмерной текстуре. Если ваше целевое аппаратное обеспечение поддерживало 3D текстуры, но не имело полностью надежной и общей поддержки текстур, не поддерживающих степень двух (что, я допускаю, вы хотите, чтобы стрельба была довольно низкой), то увеличение размеров блоков в два раза - это не просто идеал - это важно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.