1. GLB 생성하기
공개 이미지 URL로 이미지 작업 하나를 제출합니다. 응답은 비동기이므로 반환된 작업 ID를 보관하세요.
export TO3D_KEY='YOUR_API_KEY'
export TO3D_IMAGE_URL='https://example.com/prop-or-character.jpg'
TASK_JSON=$(curl --fail-with-body --silent --show-error \
https://api.to3d.app/api/trellis/tasks \
-H "x-api-key: $TO3D_KEY" \
-H 'Content-Type: application/json' \
-d "$(jq -cn --arg image "$TO3D_IMAGE_URL" \
'{task_type:"image-to-3d",input:{image:$image}}')")
TASK_ID=$(jq -er '.id' <<<"$TASK_JSON")폴링하고 GLB 저장하기
작업이 성공할 때까지 폴링한 뒤 `output.model_file`의 URL을 저장합니다. 폴링을 두 번째 생성 요청으로 설명하지 마세요.
curl --fail-with-body --silent --show-error \
"https://api.to3d.app/api/trellis/tasks/$TASK_ID" \
-H "x-api-key: $TO3D_KEY" | jq '{id,status,output,error}'
MODEL_URL=$(curl --fail-with-body --silent --show-error \
"https://api.to3d.app/api/trellis/tasks/$TASK_ID" \
-H "x-api-key: $TO3D_KEY" | jq -er '.output.model_file')
curl --fail --location --silent --show-error "$MODEL_URL" --output unreal-candidate.glb2. 휴머노이드 리그가 필요할 때 UE5 본 이름 요청하기
다운로드한 GLB를 공개 URL에 업로드하거나 호스팅한 뒤 독립적인 Skin Tokens 요청을 제출합니다. `/api/skin_tokens/tasks/$RIG_ID`를 폴링하고 성공 후 반환된 `output.model_file`을 다운로드하세요. 두 호출을 하나의 자동 변환으로 설명하지 마세요.
export TO3D_MODEL_URL='https://example.com/unreal-candidate.glb'
RIG_JSON=$(curl --fail-with-body --silent --show-error \
https://api.to3d.app/api/skin_tokens/tasks \
-H "x-api-key: $TO3D_KEY" \
-H 'Content-Type: application/json' \
-d "$(jq -cn --arg model "$TO3D_MODEL_URL" \
'{task_type:"rig",input:{model:$model,bone_names:"ue5"}}')")
RIG_ID=$(jq -er '.id' <<<"$RIG_JSON")
printf 'Rig task: %s\n' "$RIG_ID"3. Unreal 측 확인하기
프로젝트에서 사용하는 임포터와 플러그인으로 GLB를 임포트합니다. 에셋의 단위와 방향, 머티리얼 및 텍스처 참조, 스켈레톤 계층, 바인드 포즈, 애니메이션 또는 리타게팅 동작을 확인하세요.
- `ue5` 값은 API의 본 이름 지정 옵션입니다.
- #56에서는 Unreal 임포트나 리타게팅 승인 테스트를 수행하지 않았으므로 이 튜토리얼은 준비된 Unreal 스켈레톤, 충돌 설정, LOD 또는 게임플레이 애니메이션을 보장할 수 없습니다.
샘플을 구조 참고로 사용하기
#56에서 검사한 공개 샘플 네 개에는 스킨, 조인트, 웨이트, UV, 임베디드 PNG 텍스처가 포함되어 있었습니다. 받을 수 있는 파일 형태를 이해하는 데 사용하고 새 생성물은 매번 별도의 에셋 검토로 다루세요.
- 정적 프롭이 목적이라면 리깅 요청을 건너뛰고 스케일과 머티리얼을 검증하세요.