-
Notifications
You must be signed in to change notification settings - Fork 3
Документация
Шейп - .json файл с параметрами модели.
Файлы шейпов располагаются в папке makriva, которая в свою очередь находится в корневой папке Minecraft.
При изменении файлов шейпов, они автоматически обновляются в игре в реальном времени.
Нам понадобятся:
- Десктоп версия Blockbench
- Плагин Макривы для Блокбенча (ПКМ -> Cохранить как...)
Чтобы установить плагин, его файл (makriva.js) нужно перетащить в окно Blockbench и подтвердить.
Для экспорта шейпа нужно выбрать пункт меню File -> Export -> Export Makriva shape
Примеры проектов Blockbench и модели-шаблоны Стива: https://github.com/msifd/makriva/tree/master/blockbench.
Примеры готовых шейпов: https://github.com/msifd/makriva/tree/master/examples.
В корне проекта обязательно должны находится группы с именем части тела. К ним будут привязаны кости внутри этих групп.
Имена групп/частей тела следующие: head, body, right_arm, left_arm, right_leg, left_leg.
Группы с другими именами в корне проекта игнорируются.
Группы частей тела должны находится на определенных координатах. Любое их перемещение изменит их отступ в шейпе. Стандартные координаты можно найти в моделях Стивов в примерах или в плагине в текстовом виде.
Для скрытия части тела надо поставить галочку напротив нее на экране экспорта.
Анимации описываются с помощью рекурсивной структуры с условиями и модификаторами.
Пример структуры:
{
"BoneName.rotation": [0, "10 * sin(age / 3)", 0],
"if sneaking": {
"skeleton.head": [0, 0, -5],
"BoneName.rotation": [10, 0, 0],
"BoneName.visible": true
}
}
В данном примере анимации применяются к кости с id BoneName и к скелету головы.
BoneName будет всегда вращаться по синусоиде по оси Y, а во время наклона еще и на 10 градусов по оси X. Также во время наклона голова будет смещена по оси Z.
Поля в анимации делятся на два типа: условия и модификаторы.
Условие - это поле начинающееся со сроки "if ". Значением такого поля должен быть другой объект-анимация.
Модификатор состоит из двух частей разделенных точкой X.Y. Первая часть обычно содержит идентификатор, а вторая его свойство.
Активные модификаторы с одинаковыми именами суммируются, поэтому их можно комбинировать и друг с другом, и с значениями вне раздела анимации.
Виды модификаторов:
- Модификатор скелета. Начинается с
skeleton., а свойствами являются имена частей тела. Складывается со значениями из поляskeleton. - Модификатор кости. Идентификатор это id кости. Доступные свойства:
rotation: [number; 3],visible: bool.
Коэффициенты для настройки к самом конце - 0.3 и 0.6.
"right_arm2.rotation": [ "cos(limbSwingTick * 0.6662) * 2 * limbSwing * rad * 0.3", 0, 0 ],
"left_arm2.rotation": [ "cos(limbSwingTick * 0.6662 + pi) * 2 * limbSwing * rad * -0.3", 0, 0 ],
"right_leg2.rotation": [ "cos(limbSwingTick * 0.6662) * 1.4 * limbSwing * rad * -0.6", 0, 0 ],
"left_leg2.rotation": [ "cos(limbSwingTick * 0.6662 + pi) * 1.4 * limbSwing * rad * 0.6", 0, 0 ],
Выражения - это формулы, вычисляющие значения во время рендеринга модели.
Записываются в виде строки: 1 + 2 * 3 + sin(age).
Поддерживаемые операции:
Общие: скобки (), булевы: ! && ||, числовые: операции сравнения и арифметика + - * / %.
-
if(c: bool, a: expr, b: expr)- Если условиеcистинно, то будет возвращено выражениеa, иначеb sin(num)cos(num)-
sqrt(num)- Квадратный корень -
floor(num)- Округление вниз -
ceil(num)- Округление вверх -
clamp(x: num, min: num, max: num)- Обрезание значенияxдо пределовminиmax min(num, num)max(num, num)-
random()- Равномерно случайное значение в пределах[0, 1.0] -
time()- Время суток в дробных тиках
Константы:
-
pi- Число Пи
Значения модели персонажа:
limbSwingTick-
limbSwing- Как сильно поднимаются ноги. -
partialTicks- Дробные тики (время) -
age- Время жизни модели персонажа (в тиках) -
netHeadYaw- Рыскание головы -
headPitch- Наклон головы -
modelScale- Размер модели при рендеринге
Наличие предметов: hasMainhandItem, hasOffhandItem, hasHelmetItem, hasChestItem, hasLegsItem, hasFeetItem
Состояния: swimming, overWater, sprinting, riding, burning, onGround
Позы: standing, sneaking, sitting, sleeping, elytraFlying, crawling, hugging, dancing, waving, bowing, wagging, crying, pointing, yesPose, noPose. Важно отметить, что это переменные, а не названия поз и использовать их вне выражений, например в качестве ключа к eyeHeight, не получится.
Основные понятия:
- список - список элементов. Обозначается квадратным скобками
[]. - объект - список пар ключ-значение. Обозначается фигурными скобками
{}. - поле - ключ в объекте.
Нотация типов:
-
type- просто тип -
[type]- список типов -
[type; 3]- список типов обязательного размера (3) -
{type1, type2}- объект с ключами типа type1 и значениями type2
Типы:
-
part- Часть тела игрока. Значения:head,body,right_arm,left_arm,right_leg,left_leg -
pose- Поза игрока. Значения:stand,sneak,sit,sleep,elytraFly,crawl,hug,dance,wave,bow,wag,cry,point,yes,no -
url- Ссылка -
expr- Выражение -
animation- Анимация -
bone- Кость -
qube- Куб -
quad- Куад
{
"metadata": {string, string},
"textures": {string, url},
"textureSize": [number; 2],
"hide": [part],
"skeleton": {part, [number; 3]},
"eyeHeight": {pose, number},
"boundingBox": {pose, [number; 2]},
"modelScale": number,
"animation": {animation entries},
"bones": [bone],
"debug": {string, expr}
}
Список именованных текстур. Могут использоваться в отдельных костях. Имена skin, cape и elytra устанавливают скин, плащ и крылья соответственно. Текстуры с другими именами также могут использоваться, но ни на что более не влияют.
Регулирует размер сетки координат текстуры (UV). По-умолчанию 64x64, но при экспорте из Blockbench берется тот размер, что указан в проекте.
Скрывает указанные части тела.
Регулирует позицию каждой части тела, относительно их точки вращения по-умолчанию.
Регулирует высоту глаз для каждой позы. Значения по-умолчанию:
-
stand- 1.62 -
sneak- 1.54 -
sit- 1.62 -
sleep- 0.2 -
elytraFly- 0.4 -
crawl- 0.4
Регулирует размер кубоида персонажа - ширину и высоту, для каждой позы. Значения по-умолчанию:
-
stand- 0.6, 1.8 -
sneak- 0.6, 1.65 -
sit- 0.6, 1.8 -
sleep- 0.2, 0.2 -
elytraFly- 0.6, 0.6 -
crawl- 0.6, 0.6
Регулирует масштаб модели в целом. Позволяет делать большие модели и уменьшать их до требуемого размера.
Рекурсивная структура с динамическими модификаторами - анимациями
Список костей шейпа.
Основной структурный элемент шейпа. Каждая кость:
- Может быть привязана к части тела игрока.
- Может иметь свою текстуру.
- Может иметь сдвиг (отступ) и угол наклона по трем осям.
- Имеет кубы и куады.
- Имеет дочерние кости.
Структура:
{
"id": string,
"parent": part,
"texture": string,
"offset": [number; 3],
"rotation": [number; 3],
"cubes": [cube]
}
Кубы это кубы, а куады это плоские кубы.
Структура:
{
"uv": [number, number],
"pos": [number, number, number],
"size": [number, number, number],
"delta": number,
"mirror": boolean,
}
Список дополнительных значений:
-
model- Регулирует тип модели. Значения:default,slim.
Список выражений (значения) с названиями (значения). Если добавить выражения, то их результат будет выводиться на экране. Полезно при составлении выражений.