Rigging API
Добавьте скелет (арматуру) к гуманоидной 3D-модели и привяжите сетку к нему, чтобы персонаж был готов к анимации. Чтобы применить анимации к персонажу с ригом, см. Animation API.
Rigging хорошо работает только со стандартными гуманоидными (двуногими) персонажами, имеющими четко определенную структуру конечностей и тела.
Создание задачи Rigging
Создаёт задачу Rigging для 3D-модели. При успешном выполнении задача возвращает риггованного персонажа в стандартных форматах и, опционально, базовые анимации ходьбы и бега.
Задача выполняется в фоновом режиме. О том, сколько обычно занимает выполнение задачи, см. Время обработки.
Rigging не подходит для следующих моделей:
- Сетки без текстур
- Негуманоидные ассеты
- Гуманоидные ассеты с неясной структурой конечностей и тела
Request
# Rig a model from a URL
curl https://api.meshy.ai/openapi/v1/rigging \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"model_url": "YOUR_MODEL_URL_OR_DATA_URI",
"height_meters": 1.8
}'
Response
{
"result": "018b314a-a1b5-716d-c222-2f1776f7f579"
}
Параметры
- Name
- input_task_id
- Type
- string
- Обязательный
- Description
Обязателен, если не отправлен
model_url. ID задачи, модель которой вы хотите риггировать. Meshy поддерживает текстурированные гуманоидные модели.Модель может содержать не более 380 000 треугольников (квад считается за 2), и модель с большим количеством вернёт
400. Чтобы остаться в пределах лимита, сначала выполните Remesh API сtarget_polycountне более300000, или не более150000приtopology: quad.
- Name
- model_url
- Type
- string
- Обязательный
- Description
Обязателен, если не отправлен
input_task_id. Модель для риггинга в виде публичного URL или data URI. Если отправлены оба параметра, Meshy используетinput_task_id.Модель должна быть файлом GLB (
.glb) размером не более 400 МБ по URLhttpилиhttps, или 100 МБ в виде data URI. Rigging поддерживает текстурированные гуманоидные модели.Модель может содержать не более 380 000 треугольников (квад считается за 2), и модель с большим количеством вернёт
400. Чтобы остаться в пределах лимита, сначала выполните Remesh API сtarget_polycountне более300000, или не более150000приtopology: quad.Лицо персонажа должно быть направлено вдоль оси +Z — стандартного направления «вперёд» в glTF. Для модели, повёрнутой в сторону другой оси, оценка позы завершится ошибкой.
Файл размером более 100 МБ также должен соответствовать следующим правилам:
- Он может содержать не более 10 000 000 граней. Файл с большим количеством вернёт
400. Meshy считает грани как треугольники, а сетка, нарисованная более одного раза, считается один раз за каждую копию. - Он не должен использовать сжатие Draco.
- Он может содержать не более 10 000 000 граней. Файл с большим количеством вернёт
- Name
- height_meters
- Type
- number
- по умолчанию 1.7
- Description
Примерный рост персонажа в метрах. Meshy использует это значение для более точного масштабирования и риггинга модели. Отрицательное значение вернёт
400.
- Name
- texture_image_url
- Type
- string
- ⚠ устаревший
- Description
Не указывайте, если у модели есть собственные текстуры. Без этого параметра Meshy использует текстуры, встроенные в файл
model_url, или текстуры исходной задачи. Если вы отправите этот параметр, это изображение станет единственной текстурой риггованной модели, а модель потеряет свои PBR-карты.Развёрнутая по UV базовая цветовая текстура модели в виде публичного URL или data URI. Изображение должно быть файлом PNG размером не более 20 МБ. Другой формат изображения вернёт
400.
Возвращаемое значение
Поле result ответа содержит ID новой задачи Rigging.
Режимы сбоя
- Name
400 - Bad Request- Description
Запрос не может быть выполнен. Сообщение об ошибке указывает, какая проблема была обнаружена. Например:
- Отсутствует параметр: не отправлен ни
model_url, ниinput_task_id. - Недопустимый формат модели: файл
model_urlимеет неподдерживаемое расширение. Поддерживается только.glb. - Недоступный URL: Meshy не может загрузить файл
model_url. - Слишком большой файл модели: файл
model_urlпревышает 400 МБ по URLhttpилиhttps, или превышает 100 МБ в виде data URI. - Слишком много граней: файл
model_urlпревышает 100 МБ и имеет более 10 000 000 граней. Уменьшите количество граней и отправьте файл снова. - Нечитаемый файл модели: файл
model_urlпревышает 100 МБ, и Meshy не может прочитать его заголовок. Например, это GLB-файл, сжатый с помощью Draco. - Слишком сложный заголовок модели: файл
model_urlпревышает 100 МБ, и его заголовок содержит слишком много сеток, узлов или записей для проверки. Уменьшите количество объектов в файле и отправьте его снова. - Слишком большое изображение: изображение
texture_image_urlпревышает 20 МБ. - Недопустимый формат текстуры: изображение
texture_image_urlне является файлом PNG. - Недопустимая высота:
height_metersимеет отрицательное значение. - Недопустимая исходная задача:
input_task_idне ссылается на действительную задачу API. - Исходная задача не готова: задача
input_task_idещё не достигла статусаSUCCEEDED. Дождитесь успешного завершения, затем повторите попытку. - Превышено количество граней: исходная модель содержит более 380 000 треугольников (квад считается за 2). Перед риггингом модели выполните Remesh API с
target_polycountне более300000, или не более150000приtopology: quad.
Исправьте запрос и отправьте его снова. См. Ошибки.
- Отсутствует параметр: не отправлен ни
- Name
401 - Unauthorized- Description
API-ключ отсутствует или недействителен. Проверьте заголовок
Authorization.
- Name
402 - Payment Required- Description
Например:
- Недостаточно кредитов: на аккаунте недостаточно кредитов для этой задачи, или аккаунт достиг лимита кредитов. Проверьте баланс кредитов и повторите попытку.
- Бесплатный план: для создания задачи требуется платный план. Обновите свой план в настройках подписки, затем повторите попытку.
- Name
403 - Forbidden- Description
input_task_id— это модель барельефа, которую данный эндпоинт не может риггировать. Сообщение:This model type does not support this operation. Отправьте другую модель.
- Name
404 - Not Found- Description
Meshy не может найти файлы задачи
input_task_id. Применимо одно из следующего:- Meshy удалила файлы задачи после наступления
expires_at. Создайте задачу заново и отправьте ID этой задачи. - У задачи нет ни одного из файлов, необходимых для риггинга, например превью-изображения — например, задачи Convert. Выполните риггинг задачи, из которой она получена, либо отправьте модель как
model_url.
- Meshy удалила файлы задачи после наступления
- Name
422 - Unprocessable Entity- Description
Не удалось выполнить оценку позы. Возможно, модель не является корректным гуманоидным персонажем. Отправьте модель гуманоидного персонажа. Для
model_urlтакже убедитесь, что персонаж повёрнут лицом по оси +Z.
- Name
429 - Too Many Requests- Description
Вы превысили ограничение частоты. Подождите и повторите попытку. См. Ограничения частоты.
Получить задачу риггинга
Возвращает задачу риггинга по её ID.
Request
curl https://api.meshy.ai/openapi/v1/rigging/018b314a-a1b5-716d-c222-2f1776f7f579 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
{
"id": "018b314a-a1b5-716d-c222-2f1776f7f579",
"type": "rig",
"status": "SUCCEEDED",
"created_at": 1747032400453,
"progress": 100,
"started_at": 1747032401314,
"finished_at": 1747032418417,
"expires_at": 1747291618417,
"task_error": null,
"consumed_credits": 5,
"result": {
"rigged_character_fbx_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Character_output.fbx?Expires=...",
"rigged_character_glb_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Character_output.glb?Expires=...",
"basic_animations": {
"walking_glb_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Walking_withSkin.glb?Expires=...",
"walking_fbx_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Walking_withSkin.fbx?Expires=...",
"walking_armature_glb_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Walking_withSkin_armature.glb?Expires=...",
"running_glb_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Running_withSkin.glb?Expires=...",
"running_fbx_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Running_withSkin.fbx?Expires=...",
"running_armature_glb_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Running_withSkin_armature.glb?Expires=..."
}
}
}
Удаление задачи риггинга
Безвозвратно удаляет задачу риггинга, включая её модели и данные. Отменить удаление невозможно.
Request
curl --request DELETE \
--url https://api.meshy.ai/openapi/v1/rigging/018b314a-a1b5-716d-c222-2f1776f7f579 \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response
// 200 OK on success, with an empty body.
//
// 409 Conflict when the task is IN_PROGRESS. The task keeps running:
{
"message": "Task is IN_PROGRESS and cannot be deleted. Credits for a task the worker has already started are not refundable; wait for it to reach SUCCEEDED, FAILED or CANCELED, then delete it."
}
Параметры пути
- Name
- id
- Type
- path
- Description
ID задачи, которую нужно удалить.
Статус задачи
Удаление задачи со статусом PENDING возвращает кредиты, потраченные при её создании.
Задачу со статусом IN_PROGRESS удалить нельзя. Запрос вернёт 409 Conflict,
а задача продолжит выполняться. Meshy не возвращает кредиты за задачу, которая уже начала
выполняться, поэтому её удаление обошлось бы вам одновременно и в кредиты, и в результат.
Дождитесь, пока она перейдёт в статус SUCCEEDED, FAILED или CANCELED, и только после
этого удаляйте её.
Удаление задачи в финальном статусе (SUCCEEDED, FAILED или CANCELED)
не возвращает потраченные кредиты.
Возвращаемые значения
200 OK, когда задача удалена, или 409 Conflict, когда задача имеет статус
IN_PROGRESS.
Список задач Rigging
Возвращает постраничный список ваших задач Rigging, сначала новые. Для постраничной навигации по списку используйте page_num и page_size.
Задачи, созданные через API, остаются в API и не отображаются в разделе My Assets веб-приложения. Чтобы найти задачу, ID которой у вас больше нет, используйте этот эндпоинт.
Request
curl "https://api.meshy.ai/openapi/v1/rigging?page_num=1&page_size=20" \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Потоковая передача задачи риггинга
Передаёт обновления задачи риггинга в виде событий Server-Sent Events (SSE).
Request
curl -N https://api.meshy.ai/openapi/v1/rigging/018b314a-a1b5-716d-c222-2f1776f7f579/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Response Stream
// Error event example
event: error
data: {
"status_code": 404,
"message": "Task not found"
}
// Message event examples illustrate task progress.
// These examples are shortened. Each event holds the full task object.
event: message
data: {
"id": "018b314a-a1b5-716d-c222-2f1776f7f579",
"progress": 0,
"status": "PENDING"
}
event: message
data: {
"id": "018b314a-a1b5-716d-c222-2f1776f7f579",
"progress": 50,
"status": "IN_PROGRESS"
}
event: message
data: { // Example of a SUCCEEDED task event, with the same fields as the Rigging task object
"id": "018b314a-a1b5-716d-c222-2f1776f7f579",
"type": "rig",
"status": "SUCCEEDED",
"created_at": 1747032400453,
"progress": 100,
"started_at": 1747032401314,
"finished_at": 1747032418417,
"expires_at": 1747291618417,
"task_error": null,
"consumed_credits": 5,
"result": {
"rigged_character_fbx_url": "https://assets.meshy.ai/.../Character_output.fbx?...",
"rigged_character_glb_url": "https://assets.meshy.ai/.../Character_output.glb?...",
"basic_animations": {
"walking_glb_url": "https://assets.meshy.ai/.../Animation_Walking_withSkin.glb?...",
"walking_fbx_url": "https://assets.meshy.ai/.../Animation_Walking_withSkin.fbx?...",
"walking_armature_glb_url": "https://assets.meshy.ai/.../Animation_Walking_withSkin_armature.glb?...",
"running_glb_url": "https://assets.meshy.ai/.../Animation_Running_withSkin.glb?...",
"running_fbx_url": "https://assets.meshy.ai/.../Animation_Running_withSkin.fbx?...",
"running_armature_glb_url": "https://assets.meshy.ai/.../Animation_Running_withSkin_armature.glb?..."
}
}
}
Параметры
- Name
- id
- Type
- path
- Description
ID задачи из ответа на создание.
Возвращает
Поток объектов задачи риггинга в виде событий Server-Sent Events.
Каждое событие содержит полный объект задачи — в той же форме, что возвращает эндпоинт Get. Пока задача имеет статус PENDING или IN_PROGRESS, поля результата ещё не заполнены значениями.
Объект задачи риггинга
Объект задачи риггинга описывает риггинг одного персонажа. Он содержит статус, progress и выходные файлы, когда задача завершается успешно.
Свойства
Example Rigging Task Object
{
"id": "018b314a-a1b5-716d-c222-2f1776f7f579",
"type": "rig",
"status": "SUCCEEDED",
"created_at": 1747032400453,
"progress": 100,
"started_at": 1747032401314,
"finished_at": 1747032418417,
"expires_at": 1747291618417,
"task_error": null,
"consumed_credits": 5,
"result": {
"rigged_character_fbx_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Character_output.fbx?Expires=...",
"rigged_character_glb_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Character_output.glb?Expires=...",
"basic_animations": {
"walking_glb_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Walking_withSkin.glb?Expires=...",
"walking_fbx_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Walking_withSkin.fbx?Expires=...",
"walking_armature_glb_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Walking_withSkin_armature.glb?Expires=...",
"running_glb_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Running_withSkin.glb?Expires=...",
"running_fbx_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Running_withSkin.fbx?Expires=...",
"running_armature_glb_url": "https://assets.meshy.ai/0630d47c-84b8-4d37-bc02-69e45d9272c1/tasks/018b314a-a1b5-716d-c222-2f1776f7f579/output/Animation_Running_withSkin_armature.glb?Expires=..."
}
}
}
- Name
- id
- Type
- string
- Description
ID задачи. Рассматривайте его как непрозрачную строку и не полагайтесь на её формат.
- Name
- type
- Type
- string
- Description
Тип задачи, всегда
rig.
- Name
- status
- Type
- string
- Description
Статус задачи, один из
PENDING,IN_PROGRESS,SUCCEEDED,FAILEDилиCANCELED.
- Name
- progress
- Type
- integer
- Description
Какая часть задачи выполнена, в процентах. Равно
0, пока задача не началась, и100, когда она завершена успешно.
- Name
- created_at
- Type
- timestamp
- Description
Время создания задачи, в миллисекундах Unix.
- Name
- started_at
- Type
- timestamp
- Description
Время начала задачи, в миллисекундах Unix. Равно
0, пока задача не началась.
- Name
- finished_at
- Type
- timestamp
- Description
Время завершения задачи, в миллисекундах Unix. Равно
0, пока задача не завершена.
- Name
- expires_at
- Type
- timestamp
- Description
Время истечения срока действия файлов результата задачи, в миллисекундах Unix. После этого времени Meshy может удалить файлы.
- Name
- task_error
- Type
- object
- Description
Детали ошибки, если задача завершилась неудачно. Равно
null, если статус неFAILED. См. Ошибки.
- Name
- consumed_credits
- Type
- integer
- Description
Количество кредитов, использованных задачей. Присутствует, когда статус
PENDING,IN_PROGRESSилиSUCCEEDED. Равно0для задачи со статусомFAILED, так как Meshy возвращает кредиты, если задача завершается неудачно.
- Name
- result
- Type
- object
- Description
URL-адреса выходных файлов. Пока задача не завершена успешно, каждый URL — пустая строка, а
basic_animationsравноnull.- Name
rigged_character_fbx_url- Type
- string
- Description
URL для скачивания риггированного персонажа в виде файла FBX.
- Name
rigged_character_glb_url- Type
- string
- Description
URL для скачивания риггированного персонажа в виде файла GLB.
- Name
basic_animations- Type
- object (optional)
- Description
URL-адреса для скачивания стандартных анимаций ходьбы и бега.
- Name
walking_glb_url- Type
- string
- Description
- Анимация ходьбы с кожей (skin), в виде файла GLB.
- Name
walking_fbx_url- Type
- string
- Description
- Анимация ходьбы с кожей (skin), в виде файла FBX.
- Name
walking_armature_glb_url- Type
- string
- Description
- Арматура анимации ходьбы, в виде файла GLB.
- Name
running_glb_url- Type
- string
- Description
- Анимация бега с кожей (skin), в виде файла GLB.
- Name
running_fbx_url- Type
- string
- Description
- Анимация бега с кожей (skin), в виде файла FBX.
- Name
running_armature_glb_url- Type
- string
- Description
- Арматура анимации бега, в виде файла GLB.
- Name
- preceding_tasks
- Type
- integer
- Description
Количество задач перед этой в очереди. Значение имеет смысл только пока задача находится в статусе
PENDING. Поле отсутствует, если значение равно0.