Чанки
Чанки (от англ. Chunk — ячейка, кусок) — метод, который использует карт на части. Размеры одного чанка — 16 блоков шириной, 16 блоков длиной и 256 блоков глубиной. Это составляет 65 536 блоков. При открытии нового куска карты, генерируется и становится активным 441 чанк вокруг игрока. Количество активных чанков вокруг игрока в одиночной игре определяется и дальностью прорисовки: 25 на самой малой, 81 на малой, 289 на нормальной и 441 на дальней. Это не влияет на генерацию мира. В многопользовательском режиме чанки загружаются в радиусе 10 от игрока (21*21 чанк). Радиус может быть сконфигурирован от 3 до 15. Связано это с мощностью оборудования и скоростью подключения. На этих чанках могут появляться мобы, деревья, предметы и прочее, тогда когда активность на всех других чанках на карте остановлена и они являются полностью статичными. Если игрок переместится на область уже сгенерированных чанков, то эти чанки восстановятся и наполнятся динамическими объектами. С 20 декабря 2010 года F3 + F ) или установить факел неподалеку от этой дыры.
Рендеринг игры делит чанк на 8 частей 2116*16*16( после версии 1.2.3 стало 16 частей ) , которые составляют списки OpenGL, в целях значительного ускорения рендеринга. Он должен быть каждый раз перестроен при изменении чанка.
Оптимизированный подсчёт блоков в чанке
Всем здравствуйте. Есть такой вопрос: какой наиболее оптимизированный способ подсчёта определённых блоков в конкретном чанке? (И нет, не для лимитера блоков на чанк) Если что, мне нужна возможность, чтобы по worldObj + x и z координат + Block + meta(блока) можно было узнать, сколько таких блоков есть в проверяемом чанке. Притом возможность получить такую информацию мне нужна примерно раз в 4-5 секунд, может даже чаще (из ивентов вызываться будет, если что). На текущий момент, у меня в голове лишь 2 идеи, как такое реализовать. Но обе из них имеют большие проблемы по оптимизации.
1 способ — вложенные 3 цикла и перебор всех блоков в чанке с подсчётом нужных мне. Учитывая, что чанк очень большой (особенно в высоту) — это будут жёсткие тормоза.
2 способ — «кеш» в WSD. То есть создать WSD с разделением по мирам, а дальше внутри WSD мапа с чанками и обжеками, в которых будут блоки и их кол-во. В итоге при обращении к WSD для получения информации идёт проверка, есть ли такая информация в «кеше». Если есть — выдаём, иначе тут же 3 циклами перебираем чанк чтобы получить эту информацию, кладём в кеш и возвращаем её. Этот способ, конечно, лучше предыдущего, но требуется триггер на обновление блока в мире, чтобы поддерживать «кеш» в актуальном состоянии, собственно тут то и проблема в этом способе, ведь ивента на setBlock так такого нет, только ивенты с игроком, а если вызывается worldObj#setBlock из команды /setblock или просто в каком-то моде — триггериться нечем. Пихать свой хук в setBlock — не думаю, что лучший вариант.
Может быть у вас есть более хорошие способы, как быстро посчитать кол-во определённых блоков с опред. метой в указанном чанке? Главное, чтобы не было тормозов от просчёта. Возможно в самом Chunk есть какой-то кеш на подобный случай, но я его не нашёл. Во всяком случае, надеюсь, кто-нибудь мне поможет. Заранее спасибо!
Чанки
Чанки (от англ. Chunk — ячейка, кусок, осколок) — метод, который использует игра для разделения бесконечных карт на части.
- 1 Генерация
- 2 Прогрузка чанков
- 2.1 Спаун чанков
- 2.2 Влияние на производительность
Генерация
Размеры одного чанка — 16 блоков в ширину, 16 блоков в длину и 384 блока в высоту, что составляет 98 304 блока. При прогрузке новой области карты, генерируется и становится активным 441 чанк вокруг игрока, или больше, если была установлена дальность прорисовки свыше 10 чанков. Чанки генерируются с помощью зерна карты, а это означает, что они будут всегда одинаковыми если вы будете использовать одно и то же зерно снова.
Прогрузка чанков
Количество активных чанков вокруг игрока в одиночной игре определяется дальностью прорисовки: от 25 на минимальной (2 чанка) до 4225 на максимальной (32 чанка). В многопользовательском режиме чанки по умолчанию загружаются в радиусе 10 от игрока (21*21 чанк). Радиус может быть сконфигурирован от 2 до 16, в зависимости от мощности оборудования и скорости подключения. На этих чанках могут появляться мобы, деревья, вода, предметы и прочее, когда активность на всех других чанках на карте остановлена и они являются полностью статичными. Если игрок переместится на область уже сгенерированных чанков, то эти чанки восстановятся и наполнятся динамическими объектами. С 20 декабря 2010 года сервер сохраняет чанки реже, чем раньше. Чанки не пересохраняются, если они уже были сохранены 30 секунд назад.
В некоторых версиях игры существует ошибка, в связи с которой один или несколько чанков на сервере не загружается, и игрок видит перед собой огромную пропасть до дна, но не может в неё упасть. Для ликвидации этой ошибки нужно переподключиться к серверу, изменить дальность прорисовки ( F3 + F ), перезагрузить чанки без изменения дистанции прорисовки ( F3 + A ), или установить факел неподалеку от этой дыры.
Спаун чанков
Влияние на производительность
Чанки обычно загружаются в энергозависимую память только тогда, когда они необходимы для отображения. Это управление памятью «до тех пор, пока оно не понадобится» обычно используется в играх с процедурно-генерируемым ландшафтом, чтобы компьютерам игроков не приходилось одновременно отслеживать и обновлять сотни растений и мобов.
Механизм рендеринга Minecraft использует функцию отображения списка OpenGL, чтобы разделить мировой блок на шестнадцать больших списков отображения 16×16×16 блоков, чтобы значительно ускорить рендеринг. Их необходимо перестраивать каждый раз, когда блок внутри них изменяется, и их можно визуализировать несколько раз, например, для достижений, прозрачности. [1]
Чанки со слизнями
Слизни могут спауниться только на чанках, определяемых расчетами его координат, а также на чанках болота и в плоском мире. Существуют специальные программы и модификации, которые позволяют указать, где они могут спауниться.
Нахождение краев чанков
Сочетание клавиш F3 + G может использоваться для отображения границ чанка.
Кроме того, нажатие кнопки «F3» открывает экран «Отладка», который показывает координаты X, Y и Z игрока в дополнение к переменной «c». Эти координаты меняются по мере перемещения игрока. Игрок может узнать блок, в котором он находится, по переменной «c», которая находится рядом с переменными «x» и «z». Число в скобках указывает, как далеко игрок находится от северо-западного угла чанка, поэтому, если «с» рядом с Х было 3 (5), а «с» рядом с Z было 2 (4), то игрок находится на чанке (3, 2) и в блоке (5, 4) с северо-западного угла.
Координаты X и Z, которые делятся на 16, представляют границы между кусками. EG.: (96, −32) — это угол, где встречаются четыре чанка. Один из этих фрагментов находится между координатами X от 80 до 96 и координатами Z от −48 до −32. Другой находится между координатами X 96-112 и координатами Z-32-16, и так далее. Когда X или Z пересекают кратное 16, игрок перемещается через куски.
По сути, игрок находится в верхнем левом углу (северо-запад) чанка, когда обе координаты x и z делятся на 16.
Кроме того, игрок может узнать чанк, в котором он находится, по следующей формуле:
Х чанка — Floor(Х / 16),
Z чанка — Floor(Z / 16),
Где Floor[N] — целая часть числа N. Например, Floor[27.9561] = 27.
Другими словами, если X было 27, Z было 15, то координаты чанка — это (Floor(27/16), Floor(-15/16)), что означает, что игрок находится в чанке (1, −1)
Также игрок может узнать, как далеко он находится от северо-западного угла по формуле:
(координата X или Z) И 15В Bedrock Edition, при переключении причудливой графики, мир рендерится снова, загружая только часть, в которой находится игрок, в течение доли секунды, кратко показывая границы фрагментов.
История
Вы можете помочь проекту, дополнив и оформив его.
Интересные факты
- Полностью сгенерированный игровой мир теоретически может содержать до 14 062 500 000 000 (14 триллионов) действительных чанков. На практике это означает, что игровой мир Minecraft не может быть полностью исследован за время человеческой жизни. Вес такого мира составил бы свыше 70 петабайт.
- На данный момент существует около 10 244,700 всех возможных вариаций чанков, не считая сущности. Это значение можно рассчитать, возведя количество видов блоков в Minecraft в степень 65536. По мере добавления новых блоков в игру это число растёт. Однако, некоторые блоки требуют непосредственной взаимной связи, например, кактус может расти только на песке, и к нему не должны примыкать другие блоки.
- Возможно создание четырнадцати триллионов (14 062 500 000 000) реальных чанков. Есть 7,46×10244,700 возможных чанков, исключая сущности.
- Размещение или уничтожение блока в незагруженном чанке обычно перезагружает его.
- В Bedrock Edition, если в одной из шестнадцати секций фрагмента 16×16×16 нет блоков, размещение там блока показывает ту же анимацию, что и загрузка фрагмента. Эта ошибка приводит к тому, что блок, который поместил игрок, поворачивается к тому же цвету неба в направлении, на которое игрок смотрит в течение примерно 1 секунды, и начинает исчезать в обычной текстуре блока. Если время восхода или захода солнца, и игрок размещает там блок, он фактически постоянно меняет цвет в течение 1 секунды, если игрок продолжает качать головой вверх и вниз. Блок также делает так, что блоки позади него кажутся невидимыми.
См. также
- Chunk updates
- Список терминов
- Частота кадров
Примечания
Чанки
Чанки (от англ. Chunk — ячейка, кусок, осколок) — метод, который использует игра для разделения бесконечных карт на части.
- 1 Генерация
- 2 Прогрузка чанков
- 2.1 Спаун чанков
- 2.2 Влияние на производительность
Генерация [ ]
Размеры одного чанка — 16 блоков в ширину, 16 блоков в длину и 384 блока в высоту, что составляет 98 304 блока. При прогрузке новой области карты, генерируется и становится активным 441 чанк вокруг игрока, или больше, если была установлена дальность прорисовки свыше 10 чанков. Чанки генерируются с помощью зерна карты, а это означает, что они будут всегда одинаковыми если вы будете использовать одно и то же зерно снова.
Прогрузка чанков [ ]
Количество активных чанков вокруг игрока в одиночной игре определяется дальностью прорисовки: от 25 на минимальной (2 чанка) до 4225 на максимальной (32 чанка). В многопользовательском режиме чанки по умолчанию загружаются в радиусе 10 от игрока (21*21 чанк). Радиус может быть сконфигурирован от 2 до 16, в зависимости от мощности оборудования и скорости подключения. На этих чанках могут появляться мобы, деревья, вода, предметы и прочее, когда активность на всех других чанках на карте остановлена и они являются полностью статичными. Если игрок переместится на область уже сгенерированных чанков, то эти чанки восстановятся и наполнятся динамическими объектами. С 20 декабря 2010 года сервер сохраняет чанки реже, чем раньше. Чанки не пересохраняются, если они уже были сохранены 30 секунд назад.
В некоторых версиях игры существует ошибка, в связи с которой один или несколько чанков на сервере не загружается, и игрок видит перед собой огромную пропасть до дна, но не может в неё упасть. Для ликвидации этой ошибки нужно переподключиться к серверу, изменить дальность прорисовки ( F3 + F ), перезагрузить чанки без изменения дистанции прорисовки ( F3 + A ), или установить факел неподалеку от этой дыры.
Спаун чанков [ ]
Чанки в области, непосредственно окружающей точку появления мира, являются особыми чанками, которые никогда не выгружаются из памяти, пока хотя бы один игрок находится в обычном мире. Это означает, что такие вещи, как механизмы из красного камня и мобофемы продолжают работать даже когда все игроки находятся далеко.
Влияние на производительность [ ]
Чанки обычно загружаются в энергозависимую память только тогда, когда они необходимы для отображения. Это управление памятью «до тех пор, пока оно не понадобится» обычно используется в играх с процедурно-генерируемым ландшафтом, чтобы компьютерам игроков не приходилось одновременно отслеживать и обновлять сотни растений и мобов.
Механизм рендеринга Minecraft использует функцию отображения списка OpenGL, чтобы разделить мировой блок на шестнадцать больших списков отображения 16×16×16 блоков, чтобы значительно ускорить рендеринг. Их необходимо перестраивать каждый раз, когда блок внутри них изменяется, и их можно визуализировать несколько раз, например, для достижений, прозрачности. [1]
Чанки со слизнями [ ]
Слизни могут спауниться только на чанках, определяемых расчетами его координат, а также на чанках болота и в плоском мире. Существуют специальные программы и модификации, которые позволяют указать, где они могут спауниться.
Нахождение краев чанков [ ]

Сочетание клавиш F3 + G может использоваться для отображения границ чанка. (для Java Edition)
Кроме того, нажатие кнопки «F3» открывает экран «Отладка», который показывает координаты X, Y и Z игрока в дополнение к переменной «c». Эти координаты меняются по мере перемещения игрока. Игрок может узнать блок, в котором он находится, по переменной «c», которая находится рядом с переменными «x» и «z». Число в скобках указывает, как далеко игрок находится от северо-западного угла чанка, поэтому, если «с» рядом с Х было 3 (5), а «с» рядом с Z было 2 (4), то игрок находится на чанке (3, 2) и в блоке (5, 4) с северо-западного угла.
Координаты X и Z, которые делятся на 16, представляют границы между кусками. EG.: (96, −32) — это угол, где встречаются четыре чанка. Один из этих фрагментов находится между координатами X от 80 до 96 и координатами Z от −48 до −32. Другой находится между координатами X 96-112 и координатами Z-32-16, и так далее. Когда X или Z пересекают кратное 16, игрок перемещается через куски.
По сути, игрок находится в верхнем левом углу (северо-запад) чанка, когда обе координаты x и z делятся на 16.
Кроме того, игрок может узнать чанк, в котором он находится, по следующей формуле:
Х чанка — Floor(Х / 16),
Z чанка — Floor(Z / 16),
Где Floor[N] — целая часть числа N. Например, Floor[27.9561] = 27.
Другими словами, если X было 27, Z было 15, то координаты чанка — это (Floor(27/16), Floor(-15/16)), что означает, что игрок находится в чанке (1, −1)
Также игрок может узнать, как далеко он находится от северо-западного угла по формуле:
(координата X или Z) И 15В Bedrock Edition, при переключении причудливой графики, мир рендерится снова, загружая только часть, в которой находится игрок, в течение доли секунды, кратко показывая границы фрагментов.
История [ ]
Вы можете помочь проекту, дополнив и оформив его.
Интересные факты [ ]
- Полностью сгенерированный игровой мир теоретически может содержать до 14 062 500 000 000 (14 триллионов) действительных чанков. На практике это означает, что игровой мир Minecraft не может быть полностью исследован за время человеческой жизни. Вес такого мира составил бы свыше 70 петабайт.
- На данный момент существует около 10 244,700 всех возможных вариаций чанков, не считая сущности. Это значение можно рассчитать, возведя количество видов блоков в Minecraft в степень 65536. По мере добавления новых блоков в игру это число растёт. Однако, некоторые блоки требуют непосредственной взаимной связи, например, кактус может расти только на песке, и к нему не должны примыкать другие блоки.
- Возможно создание четырнадцати триллионов (14 062 500 000 000) реальных чанков. Есть 7,46×10244,700 возможных чанков, исключая сущности.
- Размещение или уничтожение блока в незагруженном чанке обычно перезагружает его.
- В Bedrock Edition, если в одной из шестнадцати секций фрагмента 16×16×16 нет блоков, размещение там блока показывает ту же анимацию, что и загрузка фрагмента. Эта ошибка приводит к тому, что блок, который поместил игрок, поворачивается к тому же цвету неба в направлении, на которое игрок смотрит в течение примерно 1 секунды, и начинает исчезать в обычной текстуре блока. Если время восхода или захода солнца, и игрок размещает там блок, он фактически постоянно меняет цвет в течение 1 секунды, если игрок продолжает качать головой вверх и вниз. Блок также делает так, что блоки позади него кажутся невидимыми.
См. также [ ]
- Chunk updates
- Список терминов
- Частота кадров
Примечания [ ]
