تقييم الرسوم المتحركة في ملف GLB أو GLTF يتيح لك فحص كيفية تحرك وتدوير وتكبير كائنات 3D بمرور الوقت دون تصيير المشهد. يمكنك استخدام هذا النهج لتحليل بيانات الرسوم المتحركة، والتحقق من الحركات، أو تصدير التحولات لمزيد من المعالجة. في هذا الدرس، ستقوم بتحميل نموذج GLB متحرك، وفحص مقاطعه، وتقييم خمس نقاط زمنية، وتصدير تحولات العقد إلى CSV.

تحميل وتقييم الرسوم المتحركة GLB في بايثون

يحتوي مقطع الرسوم المتحركة على بيانات الرسوم المتحركة المرتبطة بمشهد. تحدد أوقات البدء والإيقاف الفترة التي يمكنك تقييمها. سير العمل هو تحميل نموذج، اختيار مقطع الرسوم المتحركة، تطبيقه في أوقات محددة، فحص عقد المشهد، وتصدير التحويلات الخاصة بها.

تثبيت Aspose.3D for Python via .NET

قم بتثبيت Aspose.3D for Python via .NET، والذي يوفر واجهة برمجة تطبيقات تقييم الرسوم المتحركة المستخدمة هنا:

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.

تطبيق الرسوم المتحركة عند طوابع زمنية محددة

العملية المركزية هي 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.

احصل على ترخيص مؤقت مجاني

يمكنك طلب ترخيص مؤقت مجاني لمدة 30 يومًا لتقييم Aspose.3D for Python via .NET بدون قيود التقييم. لتطبيق الترخيص في تطبيق Python الخاص بك، اتبع دليل ترخيص Aspose.3D.

موارد التعلم المجانية

استكشف الموارد التالية لتتعرف أكثر على العمل مع نماذج 3D، والرسوم المتحركة، وتنسيقات الملفات المدعومة باستخدام Aspose.3D for Python via .NET:

الخاتمة

Aspose.3D for Python via .NET 26.10 يتيح لك تقييم مقاطع الرسوم المتحركة GLB و GLTF في أوقات مختارة باستخدام AnimationClip.apply_to(). من خلال قراءة تحولات العقد بعد كل تقييم، يمكنك فحص الحركة وتصدير بيانات الرسوم المتحركة المهيكلة دون الحاجة إلى عرض النموذج. قم بتعديل المثال لتقييم مقاطع إضافية، زيادة تردد العينة، أو تحليل العقد المختارة.

اقرأ المزيد