הערכת אנימציות בקובץ GLB או GLTF מאפשרת לך לבדוק כיצד אובייקטים תלת‑ממדיים נעים, מסתובבים ומקנים שינוי קנה מידה לאורך זמן מבלי לבצע רינדור של הסצנה. אתה יכול להשתמש בגישה זו לניתוח נתוני אנימציה, לאימות תנועות, או לייצוא טרנספורמציות לעיבוד נוסף. במדריך זה תטען מודל GLB מונפש, תבדוק את הקליפים שלו, תעריך חמש נקודות זמן, ותייצא טרנספורמציות של צמתים ל-CSV.

טעינה והערכת אנימציות GLB בפייתון

קובץ אנימציה מכיל נתוני אנימציה המשויכים לסצנה. זמני ההתחלה והסיום שלו מגדירים את התקופה שבה ניתן לבצע הערכה. זרימת העבודה היא לטעון מודל, לבחור קובץ אנימציה, ליישם אותו בזמנים ספציפיים, לבדוק את צמתות הסצנה ולייצא את ההמרות שלהן.

התקנת 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. ראה את הפנייה ל‑API של AnimationClip.

הפעל את האנימציה בזמנים ספציפיים

הפעולה המרכזית היא 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 מכיל שורה אחת לכל צומת סצנה בכל חותמת זמן מדגם והעמודות הבאות:

עמודהתיאור
זמןחותמת זמן של ההערכה בשניות
אינדקס צומתהאינדקס של הצומת במעבר הרקורסיבי
שם הצומתשם צומת הסצנה
הזזהמיקום מקומי בזמן החותמת
סיבובסיבוב מקומי בזמן החותמת
קנה מידהקנה מידה מקומי בזמן החותמת

אתה יכול לפתוח את קובץ ה‑CSV באפליקציית גיליון אלקטרוני או לנתח אותו עם Python כדי להשוות בין השינויים לאורך הקטע.

מה לבדוק בעת הערכת אנימציות

קְלִיפּים מרובים. דוגמה זו מעריכה clips[0]. כדי להעריך אנימציה אחרת, בחר אינדקס שונה או קבל קְלִיפּ לפי שם באמצעות scene.get_animation_clip(name).

רזולוציית דגימה. חמש חותמות זמן מספקות סקירה בסיסית, אך עשויות לפספס תנועה מהירה. הגדל את FRAME_COUNT או בחר זמנים ספציפיים כדי לבדוק פרטים נוספים.

שלדים ויעדי שינוי צורה. לא כל אפקטי האנימציה מופיעים כשינויים בתרגום המקומי, סיבוב או קנה מידה של צומת. תהליך העבודה של CSV זה אינו קולט כל סוג של עיוות שלד או עיוות של יעד שינוי צורה.

תלותי GLTF. קבצים מבוססי טקסט .gltf עשויים להתייחס למאגרי חיצוניים וטקסטורות. שמרו קבצים אלה בנתיבים היחסיים הצפויים שלהם.

האם הערכת אנימציות GLB דורשת GPU?

דוגמה זו אינה קוראת ל-Scene.render() או למנוע הרינדור של Vulkan. היא מעריכה את מאפייני האנימציה וכותבת נתוני CSV במקום ליצור תמונות. רינדור Aspose.3D כולל דרישות חומרה, שאינן חלות על זרימת העבודה של CSV‑only של דוגמה זו.

קבל רישיון זמני בחינם

אתה יכול לבקש רישיון זמני חינמי של 30‑יום כדי להעריך Aspose.3D for Python via .NET ללא מגבלות הערכה. כדי להחיל את הרישיון ביישום Python שלך, פעל לפי מדריך הרישוי של Aspose.3D.

משאבי למידה חינמיים

חקור את המשאבים הבאים כדי ללמוד יותר על עבודה עם מודלים תלת‑ממדיים, אנימציות ותבניות קבצים נתמכות באמצעות Aspose.3D for Python via .NET:

סיכום

Aspose.3D for Python via .NET 26.10 מאפשר לך להעריך קטעי אנימציה של GLB ו‑GLTF בזמנים נבחרים עם AnimationClip.apply_to(). על‑ידי קריאת שינויי הצמתים לאחר כל הערכה, אתה יכול לבדוק תנועה ולייצא נתוני אנימציה מובנים ללא רינדור המודל. התאמת הדוגמה להערכת קטעים נוספים, הגדלת תדירות הדגימה, או ניתוח צמתים נבחרים.

קרא עוד