UV Unwrap API

UV Unwrap API สร้างเลย์เอาต์ UV คุณภาพสูงให้กับโมเดล 3D ที่มีอยู่โดยอัตโนมัติ ใช้เป็นขั้นตอนที่จำเป็นก่อนการทำเท็กซ์เจอร์ — หรือใช้เมื่อใดก็ตามที่คุณต้องการเลย์เอาต์ UV ที่สะอาดและไม่ทับซ้อนกันสำหรับเครื่องมือปลายทาง (Blender, Substance Painter, Unreal)

ผลลัพธ์ที่ได้คือ "โมเดลขาว UV" — มีรูปทรงเดียวกับโมเดลต้นฉบับ แต่มีพิกัด UV ใหม่ทั้งหมดและไม่มีเท็กซ์เจอร์จริง (มีแมททีเรียลตัวยึดสีเทาขนาด 2×2 รวมอยู่ด้วยเพื่อให้ช่องแมททีเรียลของ glTF ยังคงใช้งานได้ถูกต้อง เครื่องมือมาตรฐานทั่วไปจะถือว่านี่เป็นโมเดลที่ยังไม่ได้ใส่เท็กซ์เจอร์)


POST/openapi/v1/uv-unwrap

Create an UV Unwrap Task

เอนด์พอยต์นี้สร้างงาน UV Unwrap ใหม่

พารามิเตอร์

  • Name
    input_task_id
    Type
    string
    จำเป็น
    Description

    ID ของงาน Meshy API ที่เสร็จสมบูรณ์แล้วซึ่งมีผลลัพธ์ GLB ที่คุณต้องการทำ UV-unwrap (ตัวอย่างเช่น ผลลัพธ์จาก รูปภาพเป็น 3D, ข้อความเป็น 3D หรือรีเมช) งานต้นทางต้องมีสถานะ SUCCEEDED และต้องสร้างไฟล์ GLB แล้ว

    หากเมชต้นทางมีจำนวนหน้า (face) เกินเพดาน 40,000 หน้า คำขอจะถูกปฏิเสธด้วย 400 และคุณควรรันรีเมชก่อนเพื่อลดจำนวนโพลิกอนลง

  • Name
    model_url
    Type
    string
    จำเป็น
    Description

    ระบุโมเดล 3D โดยตรงผ่าน URL ที่เข้าถึงได้แบบสาธารณะหรือ data URI รองรับเฉพาะ .glb เท่านั้น — API จะอ่านไฟล์ glTF binary และไม่รองรับการแยกวิเคราะห์รูปแบบอื่น หากต้องการทำ UV-unwrap โมเดลในรูปแบบอื่น (.fbx, .obj, .stl, .gltf) ให้แปลงเป็น .glb ก่อนผ่าน Convert API จากนั้นส่ง ID ของงานที่ได้เป็น input_task_id หรือ URL ผลลัพธ์ GLB ของงานนั้นที่นี่

    สำหรับ Data URI ให้ใช้ MIME type application/octet-stream

    เพดาน 40,000 หน้าเดียวกันนี้ใช้กับ input_task_id ด้วย: เมชที่มีขนาดใหญ่เกินไปจะถูกปฏิเสธด้วย 400 — ให้รันรีเมชก่อน

ผลลัพธ์ที่ได้

พร็อพเพอร์ตี้ result ในการตอบกลับจะมี id ของงาน UV Unwrap ที่สร้างขึ้นใหม่

รูปแบบความล้มเหลว

  • Name
    400 - Bad Request
    Description

    คำขอไม่สามารถใช้ได้ สาเหตุที่พบบ่อย:

    • พารามิเตอร์ขาดหาย: ต้องระบุ input_task_id หรือ model_url อย่างใดอย่างหนึ่ง
    • งานอินพุตไม่ถูกต้อง: input_task_id ต้องอ้างอิงถึงงานที่สำเร็จและมีผลลัพธ์เป็น GLB
    • จำนวนหน้าเกินกำหนด: เมชต้นทางมีจำนวนหน้ามากกว่าเพดานของ UV Unwrap ให้รันรีเมชก่อน
    • รูปแบบโมเดลไม่ถูกต้อง: model_url ชี้ไปยังไฟล์ที่มีนามสกุลที่ไม่รองรับ
    • URL ไม่สามารถเข้าถึงได้: ไม่สามารถดาวน์โหลด model_url ได้
  • Name
    401 - Unauthorized
    Description

    การยืนยันตัวตนล้มเหลว โปรดตรวจสอบ API คีย์ของคุณ

  • Name
    402 - Payment Required
    Description

    เครดิตไม่เพียงพอสำหรับดำเนินงานนี้ UV Unwrap มีค่าใช้จ่าย 5 เครดิตต่อการเรียกใช้หนึ่งครั้ง

  • Name
    404 - Not Found
    Description

    ฟีเจอร์นี้ยังไม่ได้เปิดใช้งานสำหรับบัญชีของคุณ UV Unwrap ถูกจำกัดด้วย Statsig flag ในระหว่างการเปิดตัว — ติดต่อฝ่ายสนับสนุนของ Meshy หากคุณต้องการสิทธิ์เข้าถึง

  • Name
    429 - Too Many Requests
    Description

    คุณได้เกินการจำกัดอัตราที่กำหนดไว้แล้ว

Request

POST
/openapi/v1/uv-unwrap
# Chain from an existing Meshy task
curl https://api.meshy.ai/openapi/v1/uv-unwrap \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
      "input_task_id": "0193bfc5-ee4f-73f8-8525-44b398884ce9"
    }'

# Or from a publicly accessible model URL
curl https://api.meshy.ai/openapi/v1/uv-unwrap \
-X POST \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
      "model_url": "https://example.com/path/to/model.glb"
    }'

Response

{
  "result": "019361c6-9b34-7b23-bef2-d0107c4d92e2"
}

GET/openapi/v1/uv-unwrap/:id

เรียกดูงาน UV Unwrap

เอนด์พอยต์นี้ใช้เรียกดูสถานะปัจจุบันของงาน UV Unwrap ตาม ID

ผลลัพธ์ที่ได้รับ

ส่งคืน UV Unwrap Task object

Request

GET
/openapi/v1/uv-unwrap/:id
curl https://api.meshy.ai/openapi/v1/uv-unwrap/019361c6-9b34-7b23-bef2-d0107c4d92e2 \
-H "Authorization: Bearer ${YOUR_API_KEY}"

ดู ตัวอย่าง task object ด้านล่าง


DELETE/openapi/v1/uv-unwrap/:id

Delete an UV Unwrap Task

ลบงาน UV Unwrap อย่างถาวร งานและผลลัพธ์ของงานจะไม่สามารถเข้าถึงได้อีกต่อไป

งานที่ยังอยู่ในสถานะ PENDING จะถูกลบและเครดิตที่ใช้ไปตอนสร้างงาน จะถูกคืนกลับ

งานที่อยู่ในสถานะ IN_PROGRESS แล้วไม่สามารถลบได้: คำขอจะถูกปฏิเสธ ด้วย 409 Conflict และงานจะยังคงทำงานต่อไป เครดิตสำหรับงานที่ worker ได้เริ่มดำเนินการไปแล้วนั้นไม่สามารถขอคืนได้ ดังนั้นการลบงานระหว่างที่ กำลังทำงานอยู่จะทำให้คุณเสียทั้งเครดิตและผลลัพธ์ ควรรอจนกว่างานจะถึงสถานะ SUCCEEDED, FAILED หรือ CANCELED แล้วจึงค่อยลบ

งานที่อยู่ในสถานะสุดท้าย (SUCCEEDED, FAILED หรือ CANCELED) จะถูกลบ โดยไม่มีการคืนเครดิต

Request

DELETE
/openapi/v1/uv-unwrap/:id
curl https://api.meshy.ai/openapi/v1/uv-unwrap/019361c6-9b34-7b23-bef2-d0107c4d92e2 \
-X DELETE \
-H "Authorization: Bearer ${YOUR_API_KEY}"

GET/openapi/v1/uv-unwrap

List UV Unwrap Tasks

ส่งคืนรายการงาน UV Unwrap ของผู้เรียกใช้แบบแบ่งหน้า เรียงจากล่าสุดไปเก่าสุด รองรับการแบ่งหน้าแบบมาตรฐานผ่าน page_num และ page_size

Request

GET
/openapi/v1/uv-unwrap
curl "https://api.meshy.ai/openapi/v1/uv-unwrap?page_num=1&page_size=20" \
-H "Authorization: Bearer ${YOUR_API_KEY}"

GET/openapi/v1/uv-unwrap/:id/stream

สตรีมงาน UV Unwrap

สมัครรับ progress ของงานในรูปแบบ Server-Sent Events แต่ละ event message จะมี UV Unwrap Task object อยู่ด้วย สตรีมจะปิดลงเมื่องานถึงสถานะ SUCCEEDED, FAILED, หรือ CANCELED

ใช้วิธีนี้แทนการ polling GET /openapi/v1/uv-unwrap/:id เพื่อให้ได้ความหน่วงที่ต่ำลงเมื่อทำงานเสร็จสมบูรณ์

Request

GET
/openapi/v1/uv-unwrap/:id/stream
curl https://api.meshy.ai/openapi/v1/uv-unwrap/019361c6-9b34-7b23-bef2-d0107c4d92e2/stream \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-N

The UV Unwrap Task Object

  • Name
    id
    Type
    string
    Description

    ตัวระบุที่ไม่ซ้ำกันสำหรับงาน

  • Name
    type
    Type
    string
    Description

    เป็น uv-unwrap เสมอ

  • Name
    model_urls
    Type
    object
    Description

    URL สำหรับดาวน์โหลดแบบ pre-signed ของโมเดลขาว UV ที่สร้างขึ้น UV Unwrap จะคืนค่ารายการ glb เพียงรายการเดียวเสมอ — ผลลัพธ์จะคงจีออเมทรีของอินพุตไว้ สลับเป็นพิกัด UV ใหม่ และใช้แมททีเรียลสีเทาเริ่มต้นแทนที่เท็กซ์เจอร์ใดๆ

  • Name
    thumbnail_url
    Type
    string
    Description

    URL แบบ pre-signed สำหรับตัวอย่างภาพ PNG ของโมเดลขาว UV

  • Name
    progress
    Type
    integer
    Description

    progress ของงาน ตั้งแต่ 0 ถึง 100

  • Name
    status
    Type
    string
    Description

    หนึ่งในค่า PENDING, IN_PROGRESS, SUCCEEDED, FAILED, CANCELED

  • Name
    preceding_tasks
    Type
    integer
    Description

    จำนวนงานที่เข้าคิวอยู่ก่อนหน้างานนี้ จะปรากฏขณะที่ status เป็น PENDING

  • Name
    created_at
    Type
    timestamp
    Description

    ไทม์สแตมป์ของการสร้างงาน หน่วยเป็นมิลลิวินาที

  • Name
    started_at
    Type
    timestamp
    Description

    ไทม์สแตมป์ของเวลาที่เริ่มประมวลผล หน่วยเป็นมิลลิวินาที เป็น 0 จนกว่าจะเริ่ม

  • Name
    finished_at
    Type
    timestamp
    Description

    ไทม์สแตมป์ของการเสร็จสิ้น หน่วยเป็นมิลลิวินาที เป็น 0 จนกว่าจะเสร็จสิ้น

  • Name
    expires_at
    Type
    timestamp
    Description

    ไทม์สแตมป์ที่ URL ดาวน์โหลดแบบมีลายเซ็นจะหมดอายุ หน่วยเป็นมิลลิวินาที

  • Name
    task_error
    Type
    object
    Description

    รายละเอียดข้อผิดพลาดสำหรับงานที่ล้มเหลว ดู ข้อผิดพลาด สำหรับข้อมูลอ้างอิงออบเจ็กต์ task_error แบบเต็ม

  • Name
    consumed_credits
    Type
    integer
    Description

    เครดิตที่ใช้ไปกับงานนี้ จะคืนค่า 0 สำหรับงานที่ FAILED (เครดิตจะถูกคืนเมื่อล้มเหลว) UV Unwrap คิดเครดิต 5 เครดิตเมื่อสำเร็จ

Example UV Unwrap Task Object

{
  "id": "019361c6-9b34-7b23-bef2-d0107c4d92e2",
  "type": "uv-unwrap",
  "model_urls": {
    "glb": "https://assets.meshy.ai/***/tasks/019361c6-9b34-7b23-bef2-d0107c4d92e2/output/model.glb?Expires=***"
  },
  "thumbnail_url": "https://assets.meshy.ai/***/tasks/019361c6-9b34-7b23-bef2-d0107c4d92e2/output/preview.png?Expires=***",
  "progress": 100,
  "status": "SUCCEEDED",
  "preceding_tasks": 0,
  "created_at": 1716579120000,
  "started_at": 1716579122000,
  "finished_at": 1716579180000,
  "expires_at": 1716665580000,
  "task_error": {
    "message": ""
  },
  "consumed_credits": 5
}