การประเมินแอนิเมชันในไฟล์ GLB หรือ GLTF ช่วยให้คุณตรวจสอบการเคลื่อนที่ การหมุน และการสเกลของวัตถุ 3 มิติเมื่อเวลาผ่านไปโดยไม่ต้องเรนเดอร์ฉาก คุณสามารถใช้วิธีนี้เพื่อวิเคราะห์ข้อมูลแอนิเมชัน ตรวจสอบการเคลื่อนไหว หรือส่งออกการแปลงสำหรับการประมวลผลต่อไป ในบทเรียนนี้ คุณจะโหลดโมเดล GLB ที่มีแอนิเมชัน ตรวจสอบคลิปของมัน ประเมินห้าช่วงเวลา และส่งออกการแปลงของโหนดเป็นไฟล์ CSV.

โหลดและประเมินการเคลื่อนไหว GLB ใน Python

คลิปแอนิเมชันประกอบด้วยข้อมูลแอนิเมชันที่เชื่อมโยงกับฉาก เวลาเริ่มต้นและเวลาสิ้นสุดของมันกำหนดช่วงเวลาที่คุณสามารถประเมินได้ ขั้นตอนการทำงานคือโหลดโมเดล, เลือกคลิปแอนิเมชัน, นำไปใช้ในเวลาที่กำหนด, ตรวจสอบโหนดของฉาก, และส่งออกการแปลงของพวกมัน.

ติดตั้ง Aspose.3D for Python via .NET

ติดตั้ง Aspose.3D for Python via .NET, ซึ่งให้ API การประเมินค่าแอนิเมชันที่ใช้ที่นี่:

pip install aspose-3d==26.10.0

ดูเอกสารการติดตั้งที่ เอกสารการติดตั้ง สำหรับรายละเอียดเพิ่มเติม.

ประเมินการเคลื่อนไหวและส่งออกการแปลงโหนด

ตัวอย่างโค้ดต่อไปนี้ทำการประเมินคลิปแอนิเมชันแรกที่ห้าช่วงเวลาเท่า ๆ กันและบันทึกการแปลตำแหน่ง การหมุน และการสเกลแบบโลคัลของแต่ละโหนดใน animation_transforms.csv.

import csv
import aspose.threed as a3d

INPUT_FILE = "animated_model.glb"
OUTPUT_FILE = "animation_transforms.csv"
FRAME_COUNT = 5

def get_nodes(root):
    """Recursively collect all nodes in the scene."""
    nodes = [root]

for child in root.child_nodes:
        nodes.extend(get_nodes(child))

return nodes

# Load the animated model
scene = a3d.Scene.from_file(INPUT_FILE)

# Retrieve animation clips
clips = list(scene.animation_clips)

if not clips:
    raise RuntimeError("No animation clips found.")

print(f"Found {len(clips)} animation clip(s).")

for i, item in enumerate(clips):
    print(
        f"{i}: {item.name} "
        f"({item.start:.3f} to {item.stop:.3f} seconds)"
    )

# Select the first clip and collect scene nodes
clip = clips[0]
nodes = get_nodes(scene.root_node)

print(f"\nEvaluating: {clip.name}")
print(f"Scene nodes: {len(nodes)}")

records = []

for i in range(FRAME_COUNT):
    time = float(
        clip.start +
        (clip.stop - clip.start) * i / (FRAME_COUNT - 1)
    )

# Apply animation at the requested time
    clip.apply_to(time)

print(f"\nTimestamp: {time:.3f}s")

for index, node in enumerate(nodes):
        transform = node.transform

translation = str(transform.translation)
        rotation = str(transform.rotation)
        scaling = str(transform.scaling)

records.append([
            time,
            index,
            node.name or "(unnamed)",
            translation,
            rotation,
            scaling
        ])

print(
            f"  {node.name or '(unnamed)'}: "
            f"position={translation}, "
            f"rotation={rotation}"
        )

# Write evaluated transformations to CSV
with open(
    OUTPUT_FILE, "w", newline="", encoding="utf-8"
) as file:
    writer = csv.writer(file)

writer.writerow([
        "Time",
        "Node Index",
        "Node Name",
        "Translation",
        "Rotation",
        "Scaling"
    ])

writer.writerows(records)

print(f"\nSaved animation data to {OUTPUT_FILE}")

วิธีการประเมินการเคลื่อนไหวทำงาน

โหลดฉาก GLB และดึงคลิปของมัน

Scene.from_file() โหลดโมเดล GLB หรือ GLTF. คอลเลกชัน scene.animation_clips ให้คลิปที่มีอยู่:

scene = a3d.Scene.from_file("animated_model.glb")
clips = list(scene.animation_clips)

แต่ละคลิปเปิดเผยชื่อและช่วงเวลาเป็นวินาทีผ่าน name, start และ stop. ดู AnimationClip API reference.

ใช้การเคลื่อนไหวในช่วงเวลาที่กำหนด

การดำเนินการหลักคือ clip.apply_to(time) สำหรับคลิปตัวอย่างที่มีระยะเวลาประมาณ 3.708 วินาที มีห้าช่วงเวลา:

ตัวอย่างเวลา (วินาที)
10.000
20.927
31.854
42.781
53.708

คุณสามารถเปลี่ยน FRAME_COUNT เพื่อเก็บตัวอย่างเพิ่มเติมได้ ตัวอย่างเหล่านี้เป็นสถานะการประเมินแอนิเมชัน ไม่ใช่เฟรมภาพที่เรนเดอร์

อ่านการแปล, การหมุน, และการปรับขนาด

หลังจากใช้คลิปแล้ว สคริปต์จะวนผ่านโหนดของฉากทั้งหมดและอ่าน:

  • transform.translation: ตำแหน่งท้องถิ่นของโหนด
  • transform.rotation: การหมุนท้องถิ่นของโหนด
  • transform.scaling: ขนาดท้องถิ่นของโหนด

เหล่านี้คือ การแปลงเชิงท้องถิ่น, ไม่จำเป็นต้องเป็นพิกัดในพื้นที่โลก. การแปลงของโหนดพาเรนต์ยังส่งผลต่อตำแหน่งสุดท้ายของโหนดในฉากด้วย. โหนดที่ไม่มีการเคลื่อนไหวสามารถคงค่าที่เหมือนกันได้ในทุกช่วงเวลา.

ผลลัพธ์ CSV จากการทำแอนิเมชัน

สคริปต์สร้าง animation_transforms.csv. สำหรับตัวอย่างที่ให้มา คอนโซลเริ่มต้นด้วย:

Found 1 animation clip(s).
0: Animation_1 (0.000 to 3.708 seconds)

Evaluating: Animation_1

CSV มีหนึ่งแถวต่อโหนดฉากในแต่ละเวลาที่สุ่มตัวอย่างและมีคอลัมน์เหล่านี้:

ColumnDescription
เวลาเวลาประเมินเป็นวินาที
ดัชนีโหนดดัชนีของโหนดในการท่องวนแบบเรียกซ้ำ
ชื่อโหนดชื่อของโหนดฉาก
การแปลตำแหน่งท้องถิ่นที่เวลานั้น
การหมุนการหมุนท้องถิ่นที่เวลานั้น
การปรับขนาดสเกลท้องถิ่นที่เวลานั้น

คุณสามารถเปิดไฟล์ CSV ในแอปพลิเคชันสเปรดชีตหรือวิเคราะห์ด้วย Python เพื่อเปรียบเทียบการแปลงต่าง ๆ ตลอดคลิป

สิ่งที่ควรตรวจสอบเมื่อประเมินการเคลื่อนไหว

หลายคลิป. ตัวอย่างนี้ประเมินค่า clips[0]. เพื่อประเมินแอนิเมชันอื่น ให้เลือกดัชนีที่แตกต่างหรือดึงคลิปตามชื่อโดยใช้ scene.get_animation_clip(name).

ความละเอียดการสุ่มตัวอย่าง. ห้าช่วงเวลาให้ภาพรวมพื้นฐาน แต่อาจพลาดการเคลื่อนไหวที่เร็วขึ้น เพิ่ม FRAME_COUNT หรือเลือกช่วงเวลาที่เฉพาะเจาะจงเพื่อดูรายละเอียดเพิ่มเติม.

โครงกระดูกและเป้าหมายการเปลี่ยนรูป. ไม่ใช่เอฟเฟกต์การเคลื่อนไหวทั้งหมดที่ปรากฏเป็นการเปลี่ยนแปลงในการแปลตำแหน่ง การหมุน หรือการสเกลของโหนดในระดับท้องถิ่น. กระบวนการทำงาน CSV นี้ไม่สามารถจับการบิดรูปแบบโครงกระดูกหรือการเปลี่ยนรูปแบบ morph‑target ทุกประเภทได้.

การพึ่งพา GLTF. ไฟล์ .gltf ที่เป็นข้อความอาจอ้างอิงบัฟเฟอร์และเทกเจอร์ภายนอก. เก็บไฟล์เหล่านั้นไว้ที่เส้นทางสัมพันธ์ที่คาดหวัง.

การประเมินแอนิเมชัน GLB จำเป็นต้องใช้ GPU หรือไม่?

ตัวอย่างนี้ไม่ได้เรียก Scene.render() หรือแบ็กเอนด์การเรนเดอร์ Vulkan มันประเมินคุณสมบัติของแอนิเมชันและเขียนข้อมูล CSV แทนการสร้างภาพ การเรนเดอร์ของ Aspose.3D มี ข้อกำหนดฮาร์ดแวร์ แยกต่างหาก ซึ่งไม่ใช้กับกระบวนการทำงานแบบ CSV‑only ของตัวอย่างนี้.

รับใบอนุญาตชั่วคราวฟรี

คุณสามารถ ขอรับใบอนุญาตชั่วคราวฟรี 30 วัน เพื่อประเมิน Aspose.3D for Python via .NET โดยไม่มีข้อจำกัดการประเมินผล. เพื่อใช้ใบอนุญาตในแอปพลิเคชัน Python ของคุณ ให้ทำตาม คู่มือการให้ใบอนุญาต Aspose.3D.

แหล่งเรียนรู้ฟรี

สำรวจแหล่งข้อมูลต่อไปนี้เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการทำงานกับโมเดล 3D, แอนิเมชัน, และรูปแบบไฟล์ที่รองรับโดยใช้ Aspose.3D for Python via .NET:

  • Aspose.3D for Python Developer Guide – เรียนรู้วิธีการสร้าง โหลด แก้ไข และประมวลผลไฟล์ 3D.
  • Free Online 3D Applications – ดู แปลงรูปแบบ และประมวลผลโมเดล 3D โดยตรงในเบราว์เซอร์ของคุณ.
  • Aspose.3D Python API Reference – สำรวจคลาส วิธีการ และคุณสมบัติที่มีอยู่.
  • Aspose.3D Tutorials and Articles – ค้นหาตัวอย่างเชิงปฏิบัติและคู่มือสำหรับการทำงานกับรูปแบบไฟล์ 3D.

สรุป

Aspose.3D for Python via .NET 26.10 ให้คุณประเมินคลิปแอนิเมชัน GLB และ GLTF ในช่วงเวลาที่เลือกด้วย AnimationClip.apply_to() โดยการอ่านการแปลงของโหนดหลังการประเมินแต่ละครั้ง คุณสามารถตรวจสอบการเคลื่อนที่และส่งออกข้อมูลแอนิเมชันที่มีโครงสร้างโดยไม่ต้องเรนเดอร์โมเดล ปรับตัวอย่างเพื่อประเมินคลิปเพิ่มเติม เพิ่มความถี่การสุ่มตัวอย่าง หรือวิเคราะห์โหนดที่เลือก

อ่านเพิ่มเติม