Vyhodnocování animací v souboru GLB nebo GLTF vám umožňuje zkontrolovat, jak se 3D objekty pohybují, otáčejí a mění měřítko v čase, aniž byste museli vykreslovat scénu. Tento přístup můžete použít k analýze animačních dat, ověření pohybů nebo exportu transformací pro další zpracování. V tomto tutoriálu načtete animovaný model GLB, prozkoumáte jeho klipy, vyhodnotíte pět časových okamžiků a exportujete transformace uzlů do formátu CSV.
Načíst a vyhodnotit animace GLB v Pythonu
Animovaný klip obsahuje animační data spojená se scénou. Jeho počáteční a koncové časy definují období, které můžete vyhodnocovat. Pracovní postup spočívá v načtení modelu, výběru animovaného klipu, jeho aplikaci v konkrétních časech, prozkoumání uzlů scény a exportu jejich transformací.
Instalace Aspose.3D pro Python via .NET
Nainstalujte Aspose.3D for Python via .NET, která poskytuje API pro vyhodnocování animací použité zde:
pip install aspose-3d==26.10.0
Viz dokumentaci k instalaci pro více podrobností.
Vyhodnoťte animaci a exportujte transformace uzlů
Následující ukázkový kód vyhodnocuje první animační klip v pěti rovnoměrně rozložených časových okamžicích a ukládá lokální posunutí, rotaci a škálování každého uzlu do souboru 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}")
Jak funguje vyhodnocení animace
Načtěte scénu GLB a získejte její klipy
Scene.from_file() načte model GLB nebo GLTF. Kolekce scene.animation_clips poskytuje dostupné klipy:
scene = a3d.Scene.from_file("animated_model.glb")
clips = list(scene.animation_clips)
Každý klip vystavuje název a časový rozsah v sekundách pomocí name, start a stop. Viz referenční dokumentaci AnimationClip API.
Použít animaci v konkrétních časových značkách
Hlavní operací je clip.apply_to(time). Pro ukázkový klip, jehož délka je přibližně 3.708 sekundy, je pět časových razítek:
| Vzorek | Čas (sekundy) |
|---|---|
| 1 | 0.000 |
| 2 | 0.927 |
| 3 | 1.854 |
| 4 | 2.781 |
| 5 | 3.708 |
Můžete změnit FRAME_COUNT, abyste získali více vzorků. Tyto vzorky jsou vyhodnocené stavy animace, nikoli vykreslené snímky obrazu.
Čtení posunu, rotace a měřítka
Po aplikaci ořezu skript prochází všechny uzly scény a čte:
transform.translation: lokální pozice uzlu.transform.rotation: lokální rotace uzlu.transform.scaling: lokální měřítko uzlu.
Jedná se o lokální transformace, nikoli nutně souřadnice ve světovém prostoru. Transformace nadřazeného uzlu také ovlivňují konečnou pozici uzlu ve scéně. Uzly bez animace mohou zachovat stejné hodnoty při každém časovém razítku.
CSV výstup z animace
Skript vytvoří animation_transforms.csv. Pro dodaný vzor konzole začíná s:
Found 1 animation clip(s).
0: Animation_1 (0.000 to 3.708 seconds)
Evaluating: Animation_1
CSV obsahuje jeden řádek pro každý uzel scény při každém odebraném časovém okamžiku a tyto sloupce:
| Sloupec | Popis |
|---|---|
| Čas | Časové razítko vyhodnocení v sekundách |
| Index uzlu | Index uzlu v rekurzivním průchodu |
| Název uzlu | Název uzlu scény |
| Posun | Místní pozice v daném časovém okamžiku |
| Rotace | Místní rotace v daném časovém okamžiku |
| Měřítko | Místní měřítko v daném časovém okamžiku |
CSV můžete otevřít v tabulkové aplikaci nebo jej analyzovat pomocí Pythonu, abyste porovnali transformace napříč klipem.
Co zkontrolovat při hodnocení animací
Více klipů. Tento příklad vyhodnocuje clips[0]. Pro vyhodnocení jiné animace zvolte jiný index nebo načtěte klip podle názvu pomocí scene.get_animation_clip(name).
Rozlišení vzorkování. Pět časových značek poskytuje základní přehled, ale může přehlédnout rychlý pohyb. Zvyšte FRAME_COUNT nebo vyberte konkrétní časy pro podrobnější kontrolu.
Skelet a morph cíle. Ne všechny animační efekty se projevují jako změny v lokálním posunu, rotaci nebo škálování uzlu. Tento CSV workflow nezachycuje každý typ skeletální nebo morph‑cílové deformace.
Závislosti GLTF. Textové soubory .gltf mohou odkazovat na externí buffery a textury. Ujistěte se, že tyto soubory jsou umístěny na očekávaných relativních cestách.
Vyžaduje vyhodnocování animací GLB GPU?
Tento příklad nevolá Scene.render() ani backend pro vykreslování Vulkan. Vyhodnocuje vlastnosti animace a zapisuje data CSV místo generování obrázků. Aspose.3D rendering má samostatné hardwarové požadavky, které se na workflow generující pouze CSV nevztahují.
Získejte bezplatnou dočasnou licenci
Můžete požádat o bezplatnou 30denní dočasnou licenci k vyzkoušení Aspose.3D for Python via .NET bez omezení vyhodnocování. Pro použití licence ve vaší Python aplikaci postupujte podle průvodce licencováním Aspose.3D.
Bezplatné výukové zdroje
Prozkoumejte následující zdroje a zjistěte více o práci s 3D modely, animacemi a podporovanými formáty souborů pomocí Aspose.3D for Python via .NET:
- Aspose.3D for Python Developer Guide – Naučte se, jak vytvářet, načítat, upravovat a zpracovávat 3D soubory.
- Free Online 3D Applications – Prohlížejte, převádějte a zpracovávejte 3D modely přímo ve svém prohlížeči.
- Aspose.3D Python API Reference – Prozkoumejte dostupné třídy, metody a vlastnosti.
- Aspose.3D Tutorials and Articles – Najděte praktické příklady a návody pro práci s 3D formáty souborů.
Závěr
Aspose.3D for Python via .NET 26.10 vám umožňuje vyhodnocovat animační klipy GLB a GLTF ve vybraných časech pomocí AnimationClip.apply_to(). Čtením transformací uzlů po každém vyhodnocení můžete zkontrolovat pohyb a exportovat strukturovaná animační data bez renderování modelu. Přizpůsobte příklad tak, aby vyhodnocoval další klipy, zvýšil vzorkovací frekvenci nebo analyzoval vybrané uzly.
