Rigging API
Dodaj szkielet (armaturę) do humanoidalnego modelu 3D i powiąż siatkę z nim, aby postać była gotowa do animacji. Aby zastosować animacje do postaci po riggingu, zobacz Animation API.
Rigging działa dobrze tylko w przypadku standardowych postaci humanoidalnych (dwunożnych), które mają wyraźnie zdefiniowaną strukturę kończyn i ciała.
Utwórz zadanie Rigging
Tworzy zadanie Rigging dla modelu 3D. Gdy zadanie zakończy się sukcesem, zwraca rigowaną postać w standardowych formatach oraz, opcjonalnie, podstawowe animacje chodzenia i biegania.
Zadanie jest wykonywane w tle. Informacje o typowym czasie trwania zadania znajdziesz w sekcji Czasy przetwarzania.
Rigging nie nadaje się do tych modeli:
- Siatek bez tekstur
- Zasobów innych niż humanoidalne
- Zasobów humanoidalnych o niejasnej strukturze kończyn i ciała
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"
}
Parametry
- Name
- input_task_id
- Type
- string
- Wymagane
- Description
Wymagane, chyba że wyślesz
model_url. ID zadania, którego model chcesz rigować. Meshy obsługuje teksturowane modele humanoidalne.Model może mieć maksymalnie 380 000 trójkątów (czworokąt liczy się jako 2), a model z większą liczbą zwraca
400. Aby nie przekroczyć tego limitu, uruchom na nim najpierw Remesh API ztarget_polycountrównym300000lub mniej, albo150000lub mniej przytopology: quad.
- Name
- model_url
- Type
- string
- Wymagane
- Description
Wymagane, chyba że wyślesz
input_task_id. Model do rigowania, jako publiczny URL lub Data URI. Jeśli wyślesz oba, Meshy użyjeinput_task_id.Model musi być plikiem GLB (
.glb) o rozmiarze maksymalnie 400 MB z adresu URLhttplubhttps, albo 100 MB jako Data URI. Rigging obsługuje teksturowane modele humanoidalne.Model może mieć maksymalnie 380 000 trójkątów (czworokąt liczy się jako 2), a model z większą liczbą zwraca
400. Aby nie przekroczyć tego limitu, uruchom na nim najpierw Remesh API ztarget_polycountrównym300000lub mniej, albo150000lub mniej przytopology: quad.Twarz postaci musi być skierowana w kierunku osi +Z, czyli standardowego kierunku „do przodu” w glTF. Estymacja pozy zawiedzie w przypadku modelu zwróconego w innej osi.
Plik większy niż 100 MB musi dodatkowo spełniać te zasady:
- Może mieć maksymalnie 10 000 000 ścian. Plik z większą liczbą zwraca
400. Meshy liczy ściany jako trójkąty, a siatka narysowana więcej niż raz liczy się raz na każdą kopię. - Nie może używać kompresji Draco.
- Może mieć maksymalnie 10 000 000 ścian. Plik z większą liczbą zwraca
- Name
- height_meters
- Type
- number
- domyślne 1.7
- Description
Przybliżona wysokość postaci w metrach. Meshy wykorzystuje tę wartość, aby dokładniej przeskalować i rigować model. Wartość ujemna zwraca
400.
- Name
- texture_image_url
- Type
- string
- ⚠ przestarzałe
- Description
Pomiń ten parametr, jeśli model ma własne tekstury. Bez niego Meshy użyje tekstur osadzonych w pliku
model_urllub tekstur zadania wejściowego. Jeśli go wyślesz, ten obraz stanie się jedyną teksturą rigowanego modelu, a model utraci swoje mapy PBR.Rozwinięta w UV tekstura koloru bazowego modelu, jako publiczny URL lub Data URI. Obraz musi być plikiem PNG o rozmiarze maksymalnie 20 MB. Inny format obrazu zwraca
400.
Zwracane dane
Pole result w odpowiedzi zawiera ID nowego zadania Rigging.
Tryby niepowodzenia
- Name
400 - Bad Request- Description
Żądanie nie może zostać wykonane. Komunikat o błędzie wskazuje, jaki problem wykryto. Na przykład:
- Brakujący parametr: Nie wysłano ani
model_url, aniinput_task_id. - Nieprawidłowy format modelu: Plik
model_urlma nieobsługiwane rozszerzenie. Obsługiwane jest wyłącznie.glb. - Nieosiągalny URL: Meshy nie może pobrać pliku
model_url. - Plik modelu zbyt duży: Plik
model_urlprzekracza 400 MB z adresu URLhttplubhttps, albo przekracza 100 MB jako Data URI. - Zbyt wiele ścian: Plik
model_urlprzekracza 100 MB i ma więcej niż 10 000 000 ścian. Zmniejsz liczbę ścian, a następnie wyślij plik ponownie. - Nieodczytywalny plik modelu: Plik
model_urlprzekracza 100 MB, a Meshy nie może odczytać jego nagłówka. Na przykład jest to plik GLB skompresowany Draco. - Nagłówek modelu zbyt złożony: Plik
model_urlprzekracza 100 MB, a jego nagłówek zawiera zbyt wiele siatek, węzłów lub rekordów do sprawdzenia. Zmniejsz liczbę obiektów w pliku, a następnie wyślij go ponownie. - Obraz zbyt duży: Obraz
texture_image_urlprzekracza 20 MB. - Nieprawidłowy format tekstury: Obraz
texture_image_urlnie jest plikiem PNG. - Nieprawidłowa wysokość:
height_metersjest ujemne. - Nieprawidłowe zadanie wejściowe:
input_task_idnie odnosi się do prawidłowego zadania API. - Zadanie wejściowe nie jest gotowe: Zadanie
input_task_idnie osiągnęło statusuSUCCEEDED. Poczekaj, aż się powiedzie, a następnie spróbuj ponownie. - Przekroczona liczba ścian: Model wejściowy ma więcej niż 380 000 trójkątów (czworokąt liczy się jako 2). Uruchom na nim Remesh API z
target_polycountrównym300000lub mniej, albo150000lub mniej przytopology: quad, zanim zrigujesz model.
Popraw żądanie, a następnie wyślij je ponownie. Zobacz Błędy.
- Brakujący parametr: Nie wysłano ani
- Name
401 - Unauthorized- Description
Brak klucza API lub jest on nieprawidłowy. Sprawdź nagłówek
Authorization.
- Name
402 - Payment Required- Description
Na przykład:
- Niewystarczające kredyty: Konto nie ma wystarczającej liczby kredytów na to zadanie lub konto osiągnęło limit kredytów. Sprawdź saldo kredytów, a następnie spróbuj ponownie.
- Plan darmowy: Utworzenie zadania wymaga płatnego planu. Uaktualnij swój plan w ustawieniach subskrypcji, a następnie spróbuj ponownie.
- Name
403 - Forbidden- Description
input_task_idto model płaskorzeźby (bas-relief), którego ten punkt końcowy nie może zrigować. Komunikat brzmiThis model type does not support this operation. Wyślij inny model.
- Name
404 - Not Found- Description
Meshy nie może znaleźć plików zadania
input_task_id. Zastosowanie ma jedno z poniższych:- Meshy usunęło pliki zadania po upływie jego
expires_at. Utwórz zadanie ponownie, a następnie wyślij ID tego zadania. - Zadanie nie ma żadnego z plików potrzebnych do riggingu, np. obrazu podglądu, na przykład zadanie Convert. Zrigguj zadanie, z którego ten model pochodzi, albo wyślij model jako
model_url.
- Meshy usunęło pliki zadania po upływie jego
- Name
422 - Unprocessable Entity- Description
Estymacja pozy nie powiodła się. Model może nie być prawidłową postacią humanoidalną. Wyślij model postaci humanoidalnej. W przypadku
model_urlsprawdź też, czy postać jest zwrócona w kierunku osi +Z.
- Name
429 - Too Many Requests- Description
Przekroczono limit szybkości. Poczekaj, a następnie spróbuj ponownie. Zobacz Limity szybkości.
Pobierz zadanie Rigging
Zwraca zadanie Rigging na podstawie jego 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=..."
}
}
}
Parametry
- Name
- id
- Type
- path
- Description
ID zadania z odpowiedzi tworzącej zadanie.
Zwraca
Usuń zadanie Rigging
Trwale usuwa zadanie Rigging, wraz z jego modelami i danymi. Nie można cofnąć usunięcia.
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."
}
Parametry ścieżki
- Name
- id
- Type
- path
- Description
ID zadania do usunięcia.
Status zadania
Usunięcie zadania o statusie PENDING zwraca kredyty wykorzystane podczas jego tworzenia.
Zadania o statusie IN_PROGRESS nie można usunąć. Żądanie zwraca 409 Conflict,
a zadanie nadal się wykonuje. Meshy nie zwraca kredytów za zadanie, które już się rozpoczęło,
więc usunięcie go kosztowałoby Cię zarówno kredyty, jak i wynik. Poczekaj, aż
osiągnie status SUCCEEDED, FAILED lub CANCELED, a następnie je usuń.
Usunięcie zadania w statusie końcowym (SUCCEEDED, FAILED lub CANCELED)
nie powoduje zwrotu kredytów.
Zwraca
200 OK gdy zadanie zostało usunięte, lub 409 Conflict gdy zadanie ma
status IN_PROGRESS.
Lista zadań Rigging
Zwraca podzieloną na strony listę Twoich zadań Rigging, od najnowszych. Aby przeglądać listę strona po stronie, użyj page_num i page_size.
Zadania utworzone za pomocą API pozostają w API i nie pojawiają się w My Assets w aplikacji webowej. Aby znaleźć zadanie, którego ID już nie posiadasz, użyj tego punktu końcowego.
Request
curl "https://api.meshy.ai/openapi/v1/rigging?page_num=1&page_size=20" \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Przesyłaj strumieniowo zadanie Riggingu
Przesyła strumieniowo aktualizacje zadania Riggingu jako 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?..."
}
}
}
Parametry
- Name
- id
- Type
- path
- Description
ID zadania z odpowiedzi na żądanie utworzenia.
Zwraca
Strumień obiektów zadania Riggingu w postaci Server-Sent Events.
Każde zdarzenie zawiera pełny obiekt zadania, w tej samej postaci, jaką zwraca punkt końcowy Get. Gdy zadanie ma status PENDING lub IN_PROGRESS, jego pola wynikowe nie mają jeszcze wartości.
Obiekt zadania Rigging
Obiekt zadania Rigging opisuje rigging jednej postaci. Zawiera status, progress oraz pliki wyjściowe, gdy zadanie zakończy się powodzeniem.
Właściwości
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 zadania. Traktuj je jako nieprzezroczysty ciąg znaków i nie polegaj na jego formacie.
- Name
- type
- Type
- string
- Description
Typ zadania, zawsze
rig.
- Name
- status
- Type
- string
- Description
Status zadania, jeden z
PENDING,IN_PROGRESS,SUCCEEDED,FAILEDlubCANCELED.
- Name
- progress
- Type
- integer
- Description
Jaka część zadania została ukończona, wyrażona w procentach. Wynosi
0, dopóki zadanie się nie rozpocznie, i100, gdy zakończy się powodzeniem.
- Name
- created_at
- Type
- timestamp
- Description
Czas utworzenia zadania, w milisekundach Unix.
- Name
- started_at
- Type
- timestamp
- Description
Czas rozpoczęcia zadania, w milisekundach Unix. Wynosi
0, dopóki zadanie się nie rozpocznie.
- Name
- finished_at
- Type
- timestamp
- Description
Czas zakończenia zadania, w milisekundach Unix. Wynosi
0, dopóki zadanie się nie zakończy.
- Name
- expires_at
- Type
- timestamp
- Description
Czas wygaśnięcia plików wynikowych zadania, w milisekundach Unix. Po tym czasie Meshy może usunąć te pliki.
- Name
- task_error
- Type
- object
- Description
Szczegóły błędu, gdy zadanie zakończy się niepowodzeniem. Jest
null, chyba że status toFAILED. Zobacz Błędy.
- Name
- consumed_credits
- Type
- integer
- Description
Liczba kredytów zużytych przez zadanie. Obecne, gdy status to
PENDING,IN_PROGRESSlubSUCCEEDED. Dla zadaniaFAILEDwynosi0, ponieważ Meshy zwraca kredyty, gdy zadanie kończy się niepowodzeniem.
- Name
- result
- Type
- object
- Description
Adresy URL plików wyjściowych. Dopóki zadanie nie zakończy się powodzeniem, każdy adres URL jest pustym ciągiem znaków, a
basic_animationsma wartośćnull.- Name
rigged_character_fbx_url- Type
- string
- Description
Adres URL do pobrania zriggowanej postaci jako pliku FBX.
- Name
rigged_character_glb_url- Type
- string
- Description
Adres URL do pobrania zriggowanej postaci jako pliku GLB.
- Name
basic_animations- Type
- object (optional)
- Description
Adresy URL do pobrania domyślnych animacji chodzenia i biegania.
- Name
walking_glb_url- Type
- string
- Description
- Animacja chodzenia ze skórą, jako plik GLB.
- Name
walking_fbx_url- Type
- string
- Description
- Animacja chodzenia ze skórą, jako plik FBX.
- Name
walking_armature_glb_url- Type
- string
- Description
- Armatura animacji chodzenia, jako plik GLB.
- Name
running_glb_url- Type
- string
- Description
- Animacja biegania ze skórą, jako plik GLB.
- Name
running_fbx_url- Type
- string
- Description
- Animacja biegania ze skórą, jako plik FBX.
- Name
running_armature_glb_url- Type
- string
- Description
- Armatura animacji biegania, jako plik GLB.
- Name
- preceding_tasks
- Type
- integer
- Description
Liczba zadań znajdujących się przed tym zadaniem w kolejce. Wartość ta ma znaczenie tylko wtedy, gdy zadanie ma status
PENDING. Pole jest pomijane, gdy wartość wynosi0.