Есть много клонов Minecraft, и я работаю над собственной реализацией. Принцип рендеринга ландшафта состоит в том, чтобы разбить весь мир на куски фиксированного размера, чтобы уменьшить усилие локальных изменений.
В Minecraft размер порции составляет 16 х 16 х 256, насколько я сейчас. И в клонах я также всегда видел куски размером в степень числа 2.
Есть ли какая-то причина для этого, может быть, производительность или память? Я знаю, что полномочия 2 играют особую роль в бинарных компьютерах, но какое это имеет отношение к размеру чанка?
2^n
)Ответы:
Это будет зависеть от игры и структуры индексации, используемой для кусков. Хотя на таком высоком уровне маловероятно, что он имеет непосредственное отношение к памяти или конкретному повышению производительности. Скорее всего, это произвольное решение для определения размера кусков предсказуемым образом. Он учитывает некоторые приемы подсчета и индексации с использованием сдвига битов, которые были бы невозможны для чисел, не являющихся степенью двойки.
Например, подсчитать по степеням два так же просто, как сдвинуть бит в двоичном виде:
Где будут использоваться эти ярлыки, будет зависеть от разработчика и проблемы, которую они пытаются решить.
Если вы принимаете решение о размере чанков, и это не имеет значения в других аспектах, вы также можете использовать что-то знакомое и имеющее преимущества, которые вы привыкли использовать.
источник
Во-первых, умножение на степени двух намного дешевле, чем умножение на произвольное число, поскольку вы можете сделать это с помощью сдвига битов . В большинстве случаев компилятор может сделать это за вас, поэтому всякий раз, когда вы пишете «* 16» в своем коде, компилятор фактически выполняет сдвиг на четыре, и вам не нужно об этом беспокоиться - вам просто нужно дать компилируйте эту возможность, проектируя ваши структуры данных таким образом.
Во-вторых, поскольку линии кеша, шины памяти и другие информационные магистрали в вашем компьютере, как правило, также рассчитаны на использование степеней двойки, таким образом вы можете получить более высокую производительность в целом.
В-третьих, мы, старые гики, просто привыкли играть с двумя силами, так что это привычка.
(В-четвертых, другим старым фанатам, которые проектируют ваше оборудование и ваши компиляторы, также нравятся степени двух, так что это не изменится в ближайшее время).
источник
Реальный ответ таков: на двоичном компьютере степени двух - это хорошие круглые числа.
Когда нормальному человеку нужно выбрать произвольное число для какой-либо цели, он обычно выбирает хорошие круглые числа в системе счисления, с которой ему удобно, основание 10. Таким образом, они выбирают 10, 100, 1000 и т. Д. Поскольку они простой и легкий, не требующий больших размышлений, и точное значение не имело для них большого значения, они просто нацеливались на общую шкалу величин.
Как программисты, когда нам нужно выбрать произвольное число для какой-то цели, мы обычно выбираем хорошие круглые числа в компьютерах системы счисления, основание 2. Поэтому мы выберем 2, 4, 8 и т. Д. Поскольку они просты и это просто и не требует больших размышлений, и точное значение не было для нас действительно важным, мы просто стремились к общему масштабу.
Это действительно не сложнее, чем это. Они просто хорошие круглые числа.
источник
Одна из причин, не упомянутых в других ответах, заключается в том, что при необходимости степени двух чисел всегда можно уменьшить вдвое без проблем округления. Вероятно, это не причина для клонов Minecraft, но в некоторых других случаях, например, в текстурах с мипмапами .
источник
Другая потенциальная причина может заключаться в том, что это позволит вам кодировать информацию о каждом чанке в трехмерной текстуре. Если ваше целевое аппаратное обеспечение поддерживало 3D текстуры, но не имело полностью надежной и общей поддержки текстур, не поддерживающих степень двух (что, я допускаю, вы хотите, чтобы стрельба была довольно низкой), то увеличение размеров блоков в два раза - это не просто идеал - это важно.
источник