MC Toolkit

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

Слим или классика: игра читает ваш аккаунт, а инструменту приходится угадывать по 24 пикселям

Игра берёт слим или классику из настройки скина в вашем аккаунте, а не из PNG. Инструменту, получившему голый PNG, приходится угадывать по двум столбцам, которые слим-рука оставляет пустыми. Плюс полная UV-карта и почему старые скины 64×32 получают зеркальное отражение.

Ничто в PNG-файле скина не говорит «слим». Нет ни флага, ни соглашения об именах — и игра никогда не смотрит на пиксели, чтобы это выяснить. Она берёт модель из настройки model, которую ваш аккаунт привязывает к скину (это выбор, который вы делаете при загрузке), а профиль без скина получает один из 18 стандартных скинов, 9 слим и 9 классических, выбранный по его UUID.

Только инструменту, получившему голый PNG — редактору, сборщику паков, просмотрщику — приходится определять модель самому, и делает он это, глядя на конкретный прямоугольник 2 × 12 и считая, сколько его пикселей там действительно есть.

Проверка

sample  x 54–55, y 20–31        — 2 wide, 12 tall = 24 pixels
count   pixels with alpha > 0
slim    if fewer than 6 are opaque

Классические руки — 4 пикселя в ширину; слим-руки — 3. Грани слим-руки упакованы на один пиксель уже, поэтому боковая и задняя грани сдвигаются влево, а последние два столбца блока руки, x 54–55, остаются пустыми. На собственных стандартных скинах Mojang этот прямоугольник непрозрачен на 0 из 24 у всех девяти слим-скинов и на 24 из 24 у всех девяти классических — двадцати четырёх пикселей достаточно, чтобы определить.

Порог — 6 из 24, а не 1: четверть столбца должна быть заполнена, прежде чем он считается классическим. Этот допуск важен: слим-скин с несколькими случайными пикселями в мёртвом столбце всё ещё читается как слим, а это именно то, что нужно, потому что такие случайные пиксели почти всегда — случайность при редактировании, а не намерение.

Это также означает, что ошибка проявляется тихо. Если вы рисуете классический скин, но лишь слегка используете эти столбцы — тонкий контур, пара пикселей тени — вы можете оказаться ниже 6 и быть автоматически определённым как слим, потеряв пиксель ширины руки без всякого объяснения. Если скин в инструменте определяется как не та модель, эти столбцы — то место, куда стоит смотреть — а в игре — настройка в вашем аккаунте.

UV-карта, полностью

Каждая часть скина — это фиксированный прямоугольник, и у каждой есть слой наложения где-то ещё на листе:

частьоснованаложениесмещениеразмер
голова(8, 8)шляпа (40, 8)32 вправо8 × 8
тело(20, 20)куртка (20, 36)16 вниз8 × 12
правая рука(44, 20)рукав (44, 36)16 вниз4 × 12
правая нога(4, 20)штаны (4, 36)16 вниз4 × 12
левая рука(36, 52)рукав (52, 52)16 вправо4 × 12
левая нога(20, 52)штаны (4, 52)16 влево4 × 12

Пять из шести наложений находятся ровно в 16 пикселях от своей основы — но не в одном направлении. Три исходные части идут на 16 вниз. Левая рука и левая нога, добавленные позже и втиснутые в нижнюю половину, где под ними не было места, идут вместо этого на 16 в сторону — и в противоположных направлениях друг от друга.

Шляпа — единственная, что вообще не на 16: она на 32 вправо, в той же строке, что и голова.

Так что «наложение находится под основой» — правило, которое верно ровно для половины листа. Копирование прямоугольника основы и смещение его вниз, чтобы найти наложение, работает для тела, правой руки и правой ноги, и молча попадает не на ту часть для остальных трёх.

На слим-скине каждый прямоугольник руки шириной 4 читается как 3 в ширину. Передние грани не двигаются, но всё после них — да: боковая грань и задняя грань начинаются на один пиксель левее, а задняя грань на пиксель уже, из-за чего x 54–55 остаются пустыми.

Старый формат 64 × 32 вообще не имеет левой стороны

Скин до 1.8 — это 64 × 32: нижней половины листа просто не существует, а именно там живут левая рука и левая нога. Рисовать их не из чего.

Решение — зеркалирование: правая нога (0, 16) копируется в (16, 48), а правая рука (40, 16) — в (32, 48), обе отражаются по горизонтали. Вот почему старые скины идеально симметричны, а современные могут и не быть — асимметрия — единственное, что формат 64 × 32 не может выразить, и любой старый скин, который вы конвертируете, получает симметрию навязанной, хочет он того или нет.

Файл редактора 128 × 128 — та же раскладка, вдвое больше

Java принимает 64 × 64 или старый 64 × 32 и отвергает всё остальное. Редактор скинов Bedrock на этом сайте работает с 128 × 128 и не принимает ничего другого — но этот файл — та же UV-раскладка, нарисованная в двойном разрешении, каждая часть в удвоенных координатах Java, а не другой формат.

Стена — в инструментах, а не в раскладке. Текстурный конвейер каждой сборки редактора рассчитан на своё число, поэтому ни один не откроет файл другого, а PNG 128 × 128, переданный Java, будет отвергнут, а не показан в половинном размере. Конвертация — это механическое масштабирование в 2×, поэтому редактор скинов рассматривает эти два варианта как отдельные сборки, а не как одно полотно.

Создание аватаров →

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

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