Ключові кадри анімації визначають, як значення змінюється з часом. Наприклад, ви можете вказати, де об’єкт має бути на початку анімації і куди він має переміститися далі, а потім обчислити його позицію в будь‑який момент між цими ключовими кадрами. Це корисно для аналізу кривих руху, перевірки таймінгу анімації та експорту вибіркових значень для подальшого аналізу. Aspose.3D for Python via .NET дозволяє вибирати послідовність ключових кадрів у зазначений момент часу без рендерингу 3D‑сцени. У цьому підручнику ви створите просту анімацію позиції, оціните її інтерпольовані значення кожні півсекунди та збережете результати у CSV‑файл.

Встановити Aspose.3D для Python

Встановіть Aspose.3D for Python via .NET версію 26.10 за допомогою pip:

pip install aspose-3d==26.10.0

У цьому прикладі використовується лише модуль aspose.threed.animation та вбудований у Python модуль csv. Вам не потрібен файл GLB/GLTF або графічна карта, сумісна з Vulkan, оскільки код виконує розрахунки анімації, а не рендеринг зображень.

Для отримання інформації про платформу та встановлення зверніться до Aspose.3D for Python documentation.

Створення та оцінка анімації ключових кадрів у Python

Приклад моделює позицію X об’єкта. Позиція починається з 0, досягає 10 одиниць через дві секунди і повертається до 0 через п’ять секунд.

Час (секунди)Позиція XДія
00Початок
210Досягти максимальної позиції
50Повернутись до початку

Значення між цими ключовими кадрами обчислюються за допомогою лінійної інтерполяції. Приклад створює окрему числову анімаційну криву; вона не прив’язує послідовність до реального об’єкта сцени.

Повний приклад коду Python

Наступний скрипт створює KeyframeSequence, додає три ключові кадри, оцінює одинадцять міток часу, перевіряє значення ключових кадрів і експортує результати у keyframe_animation.csv.

import csv

from aspose.threed.animation import (
    KeyframeSequence,
    Interpolation
)

OUTPUT_FILE = "keyframe_animation.csv"

# Create an animation curve
sequence = KeyframeSequence("PositionX")

# Define keyframes using linear interpolation
sequence.add(0.0, 0.0, Interpolation.LINEAR)
sequence.add(2.0, 10.0, Interpolation.LINEAR)
sequence.add(5.0, 0.0, Interpolation.LINEAR)

# Display the defined keyframes
print("Keyframes:")

for key in sequence.key_frames:
    print(
        f"Time: {key.time:.2f}s, "
        f"Value: {key.value:.2f}"
    )

# Evaluate the animation every 0.5 seconds
start_time = 0.0
end_time = 5.0
step = 0.5

records = []

print("\nEvaluated animation values:")
print("---------------------------")
print("Time (s) | X Position")

sample_count = int(
    round((end_time - start_time) / step)
) + 1

for i in range(sample_count):
    time = float(start_time + i * step)

# Evaluate the animation at this timestamp
    value = float(sequence.evaluate(time))

records.append([time, value])

print(f"{time:8.2f} | {value:10.3f}")

# Verify values at known timestamps
assert abs(sequence.evaluate(0.0) - 0.0) < 1e-5
assert abs(sequence.evaluate(2.0) - 10.0) < 1e-5
assert abs(sequence.evaluate(5.0) - 0.0) < 1e-5

# Export animation data to CSV
with open(
    OUTPUT_FILE,
    "w",
    newline="",
    encoding="utf-8"
) as file:

writer = csv.writer(file)

writer.writerow([
        "Time (seconds)",
        "X Position"
    ])

writer.writerows(records)

print(f"\nAnimation data saved to {OUTPUT_FILE}")
print("Keyframe validation passed.")

Зрозумійте, як працює оцінка ключових кадрів

Визначте послідовність ключових кадрів

Клас KeyframeSequence представляє числову криву зі значеннями, визначеними у певні моменти часу. Цей рядок створює послідовність з назвою PositionX:

sequence = KeyframeSequence("PositionX")

Назва допомагає ідентифікувати послідовність. Вона не автоматично прив’язує послідовність до сітки або властивості вузла. Для деталей дивіться KeyframeSequence API reference.

Додати ключові кадри з лінійною інтерполяцією

Кожний виклик add() передає мітку часу, значення та тип інтерполяції:

sequence.add(0.0, 0.0, Interpolation.LINEAR)
sequence.add(2.0, 10.0, Interpolation.LINEAR)
sequence.add(5.0, 0.0, Interpolation.LINEAR)

Interpolation.LINEAR повідомляє послідовність обчислювати проміжні значення пропорційно між ключовими кадрами. У результаті значення рівномірно зростає від 0 до 10 протягом перших двох секунд і рівномірно спадає від 10 до 0 протягом наступних трьох секунд.

Обчислити значення у певний момент часу

Ключова операція — це:

value = sequence.evaluate(1.5)

Для цього прикладу очікуваний результат через 1.5 секунди становить 7.5. Лінійна інтерполяція слідує цій формулі:

[ v(t) = v_0 + \frac{t - t_0}{t_1 - t_0}(v_1 - v_0) ]

Тут t — це запитаний часовий штамп, t0 і t1 — це часи навколишніх ключових кадрів, а v0 і v1 — їх відповідні значення.

Між першими двома ключовими кадрами, оцінка на 1.5 секунди дає:

[ v(1.5) = 0 + \frac{1.5 - 0}{2 - 0}(10 - 0) = 7.5 ]

Вам не потрібно реалізовувати цю формулу самостійно. KeyframeSequence.evaluate() виконує обчислення відповідно до налаштувань інтерполяції послідовності.

Перевірте обчислені значення

Для зразкових keyframes, результат такий:

Keyframes:
Time: 0.00s, Value: 0.00
Time: 2.00s, Value: 10.00
Time: 5.00s, Value: 0.00

Evaluated animation values:
---------------------------
Time (s) | X Position
    0.00 |      0.000
    0.50 |      2.500
    1.00 |      5.000
    1.50 |      7.500
    2.00 |     10.000
    2.50 |      8.333
    3.00 |      6.667
    3.50 |      5.000
    4.00 |      3.333
    4.50 |      1.667
    5.00 |      0.000

Animation data saved to keyframe_animation.csv
Keyframe validation passed.

Оператори assert перевіряють значення у трьох визначених мітках часу ключових кадрів. Вони використовують невеликий допуск замість прямого порівняння з плаваючою точкою.

Змінювані значення між ключовими кадрами підтверджують, що послідовність вибірково обробляється протягом усього її часового діапазону.

Експорт значень ключових кадрів у CSV

Після оцінки послідовності скрипт записує час і обчислену позицію X у файл keyframe_animation.csv, використовуючи модуль csv Python. Файл починається з:

Time (seconds),X Position
0.0,0.0
0.5,2.5
1.0,5.0
1.5,7.5
2.0,10.0

Ви можете відкрити цей CSV у програмі для роботи з електронними таблицями, побудувати отриману криву руху або зчитати його назад у Python для аналізу. Щоб отримати більш детальні результати, зменшіть step з 0.5 до меншого інтервалу та налаштуйте потрібний діапазон часу.

Практичні міркування

Зразок лише в межах запланованого діапазону часу. У цьому підручнику оцінюються часи від 0 до 5 секунд. Значення, що виходять за межі визначених ключових кадрів, керуються поведінкою перед- та після‑екстраполяції, яка окрема від інтерполяції між ключовими кадрами.

Вибирайте інтерполяцію свідомо. Лінійна інтерполяція забезпечує постійні зміни в кожному сегменті. Інші стилі інтерполяції можуть створювати різні характеристики руху і можуть вимагати додаткових налаштувань ключових кадрів. Дивіться довідку API анімації перед зміною режиму інтерполяції.

Відрізняйте оцінювання анімації від анімації сцени. Код оцінює лише числову криву. Він не оновлює позицію X вузла сцени і не створює відтворювану анімацію. Щоб перемістити 3D‑об’єкт, послідовність повинна бути підключена до відповідної анімованої властивості у сцені.

GPU рендеринг не потрібен. Не виконується виклик Scene.render() або бекенд рендерингу. Це робить зразок придатним для роботи з анімаційними значеннями на машинах без сумісного з Vulkan GPU.

Отримати безкоштовну тимчасову ліцензію

Ви можете запросити безкоштовну 30‑денну тимчасову ліцензію, щоб оцінити Aspose.3D for Python via .NET без обмежень пробної версії. Перегляньте посібник з ліцензування Aspose.3D, щоб застосувати ліцензію у вашому застосунку.

Безкоштовні навчальні ресурси

Ознайомтеся з цими ресурсами, щоб продовжити роботу з 3D‑анімацією та процесами обробки файлів у Python:

  • Aspose.3D for Python Developer Guide – Документація щодо завантаження, створення та обробки 3D‑сцен.
  • Aspose.3D Animation API Reference – Класи для ключових кадрів, інтерполяції, анімаційних кліпів та прив’язки властивостей.
  • Free Online 3D Applications – Інструменти на базі браузера для підтримуваних завдань з 3D‑файлами.
  • Aspose.3D Tutorials and Articles – Більше практичних прикладів роботи з 3D‑форматами.

Висновок

Ви можете використовувати KeyframeSequence.evaluate() в Aspose.3D for Python via .NET для обчислення значень анімації у певні моменти часу без рендерингу моделі. У цьому прикладі три ключові кадри визначають криву X‑позиції, тоді як оцінювач обчислює проміжні позиції та експортує їх у CSV. Щоб адаптувати приклад, змініть значення ключових кадрів або інтервал дискретизації. Для анімації на рівні моделі наступним кроком є прив’язка кривих анімації до властивостей сцени та їх застосування до об’єктів.

Читати далі