Sådan optimeres 3D-modeller i Python
Problem
Store 3D-modelfiler kan være langsomme at indlæse og overføre. Når du arbejder med Aspose.3D i Python, er der praktiske trin, du kan tage for at reducere filstørrelsen og fjerne unødvendige scenedata; primært ved at eksportere til et kompakt binært format og beskære ubrugte noder fra scenegrafen.
Forudsætninger
- Python 3.7 eller nyere
aspose-3d-foss-pakke installeret viapip install aspose-3d-foss- En 3D‑inddatafil (OBJ, STL, FBX, glTF eller 3MF)
Optimeringsteknikker
Konverter til et kompakt binært format
En af de mest effektive måder at reducere filstørrelsen på er at eksportere scenen til glTF-binær (.glb). GLB-formatet pakker geometri og materialer i en enkelt binær fil, som er betydeligt mindre og hurtigere at indlæse end tekstbaserede formater som OBJ eller ASCII FBX.
from aspose.threed import Scene
scene = Scene.from_file("model.obj")
# Use the .glb extension for binary GLB auto-detection
# Note: FileFormat.GLTF2_BINARY is a None stub — do not pass it to scene.save()
scene.save("model.glb")Inspicér og tæl mesh’er
Før behandlingen er det nyttigt at forstå, hvor mange mesh‑noder scenen indeholder. Dette hjælper med at identificere uventet store eller komplekse scener.
from aspose.threed import Scene
from aspose.threed.entities import Mesh
scene = Scene.from_file("model.obj")
mesh_count = 0
for node in scene.root_node.child_nodes:
if isinstance(node.entity, Mesh):
mesh_count += 1
print(f" Mesh '{node.name}': {len(node.entity.control_points)} vertices, "
f"{node.entity.polygon_count} polygons")
print(f"Total meshes: {mesh_count}")Fjern ubrugte (udelukkede) noder
Noder markeret som ekskluderet bliver ikke gengivet. Identificering og springe over disse noder under eksport reducerer scenens fodaftryk. Attributten excluded er en egenskab på Entity, ikke et metodekald.
from aspose.threed import Scene
from aspose.threed.entities import Mesh
scene = Scene.from_file("model.obj")
active_nodes = []
for node in scene.root_node.child_nodes:
entity = node.entity
if entity is not None and not entity.excluded:
active_nodes.append(node.name)
print(f"Active (non-excluded) nodes: {active_nodes}")Kodeeksempel
Dette eksempel indlæser en scene, rapporterer mesh‑statistikker og gemmer i det kompakte GLB‑format: den primære praktiske optimering, der er tilgængelig via Aspose.3D.
from aspose.threed import Scene
from aspose.threed.entities import Mesh
# Load the input model
scene = Scene.from_file("input.obj")
# Inspect mesh count and vertex totals
total_vertices = 0
for node in scene.root_node.child_nodes:
if isinstance(node.entity, Mesh):
mesh = node.entity
total_vertices += len(mesh.control_points)
print(f"Total vertices before export: {total_vertices}")
# Save to compact binary GLB — use .glb extension for auto-detection
# Note: FileFormat.GLTF2_BINARY is a None stub and must not be passed to scene.save()
scene.save("output.glb")
print("Saved as GLB (binary glTF)")Noter om optimeringsomfang
Aspose.3D leverer ikke mesh‑dekimerings‑ eller polygonreduceringsalgoritmer. Filstørrelsesreduktion opnås primært gennem:
- Eksport til binære formater (GLB i stedet for OBJ eller ASCII FBX)
- Spring over udelukkede eller tomme noder under din egen behandlingslogik
Påstande om specifikke procentvise hastighedsforøgelser eller mindskelser i hukommelsesforbruget afhænger af dine inputdata og kan ikke garanteres generelt.