MC Toolkit

Руководства / Строительство и ресурсы

Пиксель карты — это один байт, и два его бита отвечают за яркость

61 базовый цвет × 4 оттенка = 244 цвета из массива в 16 384 байта. Только один из четырёх оттенков — это полное значение цвета; остальные три затемнены до 86%, 71% и 53%.

Каждая заполненная карта в Minecraft занимает на диске один и тот же объём: массив colors ровно из 16 384 байт, то есть 128 × 128. Это верно и для карты размера 0, охватывающей 128 блоков, и для карты размера 4, охватывающей 2 048 блоков, — количество пикселей никогда не меняется. Всё остальное в картографии вытекает из этого одного факта.

Байт делится надвое

Каждый из этих 16 384 байт — не цвет. Это базовый цвет и оттенок, упакованные вместе:

baseColorId = colorId >> 2      // 0–63
shadeIndex  = colorId & 3       // 0–3

Итак, два младших бита — это яркость, а остальное — то, на какой блок вы смотрите. При 61 определённом базовом цвете (id 0 — это прозрачный/неисследованный слот) самый большой байт, который может хранить настоящая карта, — 61 × 4 + 3 = 247.

61 × 4 = 244 различных цвета — это вся палитра, доступная для карт-арта. Не 61 и не 256.

Только один оттенок — это полное значение цвета

Четыре множителя расположены неравномерно, и один из них равен 1.0:

индекс оттенкамножительв процентах
0180 / 25570,6%
1220 / 25586,3%
2255 / 255100%
3135 / 25552,9%

Оттенок 2 — это собственный RGB цвета карты, без масштабирования: фиксированное значение для каждого id цвета, а не выборка из текстуры блока. Остальные три — его более тёмные версии, и самый тёмный — оттенок 3 — лишь чуть выше половины яркости.

Именно поэтому ступенчатый карт-арт так сильно отличается от плоского. Плоская постройка даёт только обычный оттенок (86%), поэтому у плоской карты доступен 61 цвет. Варьируя высоту, вы открываете более светлые и более тёмные оттенки каждого блока и доходите до 183. Палитра не становится шире — новых тонов вы не получаете, — она становится втрое глубже по значению, а это именно то, что нужно для дизеринга. Четвёртый оттенок (53%) из блоков вообще никогда не получается: он существует в формате байта, и его использует только отредактированный файл карты.

Заметьте также, что порядок оттенков не монотонен: индекс 3 — самый тёмный, а не самый светлый. Если отсортировать по индексу и ожидать градиент, получите 71%, 86%, 100%, 53%.

Размер умножает площадь, но никогда — разрешение

Поле scale принимает значения 0–4, и охватываемая им местность — это 128 × 2^scale блоков по стороне:

размерохватываемых блоководин пиксель карты — это
0128 × 1281 блок
1256 × 2562 × 2 блока
2512 × 5124 × 4 блока
31 024 × 1 0248 × 8 блоков
42 048 × 2 04816 × 16 блоков — ровно один чанк

Карта размера 4 охватывает в 256 раз большую площадь, чем карта размера 0, используя те же 16 384 байта. Именно поэтому карт-арт приходится строить при размере 0: при любом другом масштабе один пиксель — это усреднение нескольких блоков, и изображение, которое вы аккуратно выложили, пересэмплируется и исчезает.

Строку с размером 4 стоит запомнить по другой причине — один пиксель там это ровно один чанк, что делает полностью приближённую карту удобной сеткой чанков.

Что это значит для повреждённого файла

Если в файле карты (data/minecraft/maps/<id>.dat в папке мира) массив colors имеет не 16 384 байта, то это не карта с недостающими пикселями: игра всё равно загружает карту, но выбрасывает пиксели и показывает её пустой. Формы с частичной длиной не существует. Массив всегда полноразмерный, а неисследованные области хранятся как id цвета 0, а не опускаются.

Извлечение карты в PNG →

Другие руководства

Смотреть все →