Animovaný model GLB nebo GLTF ukládá geometrii a animační data spíše než složku připravených obrázků. Pro vytvoření miniatur nebo sekvence snímků musíte vyhodnotit animaci modelu v konkrétních časových okamžicích a vykreslit každou vzniklou scénu do obrázku. Tento tutoriál vysvětluje, jak renderovat snímky animace GLB v Pythonu pomocí Aspose.3D for Python via .NET. Načtete animovaný model, vyberete klip, odeberete vzorky z časové osy a uložíte každý snímek jako číslovaný PNG obrázek. Výsledné obrázky můžete použít jako náhledy modelu nebo jako vstup do samostatného pracovního postupu se sekvencí obrázků.
Instalace Aspose.3D pro Python via .NET
Nainstalujte balíček pomocí pip:
pip install aspose-3d
Budete také potřebovat:
- Animovaný soubor
.glbnebo soubor.gltfs přidruženými buffery a texturami. - Renderovací prostředí kompatibilní s hardwarovými požadavky Aspose.3D. Viz systémové požadavky.
- Pozice kamery, která udržuje animovaný objekt v zorném poli po celou dobu vzorkovaného časového úseku.
Vykreslit animační klip jako PNG snímky
Uložte následující kód jako render_glb_animation_frames.py a spusťte jej ze složky obsahující animated_model.glb.
import hashlib
import math
from pathlib import Path
import aspose.threed as a3d
from aspose.pydrawing import Color, Size
from aspose.pydrawing.imaging import ImageFormat
from aspose.threed.entities import Camera
from aspose.threed.utilities import Vector3
INPUT_FILE = Path("animated_model.glb")
OUTPUT_DIR = Path("frames")
FRAMES_PER_SECOND = 5
IMAGE_WIDTH = 800
IMAGE_HEIGHT = 600
def main():
if not INPUT_FILE.is_file():
raise FileNotFoundError(f"Input model not found: {INPUT_FILE}")
scene = a3d.Scene.from_file(str(INPUT_FILE))
clips = list(scene.animation_clips)
if not clips:
raise RuntimeError("The input model has no animation clips.")
clip = clips[0]
duration = float(clip.stop - clip.start)
if duration <= 0:
raise ValueError("The selected animation has no positive time range.")
# Use the same camera position for every frame.
camera = Camera()
camera_node = scene.root_node.create_child_node("PreviewCamera", camera)
camera_node.transform.translation = Vector3(3, 2, 6)
camera.look_at = Vector3.ORIGIN
options = a3d.ImageRenderOptions()
options.background_color = Color.white
options.asset_directories.append(str(INPUT_FILE.resolve().parent))
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
frame_count = max(1, math.ceil(duration * FRAMES_PER_SECOND))
hashes = set()
for frame_index in range(frame_count):
timestamp = float(clip.start) + frame_index / FRAMES_PER_SECOND
clip.apply_to(timestamp)
frame_path = OUTPUT_DIR / f"frame_{frame_index:04d}.png"
scene.render(
camera,
str(frame_path),
Size(IMAGE_WIDTH, IMAGE_HEIGHT),
ImageFormat.png,
options,
)
if not frame_path.is_file() or frame_path.stat().st_size == 0:
raise RuntimeError(f"Rendering did not create a usable PNG: {frame_path}")
hashes.add(hashlib.sha256(frame_path.read_bytes()).digest())
print(f"Frame {frame_index + 1}/{frame_count}: {frame_path} at {timestamp:.3f}s")
if frame_count > 1 and len(hashes) == 1:
print("WARNING: All PNG files are byte-identical. Check animation state and camera view.")
print(f"Created {frame_count} PNG file(s) in {OUTPUT_DIR}/")
if __name__ == "__main__":
main()
Spusťte pomocí:
python render_glb_animation_frames.py
Očekávaný výstup: adresář frames obsahující obrázky jako frame_0000.png, frame_0001.png a frame_0002.png. Když renderér správně zachytí aplikované stavy animace, obrázky zobrazí model v po sobě jdoucích bodech jeho animace.
Jak funguje kód pro vykreslování rámců
Načtěte scénu a vyberte animační klip
Metoda Scene.from_file() otevře model, zatímco scene.animation_clips poskytuje přístup k animačním klipům, které obsahuje. Příklad používá první klip a čte jeho vlastnosti start a stop pro určení časového rozsahu. Model bez animačních klipů nemůže touto metodou vygenerovat animovanou sekvenci.
Pro více podrobností o výběru klipů a transformacích uzlů, viz Načíst a vyhodnotit animace GLB/GLTF v Pythonu.
Vzorkovat časovou osu v pravidelných intervalech
Skript používá pět vzorků za sekundu. Pokud klip trvá dvě sekundy, požaduje deset snímků s časovými značkami od 0.0 do 1.8 sekundy, když klip začíná od nuly. Vyloučením přesného koncového bodu se zabraňuje generování nadbytečného posledního snímku pro animace, které se vracejí k výchozí pozici.
Metoda clip.apply_to(timestamp) aplikuje vybraný animační klip na každý časový okamžik. Na rozdíl od vyhodnocování jedné sekvence klíčových snímků je tento krok určen k aktualizaci animované scény před tím, než je obrázek vykreslen.
Vykreslete aktualizovanou scénu z jedné kamery
Příklad přidá kameru na pevnou pozici a pro každý snímek zavolá scene.render(). Také nastaví velikost obrázku 800 × 600 pixelů a výstupní formát PNG. Udržování kamery pevně uspořádané usnadňuje kontrolu rozdílů mezi snímky.
The průvodce renderováním scény Aspose.3D ukazuje, jak uložit 3D pohled jako obrázek. Pro animační sekvence ověřte, že každý obrázek odráží zamýšlený časový okamžik. Pokud po sobě jdoucí snímky ukazují stejnou pózu, zkontrolujte, zda renderovací cesta používá aktuální animovaný stav.
Pojmenujte každý PNG rámec konzistentně
Vzor frame_0000.png udržuje obrázky v pořadí při řazení podle názvu souboru. Je vhodný pro generování náhledových miniatur nebo předání výstupu do samostatného sekvenčního obrazu nebo video workflow. Skript nevytváří video ani animovaný GIF.
Skript také porovnává hash souborů, aby varoval, když jsou všechny výstupní soubory bajtově identické. Různé hash hodnoty samy o sobě neprokazují, že animace je správně vykreslena; prohlédněte si reprezentativní snímky vedle sebe.
Získat bezplatnou dočasnou licenci
Můžete požádat o bezplatnou 30‑denní dočasnou licenci, abyste mohli renderovat snímky animací GLB a GLTF pomocí Aspose.3D for Python via .NET bez omezení zkušební verze. 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 načítání animovaných 3D modelů, práci s animačními klipy a vykreslování 3D scén pomocí Aspose.3D for Python via .NET:
- Aspose.3D for Python Developer Guide – Naučte se, jak načíst, upravit, animovat a renderovat 3D modely v Pythonu.
- Render 3D Scenes to Images – Naučte se, jak nakonfigurovat kameru a renderovat 3D scény jako soubory obrázků.
- Aspose.3D Python API Reference – Prozkoumejte třídy a metody pro animační klipy, renderování scén, kamery a zpracování 3D souborů.
- Free Online 3D Applications – Prohlížejte, převádějte a zpracovávejte podporované 3D modely přímo ve svém prohlížeči.
- Aspose.3D Tutorials and Articles – Najděte praktické tutoriály v Pythonu, které pokrývají animace GLB/GLTF, vyhodnocování klíčových snímků a další úkoly zpracování 3D.
Závěr
Můžete generovat snímky rámců vzorkováním časové osy animace a vykreslením scény v každém vybraném časovém okamžiku. Použijte očíslované PNG soubory k vytvoření miniatur, porovnání pozic nebo přípravě sekvence obrázků pro jiný nástroj. Pokud potřebujete číselné hodnoty animace místo obrázků, podívejte se na návod pro vyhodnocení klíčových snímků. Pro problémy s vykreslováním navštivte Aspose.3D support forum.
