Animace klíčových snímků definují, jak se hodnota mění v průběhu času. Například můžete určit, kde by měl být objekt na začátku animace a kam se má dále přesunout, a poté vypočítat jeho pozici v libovolném bodě mezi těmito klíčovými snímky. To je užitečné pro kontrolu křivek pohybu, ověřování načasování animace a exportování vzorkovaných hodnot pro další analýzu. Aspose.3D for Python via .NET vám umožňuje vzorkovat sekvenci klíčových snímků v určeném časovém okamžiku bez renderování 3D scény. V tomto tutoriálu vytvoříte jednoduchou animaci pozice, vyhodnotíte její interpolované hodnoty každých půl sekundy a uložíte výsledky do souboru CSV.

Instalace Aspose.3D pro Python

Nainstalujte Aspose.3D for Python via .NET verzi 26.10 pomocí pip:

pip install aspose-3d==26.10.0

Tento příklad používá pouze modul aspose.threed.animation a vestavěný modul csv v Pythonu. Nemusíte mít soubor GLB/GLTF ani grafickou kartu kompatibilní s Vulkan, protože kód provádí výpočty animace místo vykreslování obrázků.

Pro informace o platformě a instalaci se podívejte na Aspose.3D for Python dokumentaci.

Vytvoření a vyhodnocení animace klíčových snímků v Pythonu

Příklad modeluje pozici X objektu. Pozice začíná na 0, po dvou sekundách dosáhne 10 jednotek a po pěti sekundách se vrátí na 0.

Čas (sekundy)X poziceAkce
00Start
210Dosáhnout maximální pozice
50Vrátit se na začátek

Hodnoty mezi těmito klíčovými snímky jsou vypočítány pomocí lineární interpolace. Vzorek vytváří samostatnou číselnou animační křivku; nepřipojuje sekvenci k žádnému skutečnému objektu scény.

Kompletní příklad kódu v Pythonu

Následující skript vytvoří KeyframeSequence, přidá tři klíčové snímky, vyhodnotí jedenáct časových razítek, ověří hodnoty klíčových snímků a exportuje výsledky do souboru 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.")

Pochopte, jak funguje vyhodnocování klíčových snímků

Definujte sekvenci klíčových snímků

Třída KeyframeSequence představuje číselnou křivku s hodnotami definovanými v konkrétních časech. Tento řádek vytvoří sekvenci s názvem PositionX:

sequence = KeyframeSequence("PositionX")

Název pomáhá identifikovat sekvenci. Automaticky neprováže sekvenci s mesh nebo vlastností uzlu. Pro podrobnosti viz KeyframeSequence API reference.

Přidat klíčové snímky s lineární interpolací

Každé volání add() poskytuje časové razítko, hodnotu a typ interpolace:

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 říká sekvenci, aby vypočítala mezilehlé hodnoty proporcionálně mezi klíčovými snímky. Výsledkem je, že hodnota se během prvních dvou sekund rovnoměrně zvyšuje z 0 na 10 a během dalších tří sekund se rovnoměrně snižuje z 10 na 0.

Vypočítejte hodnotu k časovému razítku

Klíčová operace je:

value = sequence.evaluate(1.5)

Pro tento příklad je očekávaný výsledek po 1,5 sekundě 7,5. Lineární interpolace používá tento vzorec:

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

Zde je t požadovaný časový okamžik, t0 a t1 jsou okolní časy klíčových snímků a v0 a v1 jsou jejich odpovídající hodnoty.

Mezi prvními dvěma klíčovými snímky, vyhodnocení v 1,5 sekundy dává:

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

Nemusíte tuto rovnici implementovat sami. KeyframeSequence.evaluate() provádí výpočet podle nastavení interpolace sekvence.

Zkontrolujte vyhodnocené hodnoty

Pro ukázkové klíčové snímky je výstup:

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.

Příkazy assert kontrolují hodnoty ve třech definovaných časových značkách klíčových snímků. Používají malou toleranci místo přímé rovnosti s plovoucí desetinnou čárkou.

Měnící se hodnoty mezi klíčovými snímky potvrzují, že sekvence je vzorkována po celém svém časovém rozsahu.

Exportovat hodnoty klíčových snímků do CSV

Po vyhodnocení sekvence skript zapíše čas a vypočtenou X pozici do keyframe_animation.csv pomocí modulu csv v Pythonu. Soubor začíná:

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

Tento CSV můžete otevřít v tabulkové aplikaci, vykreslit výslednou křivku pohybu nebo jej načíst zpět do Pythonu pro analýzu. Pro získání podrobnějších výsledků snižte step z 0.5 na menší interval a upravte požadovaný časový rozsah.

Praktické úvahy

Ukázka pouze v určeném časovém rozsahu. Tento tutoriál vyhodnocuje časy od 0 do 5 sekund. Hodnoty mimo definované klíčové snímky jsou řízeny chováním před‑ a po‑extrapolace, což je oddělené od interpolace mezi klíčovými snímky.

Zvolte interpolaci uvážlivě. Lineární interpolace produkuje konstantní změny v každém segmentu. Ostatní styly interpolace mohou vytvořit různé charakteristiky pohybu a mohou vyžadovat další nastavení klíčových snímků. Před změnou režimu interpolace si prohlédněte referenci API animace.

Rozlišujte vyhodnocování animace od animace scény. Kód vyhodnocuje pouze číselnou křivku. Neaktualizuje pozici X uzlu scény ani nevytváří vykreslenou animaci. Pro přesun 3D objektu musí být sekvence připojena k vhodné animované vlastnosti ve scéně.

GPU rendering není vyžadováno. Není voláno Scene.render() ani žádný renderovací backend. To činí ukázku vhodnou pro práci s animačními hodnotami na strojích bez GPU kompatibilního s Vulkanem.

Získejte bezplatnou dočasnou licenci

Můžete požádat o bezplatnou 30‑denní dočasnou licenci, abyste mohli vyhodnotit Aspose.3D for Python via .NET bez omezení zkušební verze. Postupujte podle průvodce licencováním Aspose.3D, abyste licenci použili ve své aplikaci.

Bezplatné výukové zdroje

Prozkoumejte tyto zdroje a pokračujte v práci s 3D animací a workflow zpracování souborů v Pythonu:

Závěr

Můžete použít KeyframeSequence.evaluate() v Aspose.3D for Python via .NET k výpočtu animačních hodnot v konkrétních časech bez renderování modelu. V tomto příkladu tři klíčové snímky definují křivku X‑pozice, zatímco evaluátor vypočítá mezilehlé pozice a exportuje je do CSV. Pro úpravu příkladu změňte hodnoty klíčových snímků nebo interval vzorkování. Pro animaci na úrovni modelu je dalším krokem svázat animační křivky s vlastnostmi scény a aplikovat je na objekty.

Číst dál