Как работают чанки на нашем проекте

Чанк будет обозначен зеленой сеткой. Красные линии в углах — его угловые точки.
Что такое такты или тики, или TPS
Такт (англ. Tick) — программная единица времени Minecraft, на которой основана вся игровая механика. Представляет из себя паузу между повторами цикла обновлений игрового мира.
Игровой цикл повторяется двадцать раз в секунду, поэтому такт — 1⁄20 секунды или 50 миллисекунд.
За каждый такт меняются многие игровые аспекты: ваши механизмы работают по тактам, день и ночь сменяется так же по тактам, движущиеся объекты меняют положение в пространстве, мобы проверяют окружение и обновляют поведение, меняются здоровье и голод игрока под внешним воздействием, и многое другое.
Важно понимать,что при идеальных условиях сервер проверяет весь мир на изменения 20 раз в секунду. И,соответственно, за это время состояние может либо измениться,либо остаться прежним.
Подробнее о TPS значениях нашего сервера можно узнать здесь (ссылка).
Почему нужно соблюдать границы чанков?
Потому что моды обрабатываются так же по чанкам. Если чанк отгружен — энергия например идти по проводам из отгруженного чанка в загруженный не будет. Мобы не будут плодится. Растения не будут расти. В механизмах остановится переработка потому что остановятся сами механизмы.
Если вы строите что-то большое старайтесь делать это так, чтобы провода, трубы и все такое — не пересекало в замкнутой системе границ чанков. Нам это не помешает. А вот вам будет приятнее играть.
Как работают чанки (вообще) на серверах.

На многих (на всех) проектах чанки работают крайне хреново.
Прогружается на 100% только чанк, в котором стоит игрок (Красная зона)
Чанки рядом с активным чанком режуться по прогрузке на 50% (желтая зона) (то есть работают в 2 раза медленнее).
Чанки по диагонали — режутся на 75% (синяя зона) (то есть работают на в 4 раза медленнее)
На лагающих серверах синяя зона замещает желтую — то есть все чанки вокруг игрока работают в 4 раза медленее.
Все чанки дальше (сиреневая зона) — отключаются вообще. То есть грубо говоря — вы имеете только один рабочий чанк — тот в котором вы стоите.
Если на сервере стоит прогрузка чанков равная 2 (не касается прогрузки в клиенте — это серверная настройка), то выглядит это так:

Конечно, при условиях, что желтая зона вообще работает.
Если прогрузка на сервере более 2, то просто увеличивается синяя зону на нужное кол-во чанков.
Так работают чанки на всех стандартных проектах.
Как работают чанки у нас?
НОРМАЛЬНО. Так же, как в сингле.
Все прогружаемые чанки вокруг игрока на расстоянии 6-12 чанков РАДИУСОМ (!) (зависит от нагрузки сервера в данный момент) работают на 100%.

Центральный чанк (тот, в котором игрок — работает на 100% — аналогичен красной зоне.
Чанки вокруг игрока (зеленая зона) в кол-ве, указанном в настройках сервера (ниже написано — сколько и на каком) — работают так же на 100% (аналогичны красной зоне). Зеленая зона равна стольки чанкам, сколько прописано в конфигах серверах.
Чанки вне зоны действия (сиреневая зона) — отключаются совсем.
Квантум:
Если сервер нагружен — он работает на 6 чанков вокруг игрока + чанк в котором находится игрок, итого игрок прогружает зону в 13 на 13 чанков.
Если сервер средне загружен, обычно он прогружает до 8 чанков вокруг плюс чанк игрока, то есть до 17на 17.
Прогружает 6 чанков. То есть от 10 на 10. изменено 02 дек 2022
Прогружает до 10 чанков радиусом, то есть 19-20*19-20 чанков
Это прогрузка работы «тайлов» — механизмов, труб, печек, и всего такого.
entity-tracking-range (нагрузка на клиент) (отслеживание клиентом видимых энтити, не сервером! сервер их отслеживает на прогружаемые чанки) — игроки 48 блоков, животные 16 блоков, монстры 48 блоков, все остальное 64 блока.
mob-spawn-range (спавн энтить вокруг игрока) — 6 чанков радиус.
entity-activation-range (активация сервером энтить в радиусе от игрока, неактивная энтити будет пропускать тики, чтобы сохранить немношк тпсиков, работать будет — но медленее, касается только энтить): животные 10 блоков, монстры 24 блока, остальное 16 блоков
Руна:
Прогружает 8-12 чанков. То есть от 17 на 17 до 23 на 23 чанка.
Прогружает 10 чанков. То есть от 19-20*19-20 чанков вокруг игрока
ТЕС:
Всегда прогружает 12 чанков, то есть 25 на 25.
Арканар:
Всегда прогружает 8 чанков, то есть 17 на 17.
Неважно, стоите вы в этом чанке, или нет. Если вы прогружаете этот чанк и радиусом вокруг него — все они работают одинаково на 100%.
Спасибо за внимание.
—
Up От 10 июня 2018 от 25 мая 2020
Руна: 10 чанков
Квантум: 6 (слишком много различных механизмов, на эту машину больше выдавать пока не будем, на самом деле больше и не надо). Может быть позже поднимем до 8-10. Сейчас пока не ясно — онлайна и нагрузки для тестов не хватает.
—
Up от 02 дек 2022
Квантум поднято до 10 чанков
Оптимизированный подсчёт блоков в чанке
Всем здравствуйте. Есть такой вопрос: какой наиболее оптимизированный способ подсчёта определённых блоков в конкретном чанке? (И нет, не для лимитера блоков на чанк) Если что, мне нужна возможность, чтобы по 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, при переключении причудливой графики, мир рендерится снова, загружая только часть, в которой находится игрок, в течение доли секунды, кратко показывая границы фрагментов.
История
Вы можете помочь проекту, дополнив и оформив его.
Pre-classic-версия Java Edition Cave game tech test Предшественники чанков демонстрируются. Infdev-версия Java Edition 20100227 Высота карты больше не настраивается. Высота чанка изменена на 128.. Официальный выпуск Java Edition 1.2.1 12w07a Высота чанка была увеличена до 256 в рамках перехода от региона к формату. 1.10 16w20a F3 + G теперь переключает видимые границы чанков вокруг игрока. 1.14 ? Изменился способ загрузки чанка.. Интересные факты
- Полностью сгенерированный игровой мир теоретически может содержать до 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
- Список терминов
- Частота кадров
Примечания
В данной статье используются материалы из статьи «Чанки» с вики-сайта Minecraft Wiki, расположенного на Фэндоме, и они распространяются согласно лицензии Creative Commons Attribution-NonCommercial-ShareAlike 3.0. Авторы статьи.
Майнкрафт блоки и чанки
Тут есть нюанс. Высота чанка прогружается вся в не зависимости надо оно тебе или нет. Буду делать расчёт из площади 10000*10000. Округлять в большую сторону т. к. чанк частично прогрузить нельзя.
10000/16=625 чанков. Это сторона всей необходимой области которую надо прогрузить. Это если игра грузит квадратом, а не подобием окружности.
625/2~313 (312.5) чанков. Это радиус. Но я хз учитывается ли чанк в центре при указании радиуса или нет. Если не учитывается то можно один чаек отнять.
Я хз сколько ОЗУ это всё сожрёт. По мимо этого будут ещё прогружены чанки игроков. А если в этой гигантской области ещё и механизмы работающие, а если ещё и из модов то даже представить не могу какой объем это всё схавает.МертвецОракул (63160) 2 года назад
625*2=1250 всего чанков надо будет прогрузить.
МертвецОракул (63160) 2 года назадЧет тут я прощитался.
625^2=390 625 чанков.
16^2=256 площадь чанка.
390 625*256=100000000 площадь прогруженной области.
И это без учёта высоты.Остальные ответы
Деление в школе не проходили?
Денис СинюковУченик (110) 2 года назад
я очень долго считал но получается какие то заоблачные цифрыЛайт Ягами Искусственный Интеллект (280064) Денис Синюков, ну 10000*10000 это уже получается 100 миллионов блоков (если не считать в глубину), потому подгружать такой объём вряд ли будет рационально в плане памяти.